1 /** 2 * Copyright 2008 WebPhotos 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package net.sf.webphotos.action; 17 18 import java.awt.event.ActionEvent; 19 import javax.swing.AbstractAction; 20 import javax.swing.JComboBox; 21 import javax.swing.JTable; 22 import javax.swing.JTextField; 23 import net.sf.webphotos.Album; 24 import net.sf.webphotos.gui.PainelWebFotos; 25 import net.sf.webphotos.gui.util.TableModelAlbum; 26 import net.sf.webphotos.util.Util; 27 import org.apache.commons.configuration.Configuration; 28 29 /** 30 * Pesquisa elementos no programa. Possui um método que organiza buscas através 31 * da quantidade de parâmetros passados ao construtor, com o campo de texto ou 32 * com o ID da categoria. Ao terminar a pesquisa, apresenta a quantidade de 33 * registros encontrados. 34 */ 35 public class AcaoPesquisa extends AbstractAction { 36 37 /** 38 * 39 */ 40 private static final long serialVersionUID = -3050139194212291060L; 41 private JComboBox lstCategoriasPesquisa; 42 private JTextField txtPesquisa; 43 private Configuration c = Util.getConfig(); 44 45 /** 46 * Construtro da classe. Recebe três parâmetros. Uma lista inicial de 47 * categorias, um campo de texto com um valor a ser pesquisado e uma tabela 48 * de albúm. Seta esses três valores em variáveis da classe que serão 49 * utilizadas posteriormente. 50 * 51 * @param lst Lista de categorias. 52 * @param txt Campo de texto com valor a ser pesquisado. 53 * @param tb Tabela de albúm. 54 */ 55 public AcaoPesquisa(JComboBox lst, JTextField txt, JTable tb) { 56 lstCategoriasPesquisa = lst; 57 txtPesquisa = txt; 58 } 59 60 /** 61 * Faz as pesquisas ao banco utilizando os valores de ID ou com o campo de 62 * texto de pesquisa. Faz a busca com essas variáveis de quatro maneiras 63 * diferentes. Com categoria sem pesquisa, sem categoria e pesquisa, com 64 * categoria e pesquisa, e sem categoria com pesquisa. Após definir o tipo 65 * de busca, trata possíveis exceções e atualiza o modelo do albúm. 66 * Apresenta o número de registros encontrados e tira o cursor do modo de 67 * espera. 68 * 69 * @param e Evento da ação de pesquisa. 70 */ 71 @Override 72 public void actionPerformed(ActionEvent e) { 73 String sql; 74 // ação pesquisar (clique em botao pesquisar ou tecla ENTER 75 PainelWebFotos.setCursorWait(true); 76 int categoriaID = Album.getAlbum().getLstCategoriasID(lstCategoriasPesquisa.getSelectedItem().toString()); 77 String strCategoriaID = Integer.toString(categoriaID); 78 String pesquisa = txtPesquisa.getText(); 79 80 // com categoria sem pesquisa 81 // apresenta todos os registros dessa categoria 82 if (pesquisa.length() == 0 && categoriaID != -1) { 83 sql = c.getString("sql5"); 84 sql = sql.replaceFirst("\\?2", strCategoriaID); 85 86 // sem categoria sem pesquisa 87 // apresenta os registros conforme sql1 88 } else if (pesquisa.length() == 0 && categoriaID == -1) { 89 sql = c.getString("sql1"); 90 91 // com categoria e com pesquisa 92 } else if (pesquisa.length() > 0 && categoriaID != -1) { 93 sql = c.getString("sql4"); 94 // substitui ?1 pela chave de pesquisa 95 sql = sql.replaceFirst("\\?1", pesquisa); 96 // substitui ?2 pela categoriaID 97 sql = sql.replaceFirst("\\?2", strCategoriaID); 98 99 // sem categoria com pesquisa 100 } else { 101 sql = c.getString("sql3"); 102 sql = sql.replaceFirst("\\?1", pesquisa); 103 } 104 105 TableModelAlbum.getModel().update(sql); 106 TableModelAlbum.getModel().fireTableDataChanged(); 107 108 PainelWebFotos.apresentaNumReg(); 109 PainelWebFotos.setCursorWait(false); 110 } 111 }