Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
TableModelAlbum |
|
| 1.8666666666666667;1,867 |
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.gui.util; | |
17 | ||
18 | // Modelo de tabela para bases de dados com suporte a cursores rolantes (MYSQL) | |
19 | import java.util.List; | |
20 | import javax.sql.RowSetEvent; | |
21 | import javax.sql.RowSetListener; | |
22 | import javax.swing.JOptionPane; | |
23 | import javax.swing.table.AbstractTableModel; | |
24 | import net.sf.webphotos.dao.jpa.AlbumDAO; | |
25 | import net.sf.webphotos.util.ApplicationContextResource; | |
26 | import org.apache.log4j.Logger; | |
27 | ||
28 | /** | |
29 | * Gera o modelo da tabela de albuns. | |
30 | */ | |
31 | public class TableModelAlbum extends AbstractTableModel implements RowSetListener { | |
32 | ||
33 | private static final long serialVersionUID = 8393087620197315052L; | |
34 | 0 | private static final TableModelAlbum instancia = new TableModelAlbum(); |
35 | private String ultimoSQL; | |
36 | ||
37 | 0 | private List<Object[]> tableData = null; |
38 | 0 | private static Logger log = Logger.getLogger(TableModelAlbum.class); |
39 | 0 | private static AlbumDAO albunsDAO = (AlbumDAO) ApplicationContextResource.getBean("albunsDAO"); |
40 | ||
41 | // construtor | |
42 | private TableModelAlbum() { | |
43 | 0 | super(); |
44 | 0 | } |
45 | ||
46 | /** | |
47 | * Retorna a instância da própria classe. | |
48 | * | |
49 | * @return Retorna um TableModelAlbum. | |
50 | */ | |
51 | public static TableModelAlbum getModel() { | |
52 | 0 | return instancia; |
53 | } | |
54 | ||
55 | /** | |
56 | * Repassa para a função {@link java.util.TableModelAlbum#update(String) update(String sql)} | |
57 | * enviando a variavel últimoSQL como parametro. | |
58 | */ | |
59 | public void update() { | |
60 | 0 | update(getUltimoSQL()); |
61 | 0 | } |
62 | ||
63 | /** | |
64 | * Executa um update no banco. Caso ocorra algum problema, o sistema tenta | |
65 | * reconectar ao Banco de Dados. Recebe uma variável para realizar um | |
66 | * comando no banco. | |
67 | * | |
68 | * @param sql Comando de sql. | |
69 | */ | |
70 | public void update(String sql) { | |
71 | try { | |
72 | 0 | ultimoSQL = sql; |
73 | 0 | log.debug("Executando - " + ultimoSQL); |
74 | 0 | tableData = albunsDAO.findByNativeQuery(ultimoSQL); |
75 | 0 | } catch (Exception ex) { |
76 | 0 | log.error("Ocorreu um erro durante a leitura do álbum no banco de dados", ex); |
77 | 0 | int selecao = JOptionPane.showConfirmDialog(null, |
78 | "ERRO durante leitura do álbum no banco de dados.\n\nTentar Novamente?", | |
79 | "Aviso!", | |
80 | JOptionPane.YES_NO_OPTION, | |
81 | JOptionPane.WARNING_MESSAGE); | |
82 | 0 | if (selecao == JOptionPane.YES_OPTION) { |
83 | 0 | update(sql); |
84 | } else { | |
85 | 0 | log.error("Ocorreu um erro inexperado durante a leitura do álbum", ex); |
86 | 0 | JOptionPane.showMessageDialog(null, "ERRO inexperado durante leitura do álbum - " + ex.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE); |
87 | 0 | throw new RuntimeException("Ocorreu um erro inexperado durante a leitura do álbum", ex); |
88 | } | |
89 | 0 | } |
90 | 0 | } |
91 | ||
92 | /** | |
93 | * Retorna o nome de uma coluna. | |
94 | * @param col Número da coluna. | |
95 | * @return Retorna o nome da coluna. | |
96 | */ | |
97 | @Override | |
98 | public String getColumnName(int col) { | |
99 | try { | |
100 | 0 | return albunsDAO.createNativeQuery(ultimoSQL).getParameter(col).getName(); |
101 | 0 | } catch (Exception e) { |
102 | 0 | log.error("Error trying to get column name", e); |
103 | 0 | return "Error"; |
104 | } | |
105 | } | |
106 | ||
107 | /** | |
108 | * Retorna o número de colunas. | |
109 | * | |
110 | * @return Retorna o numero de colunas. | |
111 | */ | |
112 | @Override | |
113 | public int getColumnCount() { | |
114 | try { | |
115 | 0 | return albunsDAO.createNativeQuery(ultimoSQL).getParameters().size(); |
116 | 0 | } catch (Exception e) { |
117 | 0 | log.error("Error trying to get column count", e); |
118 | 0 | return 0; |
119 | } | |
120 | } | |
121 | ||
122 | /** | |
123 | * Retorna o número de linhas. | |
124 | * | |
125 | * @return Retorna o número de linhas. | |
126 | */ | |
127 | @Override | |
128 | public int getRowCount() { | |
129 | try { | |
130 | 0 | return albunsDAO.createNativeQuery(ultimoSQL).getResultList().size(); |
131 | 0 | } catch (Exception e) { |
132 | 0 | log.error("Error trying to get row count", e); |
133 | 0 | return 0; |
134 | } | |
135 | } | |
136 | ||
137 | /** | |
138 | * Obtém o valor na tabela. Faz a procura através da linha e coluna. | |
139 | * | |
140 | * @param row Número da linha. | |
141 | * @param col Número da coluna. | |
142 | * @return Retorna o valor na tabela. | |
143 | */ | |
144 | @Override | |
145 | public Object getValueAt(int row, int col) { | |
146 | try { | |
147 | 0 | return tableData.get(row)[col]; |
148 | 0 | } catch (Exception e) { |
149 | 0 | log.error("Error trying to get value at (" + row + "," + col + ")", e); |
150 | 0 | return null; |
151 | } | |
152 | } | |
153 | ||
154 | /** | |
155 | * Retorna o valor false. Recebe os valores numéricos da linha e coluna, | |
156 | * porém Não os utiliza. TODO: avaliar a funcionalidade desse método. | |
157 | * | |
158 | * @param l Número da linha. | |
159 | * @param c Número da coluna. | |
160 | * @return Retorna <I>false</I>. | |
161 | */ | |
162 | @Override | |
163 | public boolean isCellEditable(int l, int c) { | |
164 | 0 | log.debug("Coordinates(" + l + "," + c + ")"); |
165 | 0 | return false; |
166 | } | |
167 | ||
168 | /** | |
169 | * Busca qual o tipo de uma coluna especifica e retorna sua classe. Recebe | |
170 | * um valor numerico para indicar a coluna e busca os dados atraves do | |
171 | * método {@link java.sql.ResultSet#getMetaData() getMetaData()}. | |
172 | * | |
173 | * @param column Numero da coluna. | |
174 | * @return Retorna uma classe. | |
175 | */ | |
176 | @Override | |
177 | public Class<?> getColumnClass(int column) { | |
178 | try { | |
179 | 0 | return albunsDAO.createNativeQuery(ultimoSQL).getParameter(column).getParameterType(); |
180 | 0 | } catch (Exception e) { |
181 | 0 | log.warn("Error getting column class, returning SuperType information", e); |
182 | 0 | return super.getColumnClass(column); |
183 | } | |
184 | } | |
185 | ||
186 | /** | |
187 | * Retorna o valor de ultimoSQL. | |
188 | * | |
189 | * @return Retorna um comando SQL. | |
190 | */ | |
191 | public String getUltimoSQL() { | |
192 | 0 | return ultimoSQL; |
193 | } | |
194 | ||
195 | /** | |
196 | * Seta o valor de ultimoSQL. | |
197 | * | |
198 | * @param ultimoSQL Comando de SQL. | |
199 | */ | |
200 | public void setUltimoSQL(String ultimoSQL) { | |
201 | 0 | this.ultimoSQL = ultimoSQL; |
202 | 0 | } |
203 | ||
204 | /** | |
205 | * Notifica aos listenners que a estrutura da tabela foi modificada. Apenas | |
206 | * chama o método {@link javax.swing.table.AbstractTableModel#fireTableStructureChanged() fireTableStructureChanged()}. | |
207 | * | |
208 | * @param event Evento de ação na tabela. | |
209 | */ | |
210 | @Override | |
211 | public void rowSetChanged(RowSetEvent event) { | |
212 | 0 | fireTableStructureChanged(); |
213 | 0 | } |
214 | ||
215 | /** | |
216 | * Notifica que a estrutura da tabela foi modificada, porém informa qual a | |
217 | * função foi feita (insert, delete ou update). | |
218 | * | |
219 | * @param event Evento de ação na tabela. | |
220 | */ | |
221 | @Override | |
222 | public void rowChanged(RowSetEvent event) { | |
223 | 0 | fireTableDataChanged(); |
224 | 0 | } |
225 | ||
226 | /** | |
227 | * Não possui corpo. TODO: avaliar a exclusão dessa função. | |
228 | * | |
229 | * @param event Evento. | |
230 | */ | |
231 | @Override | |
232 | public void cursorMoved(RowSetEvent event) { | |
233 | 0 | } |
234 | } |