Coverage Report - net.sf.webphotos.PhotoDTO
 
Classes in this File Line Coverage Branch Coverage Complexity
PhotoDTO
0%
0/128
0%
0/24
1,7
PhotoDTO$1
0%
0/2
N/A
1,7
 
 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.google.common.base.Function;
 19  
 import java.awt.Dimension;
 20  
 import java.awt.MediaTracker;
 21  
 import java.io.File;
 22  
 import java.sql.SQLException;
 23  
 import java.sql.Statement;
 24  
 import java.util.List;
 25  
 import javax.swing.ImageIcon;
 26  
 import net.sf.webphotos.dao.jpa.PhotoDAO;
 27  
 import net.sf.webphotos.entity.IsCredits;
 28  
 import net.sf.webphotos.entity.PhotoEntity;
 29  
 import net.sf.webphotos.model.CreditsVO;
 30  
 import net.sf.webphotos.model.PhotoVO;
 31  
 import net.sf.webphotos.util.ApplicationContextResource;
 32  
 import net.sf.webphotos.util.Util;
 33  
 
 34  
 /**
 35  
  * A classe PhotoDTO armazena dados específicos de uma foto. Dentre os dados estão
 36  
  * ID da foto,ID do album e ID do crédito, legenda, crédito e resolução de tela.
 37  
  */
 38  0
 public class PhotoDTO extends PhotoEntity {
 39  
     
 40  
     /**
 41  
      *
 42  
      */
 43  0
     public static final Function<PhotoDTO, PhotoVO> FROM_PHOTODTO_PHOTOVO = new Function<PhotoDTO, PhotoVO>() {
 44  
         @Override
 45  
         public PhotoVO apply(PhotoDTO input) {
 46  0
             return new PhotoVO(input.getLegenda(), input.getLegenda(), new CreditsVO(input.creditoID, input.creditoNome), input.caminhoArquivo);
 47  
         }
 48  
     };
 49  
 
 50  0
     private int fotoID = 0;
 51  0
     private int albumID = -1;
 52  0
     private int creditoID = 0;
 53  0
     private String legenda = null;
 54  0
     private int largura = 0;
 55  0
     private int altura = 0;
 56  0
     @Deprecated
 57  
     private long tamanhoBytes = 0;
 58  0
     private String creditoNome = "";
 59  0
     private String caminhoArquivo = "";
 60  0
     private static PhotoDAO photosDAO = (PhotoDAO) ApplicationContextResource.getBean("photosDAO");
 61  0
     private static String[][] creditos = null;
 62  
 
 63  
     public PhotoDTO(PhotoVO photoVO) {
 64  0
         this(photoVO.getFotoid(), photoVO.getAlbum().getAlbumid(), photoVO.getLegenda(), photoVO.getCreditos().getCreditoid(), photoVO.getCreditos().getNome(), 0, 0, 0);
 65  0
     }
 66  
 
 67  
     /**
 68  
      * Construtor da classe PhotoDTO. Recebe e seta todos os dados da foto.
 69  
      *
 70  
      * @param ID ID da foto.
 71  
      * @param albumID ID do album.
 72  
      * @param fotoLegenda Legenda da foto.
 73  
      * @param fotoCreditoID ID do créito.
 74  
      * @param fotoCreditoNome Crédito.
 75  
      * @param fotoLargura Largura da foto.
 76  
      * @param fotoAltura Altura da foto.
 77  
      */
 78  0
     public PhotoDTO(int ID, int albumID, String fotoLegenda, int fotoCreditoID, String fotoCreditoNome, int fotoLargura, int fotoAltura, long tamanhoBytes) {
 79  0
         this.fotoID = ID;
 80  0
         this.albumID = albumID;
 81  0
         this.legenda = fotoLegenda;
 82  0
         this.creditoID = fotoCreditoID;
 83  0
         this.creditoNome = fotoCreditoNome;
 84  0
         this.largura = fotoLargura;
 85  0
         this.altura = fotoAltura;
 86  0
         this.tamanhoBytes = tamanhoBytes;
 87  0
     }
 88  
 
 89  
     /**
 90  
      * Contrutor da classe PhotoDTO. Recebe apenas nome do arquivo como
 91  
      * parametro. Seta a legenda com o valor vazio, e seta caminhoArquivo com
 92  
      * o nome recebido como parametro. Carrega a foto a partir do nome do
 93  
      * arquivo, obtem medidas da foto e seta as variaveis de largura e
 94  
      * altura.
 95  
      *
 96  
      * @param arquivo Nome ou caminho do arquivo.
 97  
      */
 98  0
     public PhotoDTO(String arquivo) {
 99  0
         legenda = "";
 100  0
         caminhoArquivo = arquivo;
 101  
         // obtem medidas da foto
 102  0
         ImageIcon a = new ImageIcon(arquivo);
 103  
 
 104  0
         if (a.getImageLoadStatus() == MediaTracker.COMPLETE) {
 105  0
             largura = a.getIconWidth();
 106  0
             altura = a.getIconHeight();
 107  0
             tamanhoBytes = new File(arquivo).length();
 108  
         } else {
 109  0
             Util.log("[Foto.Foto]/ERRO: " + arquivo + " Não pode ser lido");
 110  
         }
 111  0
     }
 112  
 
 113  
     /**
 114  
      * Retorna o ID da foto.
 115  
      *
 116  
      * @return Retorna um ID.
 117  
      */
 118  
     public int getFotoID() {
 119  0
         return fotoID;
 120  
     }
 121  
 
 122  
     /**
 123  
      * Retorna o ID do crédito.
 124  
      *
 125  
      * @return Retorna um ID.
 126  
      */
 127  
     public int getCreditoID() {
 128  0
         return creditoID;
 129  
     }
 130  
 
 131  
     /**
 132  
      * Retorna o crédito da foto.
 133  
      *
 134  
      * @return Retorna o crédito.
 135  
      */
 136  
     public String getCreditoNome() {
 137  0
         return creditoNome;
 138  
     }
 139  
 
 140  
     /**
 141  
      * Retorna a legenda da foto.
 142  
      *
 143  
      * @return Retorna a legenda.
 144  
      */
 145  
     @Override
 146  
     public String getLegenda() {
 147  0
         return legenda;
 148  
     }
 149  
 
 150  
     /**
 151  
      * Retorna o tamanho da largura da foto.
 152  
      *
 153  
      * @return Retorna o valor da largura.
 154  
      */
 155  
     public int getLargura() {
 156  0
         return largura;
 157  
     }
 158  
 
 159  
     /**
 160  
      * Retorna o tamanho da altura da foto.
 161  
      *
 162  
      * @return Retorna o valor da altura.
 163  
      */
 164  
     public int getAltura() {
 165  0
         return altura;
 166  
     }
 167  
 
 168  
     /**
 169  
      * Retorna uma resolução especifica com os valores de altura e largura.
 170  
      * Para entender melhor os conceitos de dimensão veja {@link java.awt.Dimension Dimension}
 171  
      *
 172  
      * @return Retorna uma resolução.
 173  
      */
 174  
     public Dimension getResolucao() {
 175  0
         return new Dimension(largura, altura);
 176  
     }
 177  
 
 178  
     /**
 179  
      * Retorna o nome ou o caminho do arquivo.
 180  
      *
 181  
      * @return Retorna o caminho de um arquivo
 182  
      */
 183  
     public String getCaminhoArquivo() {
 184  0
         return caminhoArquivo;
 185  
     }
 186  
 
 187  
     /**
 188  
      * Seta o ID da foto.
 189  
      *
 190  
      * @param f ID da foto.
 191  
      */
 192  
     public void setFotoID(int f) {
 193  0
         fotoID = f;
 194  0
     }
 195  
 
 196  
     /**
 197  
      * Seta o ID do credito.
 198  
      *
 199  
      * @param c ID do credito.
 200  
      */
 201  
     public void setCreditoID(int c) {
 202  0
         creditoID = c;
 203  0
     }
 204  
 
 205  
     /**
 206  
      * Seta a legenda da foto.
 207  
      *
 208  
      * @param l Legenda.
 209  
      */
 210  
     public void setLegenda(String l) {
 211  0
         legenda = l;
 212  0
     }
 213  
 
 214  
     /**
 215  
      * Seta o valor da largura da foto.
 216  
      *
 217  
      * @param l Largura da foto.
 218  
      */
 219  
     public void setLargura(int l) {
 220  0
         largura = l;
 221  0
     }
 222  
 
 223  
     /**
 224  
      * Seta o valor da altura da foto.
 225  
      *
 226  
      * @param a Altura da foto.
 227  
      */
 228  
     public void setAltura(int a) {
 229  0
         altura = a;
 230  0
     }
 231  
 
 232  
     /**
 233  
      * Seta o valor da resolução da foto.
 234  
      *
 235  
      * @param r Dimensão da foto. Para entender melhor os conceitos de dimensão
 236  
      * veja {@link java.awt.Dimension Dimension}
 237  
      */
 238  
     public void setResolucao(Dimension r) {
 239  0
         largura = r.width;
 240  0
         altura = r.height;
 241  0
     }
 242  
 
 243  
     /**
 244  
      * Seta o credito da foto e completa o creditoID.
 245  
      *
 246  
      * @param nome Credito.
 247  
      */
 248  
     public void setCreditoNome(String nome) {
 249  0
         creditoNome = nome;
 250  
         // pesquisa no array creditos e completa creditoID
 251  0
         if (creditos != null) {
 252  0
             for (int i = 0; i < creditos.length; i++) {
 253  0
                 if (creditoNome.equals(creditos[i][1])) {
 254  0
                     creditoID = Integer.parseInt(creditos[i][0]);
 255  0
                     break;
 256  
                 }
 257  
             }
 258  
         }
 259  0
     }
 260  
 
 261  
     /**
 262  
      * Retorna um vetor com os valores de credito. Checa se o vetor ja
 263  
      * possui valores, caso contrario utiliza a função {@link net.sf.webphotos.PhotoDTO#populaCreditos() populaCreditos()}
 264  
      * completar os valores.
 265  
      *
 266  
      * @return Retorna uma lista com os creditos.
 267  
      */
 268  
     public static String[] getCreditosArray() {
 269  
         int tamanho;
 270  
         // executa a instrucao sql somente na primeira vez
 271  0
         if (creditos == null) {
 272  
             try {
 273  0
                 Util.log("[Foto.getCreditosArray]/AVISO: Populando Créditos");
 274  0
                 populaCreditos();
 275  0
                 tamanho = creditos.length;
 276  0
             } catch (SQLException ex) {
 277  0
                 Util.log("[Foto.getCreditosArray]/ERRO: Impossível popular Créditos - " + ex);
 278  0
                 tamanho = 0;
 279  0
             }
 280  
         } else {
 281  0
             tamanho = creditos.length;
 282  
         }
 283  
 
 284  0
         String[] nomesCreditos = new String[tamanho];
 285  0
         for (int i = 0; i < tamanho; i++) {
 286  0
             nomesCreditos[i] = creditos[i][1];
 287  
         }
 288  
 
 289  0
         return nomesCreditos;
 290  
     }
 291  
 
 292  
     /**
 293  
      * Retorna um índice da matriz créditos dado um nome de crédito.
 294  
      *
 295  
      * @param nomeCredito Crédito.
 296  
      * @return Retorna um índice numérico.
 297  
      */
 298  
     public static int getLstCreditosIndex(String nomeCredito) {
 299  0
         for (int i = 0; i < creditos.length; i++) {
 300  0
             if (nomeCredito.compareTo(creditos[i][1]) == 0) {
 301  0
                 return i;
 302  
             }
 303  
         }
 304  
 
 305  0
         return 0;
 306  
     }
 307  
 
 308  
     /**
 309  
      * Retorna o ID do crédito. Faz a busca do ID na matriz credito através do
 310  
      * nome especificado.
 311  
      *
 312  
      * @param nomeCredito Crédito.
 313  
      * @return Retorna um ID numérico.
 314  
      */
 315  
     public static int getLstCreditosID(String nomeCredito) {
 316  0
         for (int i = 0; i < creditos.length; i++) {
 317  0
             if (nomeCredito.equals(creditos[i][1])) {
 318  0
                 return Integer.parseInt(creditos[i][0]);
 319  
             }
 320  
         }
 321  0
         return 0;
 322  
     }
 323  
 
 324  
     /**
 325  
      * Busca no banco de dados, os valores para setar a matriz creditos
 326  
      *
 327  
      * @throws java.sql.SQLException Lança exceção caso ocorra algum erro no
 328  
      * acesso ao banco de dados.
 329  
      */
 330  
     public static void populaCreditos() throws SQLException {
 331  0
         String sql = Util.getConfig().getString("sql7");
 332  
 
 333  0
         List<Object[]> tableData = photosDAO.findByNativeQuery(sql);
 334  
 
 335  0
         creditos = new String[tableData.size()][2];
 336  
 
 337  0
         int ct = 0;
 338  0
         for (Object[] objects : tableData) {
 339  0
             creditos[ct][0] = objects[0].toString();
 340  0
             creditos[ct][1] = objects[1].toString();
 341  0
             ct++;
 342  
         }
 343  
 
 344  0
     }
 345  
 
 346  
     /**
 347  
      * Retorna todos os valores das variaveis de PhotoDTO em uma unica String.
 348  
      *
 349  
      * @return Retorna os valores da foto.
 350  
      */
 351  
     @Override
 352  
     public String toString() {
 353  0
         return "fotoID: " + fotoID + "\ncreditoID: " + creditoID + "\ncreditoNome: " + creditoNome + "\nlargura: " + largura + "\naltura: " + altura + "\narquivo: " + caminhoArquivo + "\nlegenda: " + legenda;
 354  
     }
 355  
 
 356  
     /**
 357  
      * Limpa o valor da variavel caminhoArquivo. Seta com o campo vazio.
 358  
      */
 359  
     public void resetCaminhoArquivo() {
 360  0
         caminhoArquivo = "";
 361  0
     }
 362  
 
 363  
     /**
 364  
      * Faz a atualização dos dados da foto. Checa se a foto já possui cadastro,
 365  
      * caso Não possui faz inclusão e faz a atualização. Caso ja possua
 366  
      * cadastro, so atualiza os dados.
 367  
      *
 368  
      * @throws java.lang.Exception Lança qualquer tipo de exceção que possa
 369  
      * interromper o fluxo da função.
 370  
      */
 371  
     public void atualizaFoto() throws Exception {
 372  0
         int ultimoFotoID = -1;
 373  
         String sql;
 374  0
         Statement st = null;
 375  
 
 376  
         // INSERT para fotos ainda Não cadastradas
 377  0
         if (caminhoArquivo.length() > 0) {
 378  
             try {
 379  0
                 sql = "select max(fotoID) from fotos";
 380  0
                 Integer tableData = (Integer) photosDAO.createNativeQuery(sql).getSingleResult();
 381  
 
 382  0
                 ultimoFotoID = tableData.intValue();
 383  0
             } catch (Exception ex) {
 384  0
                 Util.log("[Foto.atualizaFoto]/ERRO: " + ex);
 385  0
             }
 386  0
             setFotoID(ultimoFotoID);
 387  
 
 388  
 
 389  
             try {
 390  0
                 PhotoVO photoVO = new PhotoVO(fotoID, albumID, legenda, creditoID, largura, altura);
 391  0
                 photosDAO.save(photoVO);
 392  0
             } catch (Exception e) {
 393  0
                 Util.log("[Foto.atualizaFoto]/ERRO: " + e);
 394  0
                 throw e;
 395  0
             }
 396  
 
 397  
             // UPDATE para fotos já cadastradas
 398  
         } else {
 399  
             try {
 400  0
                 PhotoVO photoVO = photosDAO.findBy(fotoID);
 401  0
                 photoVO.setLegenda(legenda);
 402  0
                 photosDAO.save(photoVO);
 403  0
             } catch (Exception e) {
 404  0
                 Util.log("[Foto.atualizaFoto]/ERRO: " + e);
 405  0
                 throw e;
 406  0
             }
 407  
         }
 408  
 
 409  
         try {
 410  0
             st.close();
 411  0
         } catch (Exception e) {
 412  0
         }
 413  0
     }
 414  
 
 415  
     /**
 416  
      * Retorna o ID do album.
 417  
      *
 418  
      * @return Retorna um ID.
 419  
      */
 420  
     public int getAlbumID() {
 421  0
         return albumID;
 422  
     }
 423  
 
 424  
     /**
 425  
      * Seta o valor do ID do album
 426  
      *
 427  
      * @param albumID ID do album.
 428  
      */
 429  
     public void setAlbumID(int albumID) {
 430  0
         this.albumID = albumID;
 431  0
     }
 432  
 
 433  
     @Override
 434  
     public String getKey() {
 435  0
         return this.caminhoArquivo;
 436  
     }
 437  
 
 438  
     @Override
 439  
     public IsCredits getCreditos() {
 440  0
         return new CreditsVO(creditoID, creditoNome);
 441  
     }
 442  
 }