Coverage Report - net.sf.webphotos.BancoImagem
 
Classes in this File Line Coverage Branch Coverage Complexity
BancoImagem
0%
0/87
0%
0/20
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  
 }