Coverage Report - net.sf.webphotos.gui.util.TableModelAlbum
 
Classes in this File Line Coverage Branch Coverage Complexity
TableModelAlbum
0%
0/52
0%
0/2
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  
 }