Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
BancoImagem |
|
| 1.7894736842105263;1,789 |
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; | |
17 | ||
18 | import com.sun.rowset.JdbcRowSetImpl; | |
19 | import java.io.File; | |
20 | import java.sql.Connection; | |
21 | import java.sql.DriverManager; | |
22 | import java.sql.ResultSet; | |
23 | import java.sql.SQLException; | |
24 | import javax.sql.RowSet; | |
25 | import javax.sql.rowset.JdbcRowSet; | |
26 | import javax.swing.JOptionPane; | |
27 | import javax.swing.UIManager; | |
28 | import net.sf.webphotos.gui.util.Login; | |
29 | import net.sf.webphotos.util.Util; | |
30 | import org.apache.commons.configuration.Configuration; | |
31 | import org.apache.log4j.Logger; | |
32 | ||
33 | /** | |
34 | * A classe BancoImagem manipula dados das imagens através da conexão com banco | |
35 | * de dados. Classe do tipo Singleton, é permitido apenas uma instância da | |
36 | * classe. O objeto é acessível unicamente através da classe. Mantém uma conexao | |
37 | * permanente com banco de dados. | |
38 | */ | |
39 | public class BancoImagem { | |
40 | ||
41 | 0 | private static Logger log = Logger.getLogger(BancoImagem.class); |
42 | 0 | private static final BancoImagem instancia = new BancoImagem(); |
43 | private static String titulo; | |
44 | private static String descricao; | |
45 | private static int categoriaID; | |
46 | private static String url; | |
47 | private static String driver; | |
48 | private static Connection conn; | |
49 | private static File albunsRoot; | |
50 | // informações sobre uso da ponte www | |
51 | private static boolean utilizarPonteWWW; | |
52 | private static String webServer; | |
53 | private static String chaveCripto; | |
54 | // usuário principal do sistema | |
55 | 0 | private static String usuario = null; |
56 | 0 | private static char[] senha = null; |
57 | // caso o usuário ftp seja diferente... | |
58 | 0 | private static String usuarioFTP = null; |
59 | 0 | private static char[] senhaFTP = null; |
60 | private static Login login; | |
61 | @Deprecated | |
62 | private static RowSet rSet; | |
63 | ||
64 | // inicializa o banco de dados | |
65 | 0 | private BancoImagem() { |
66 | 0 | Configuration c = Util.getConfig(); |
67 | 0 | log.info("inicializando banco de imagem..."); |
68 | 0 | webServer = c.getString("enderecoWWW"); |
69 | 0 | chaveCripto = c.getString("chaveCripto"); |
70 | ||
71 | 0 | if (webServer != null && chaveCripto != null) { |
72 | 0 | log.info("utilizando ponte http"); |
73 | 0 | utilizarPonteWWW = true; |
74 | } | |
75 | 0 | } |
76 | ||
77 | /** | |
78 | * Retorna o objeto BancoImagem instanciado na própria classe. | |
79 | * | |
80 | * @return Retorna o objeto BancoImagem. | |
81 | */ | |
82 | public static BancoImagem getBancoImagem() { | |
83 | 0 | return instancia; |
84 | } | |
85 | ||
86 | /** | |
87 | * Recebe o ID de um albúm e retorna o caminho do path local | |
88 | * | |
89 | * @param albumID ID do albúm. | |
90 | * @return Retorna o caminho do path local. | |
91 | */ | |
92 | public static String getLocalPath(int albumID) { | |
93 | 0 | if (albunsRoot == null) { |
94 | 0 | albunsRoot = new File(Util.getConfig().getString("albunsRoot")); |
95 | } | |
96 | ||
97 | 0 | File localFile = new File(albunsRoot, Integer.toString(albumID)); |
98 | 0 | if (!localFile.isDirectory()) { |
99 | 0 | localFile.mkdirs(); |
100 | } | |
101 | 0 | return localFile.getAbsolutePath(); |
102 | } | |
103 | ||
104 | /** | |
105 | * Configura a URL e o driver do DB. | |
106 | * | |
107 | * @param dbUrl URL do DB. | |
108 | * @param dbDriver Driver do DB. | |
109 | * @throws java.lang.ClassNotFoundException Lança exceção caso a classe | |
110 | * específica não seja encontrada. | |
111 | * @throws java.lang.InstantiationException Lança exceção caso não permita a | |
112 | * instância de um objeto da classe. | |
113 | * @throws java.lang.IllegalAccessException Lança exceção se ocorrer um | |
114 | * acesso qualquer e o nível de segurança não permitir. | |
115 | * @throws java.sql.SQLException Lança exceção caso ocorra algum erro ao | |
116 | * acessar o banco de dados. | |
117 | */ | |
118 | public void configure(String dbUrl, String dbDriver) | |
119 | throws ClassNotFoundException, | |
120 | InstantiationException, | |
121 | IllegalAccessException, | |
122 | SQLException { | |
123 | 0 | url = dbUrl; |
124 | 0 | driver = dbDriver; |
125 | 0 | Class.forName(dbDriver).newInstance(); |
126 | 0 | log.info("Driver " + dbDriver + " carregado"); |
127 | 0 | } |
128 | ||
129 | /** | |
130 | * Retorna uma conexão ao banco de dados. Testa se a conexão já esta aberta, | |
131 | * caso positivo retorna a conexão, caso contrário pede o login e faz a | |
132 | * conexão. | |
133 | * | |
134 | * @return Retorna a conexão com o banco de dados. | |
135 | * @throws java.sql.SQLException Lança exceção caso ocorra algum erro ao | |
136 | * acessar o banco de dados. Mais detalhes, veja em | |
137 | * {@link java.sql.DriverManager#getConnection(String, String, String) getConnection()} | |
138 | */ | |
139 | public static Connection getConnection() throws SQLException { | |
140 | try { | |
141 | 0 | if (conn != null |
142 | && conn.isClosed() == false) { | |
143 | ||
144 | 0 | log.debug("Usando a conexão existente"); |
145 | 0 | return conn; |
146 | } | |
147 | 0 | } catch (AbstractMethodError amE) { |
148 | 0 | log.warn("Error getting conection", amE); |
149 | 0 | } |
150 | // conexão fechada... | |
151 | 0 | if (usuario == null) { |
152 | 0 | login(); |
153 | } | |
154 | 0 | conn = DriverManager.getConnection(url, usuario, (new String(senha))); |
155 | 0 | log.debug("Usando uma nova conexão"); |
156 | 0 | return conn; |
157 | } | |
158 | ||
159 | /** | |
160 | * Fecha uma conexão com o banco de dados. Testa se a conexão esta aberta e | |
161 | * encerra a mesma. | |
162 | * | |
163 | * @throws java.sql.SQLException Lança exceção caso ocorra algum erro ao | |
164 | * acessar o banco de dados. | |
165 | */ | |
166 | public static void closeConnection() throws SQLException { | |
167 | 0 | if (conn.isClosed() == false) { |
168 | 0 | conn.close(); |
169 | } | |
170 | 0 | log.debug("Conexao ao banco de dados fechada"); |
171 | 0 | } |
172 | ||
173 | /** | |
174 | * Retorna <I>true</I> caso o login seja efetuado ou <I>false</I> caso não. | |
175 | * Faz uso da função | |
176 | * {@link net.sf.webphotos.BancoImagem#login(String) login(String title)} | |
177 | * para obter o resultado. | |
178 | * | |
179 | * @return Retorno lógico para a operação de login. | |
180 | */ | |
181 | public static boolean login() { | |
182 | 0 | return login("WebPhotos - Login BD"); |
183 | } | |
184 | ||
185 | /** | |
186 | * Inicia o login partir de um nome passado como parâmetro. Esse nome | |
187 | * realizará alteração na instancia da classe | |
188 | * {@link net.sf.webphotos.gui.util.Login Login}. Faz a comparação com o | |
189 | * banco de dados através do {@link javax.sql.RowSet RowSet} e retorna uma | |
190 | * variável lógica para informar se o login ocorreu com sucesso. | |
191 | * | |
192 | * @param title Título do login. | |
193 | * @return Retorno lógico para a operação de login. | |
194 | */ | |
195 | public static boolean login(String title) { | |
196 | 0 | Login l = Login.getLogin(title); |
197 | 0 | boolean conectado = false; |
198 | ||
199 | do { | |
200 | 0 | l.show(); |
201 | 0 | if (l.getUser() == null) { |
202 | 0 | System.exit(0); |
203 | } | |
204 | ||
205 | 0 | usuario = l.getUser(); |
206 | 0 | senha = l.getPassword(); |
207 | try { | |
208 | 0 | conn = DriverManager.getConnection(url, usuario, (new String(senha))); |
209 | ||
210 | 0 | rSet = new JdbcRowSetImpl(conn); |
211 | 0 | rSet.setReadOnly(false); |
212 | 0 | rSet.setType(ResultSet.TYPE_SCROLL_INSENSITIVE); |
213 | 0 | rSet.setConcurrency(ResultSet.CONCUR_UPDATABLE); |
214 | 0 | ((JdbcRowSet) rSet).setAutoCommit(false); |
215 | ||
216 | 0 | conectado = true; |
217 | 0 | } catch (Exception e) { |
218 | 0 | String msg = "Erro na conexão ao banco de dados"; |
219 | 0 | log.error(msg, e); |
220 | 0 | JOptionPane.showMessageDialog(null, e.getMessage(), msg, JOptionPane.ERROR_MESSAGE); |
221 | 0 | } |
222 | 0 | } while (!conectado); |
223 | ||
224 | 0 | Login.getTelaLogin().dispose(); |
225 | 0 | return true; |
226 | } | |
227 | ||
228 | /** | |
229 | * Retorna o usuário. | |
230 | * | |
231 | * @return Retorna um usuário. | |
232 | */ | |
233 | public String getUser() { | |
234 | 0 | return usuario; |
235 | } | |
236 | ||
237 | /** | |
238 | * Retorna a senha do usuário. | |
239 | * | |
240 | * @return Retorna uma senha. | |
241 | */ | |
242 | public char[] getPassword() { | |
243 | 0 | return senha; |
244 | } | |
245 | ||
246 | /** | |
247 | * Retorna o usuário de FTP. | |
248 | * | |
249 | * @return Retorna um usuário. | |
250 | */ | |
251 | public String getUserFTP() { | |
252 | 0 | return usuarioFTP; |
253 | } | |
254 | ||
255 | /** | |
256 | * Retorna a senha do usuário de FTP. | |
257 | * | |
258 | * @return Retorna uma senha. | |
259 | */ | |
260 | public char[] getPasswordFTP() { | |
261 | 0 | return senhaFTP; |
262 | } | |
263 | ||
264 | /** | |
265 | * Seta o usuário de FTP. | |
266 | * | |
267 | * @param u Usuário. | |
268 | */ | |
269 | public void setUserFTP(String u) { | |
270 | 0 | usuarioFTP = u; |
271 | 0 | } |
272 | ||
273 | /** | |
274 | * Seta a senha do usuário de FTP. | |
275 | * | |
276 | * @param p Senha. | |
277 | */ | |
278 | public void setPasswordFTP(char[] p) { | |
279 | 0 | senhaFTP = p; |
280 | 0 | } |
281 | ||
282 | /** | |
283 | * Retorna o {@link javax.sql.RowSet RowSet} rSet da instancia de | |
284 | * BancoImagem. | |
285 | * | |
286 | * @return Retorna o {@link javax.sql.RowSet RowSet} da instância. | |
287 | */ | |
288 | @Deprecated | |
289 | public static RowSet getRSet() { | |
290 | 0 | return rSet; |
291 | } | |
292 | ||
293 | /** | |
294 | * Altera o {@link javax.sql.RowSet RowSet} rSet da instancia de | |
295 | * BancoImagem. | |
296 | * | |
297 | * @param aRSet o novo {@link javax.sql.RowSet RowSet} da instância. | |
298 | */ | |
299 | @Deprecated | |
300 | public static void setRSet(RowSet aRSet) { | |
301 | 0 | rSet = aRSet; |
302 | 0 | } |
303 | ||
304 | @Override | |
305 | public Object clone() throws CloneNotSupportedException { | |
306 | 0 | throw new CloneNotSupportedException("Singleton Object"); |
307 | } | |
308 | ||
309 | public static void loadUIManager() { | |
310 | 0 | String lookAndFeel = Util.getConfig().getString("UIManager.lookAndFeel"); |
311 | try { | |
312 | 0 | UIManager.setLookAndFeel(lookAndFeel); |
313 | 0 | } catch (Exception e) { |
314 | 0 | log.warn("Caution: Theme not correctly configured"); |
315 | //UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); | |
316 | 0 | } |
317 | 0 | } |
318 | ||
319 | public static void loadDBDriver() throws IllegalAccessException, SQLException, ClassNotFoundException, InstantiationException { | |
320 | // obtém driver do db | |
321 | 0 | url = Util.getConfig().getString("jdbc.url"); |
322 | 0 | driver = Util.getConfig().getString("jdbc.driver"); |
323 | 0 | getBancoImagem().configure(url, driver); |
324 | 0 | } |
325 | } |