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 }