Coverage Report - net.sf.webphotos.gui.Calendario
 
Classes in this File Line Coverage Branch Coverage Complexity
Calendario
0%
0/46
0%
0/14
3,667
 
 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;
 17  
 
 18  
 import java.awt.GridLayout;
 19  
 import java.text.SimpleDateFormat;
 20  
 import java.util.Calendar;
 21  
 import java.util.Date;
 22  
 import java.util.GregorianCalendar;
 23  
 import javax.swing.JLabel;
 24  
 import javax.swing.JPanel;
 25  
 import javax.swing.JToggleButton;
 26  
 import org.apache.log4j.Logger;
 27  
 
 28  
 /**
 29  
  * Gera um calendário.
 30  
  * Usa um GridLayout para fazer o formato.
 31  
  * Pode formatar a data em dois tipos diferentes.
 32  
  */
 33  
 public class Calendario extends JPanel {
 34  
 
 35  0
     private String[] dias = {"dom", "seg", "ter", "qua", "qui", "sex", "sab"};
 36  0
     private String[] meses = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
 37  0
     private int[] diasNoMes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 38  0
     private GregorianCalendar calendario = new GregorianCalendar();
 39  
     
 40  0
     private Logger log = Logger.getLogger(Calendario.class);
 41  
 
 42  
     /**
 43  
      * Construtor da classe.
 44  
      * Não recebe parâmetros.
 45  
      * Simplesmente seta a data atual.
 46  
      */
 47  0
     public Calendario() {
 48  0
         calendario.setTime(new Date());
 49  0
     }
 50  
 
 51  
     /**
 52  
      * Construtor da classe.
 53  
      * Recebe o formato da data como parâmetro. Formato dd/mm/aa ou dd/mm/aaaa.
 54  
      * Inicia um objeto Date e checa o tamanho da String recebida, para armazenar a data no formato pedido.
 55  
      * Após descobrir o tipo selecionado, seta o valor do calendario.
 56  
      * @param formato_ddmmaa Formato da data.
 57  
      */
 58  0
     public Calendario(String formato_ddmmaa) {
 59  0
         Date data = null;
 60  0
         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
 61  0
         if (formato_ddmmaa.length() == 10) {
 62  0
             sdf.applyPattern("dd/MM/yyyy");
 63  
         }
 64  
 
 65  
         try {
 66  0
             data = sdf.parse(formato_ddmmaa);
 67  0
         } catch (Exception e) {
 68  0
             log.warn("Erro na conversão de data: " + formato_ddmmaa, e);
 69  0
             data = new Date();
 70  0
         }
 71  0
         calendario.setTime(data);
 72  0
     }
 73  
 
 74  
     /**
 75  
      * Imprime a saída com os dados da data, montando um calendário em um {@link java.awt.GridLayout GridLayout}.
 76  
      * Apresentando dados como ano, mês, dia, número de dias no mês e primeiro dia da semana.
 77  
      */
 78  
     public void mostrar() {
 79  0
         int indiceMes = calendario.get(Calendar.MONTH); // começa 0-Janeiro, 1-Fevereiro...
 80  0
         int ano = calendario.get(Calendar.YEAR);
 81  
         // ano é bissexto ?
 82  0
         if (calendario.isLeapYear(ano)) {
 83  0
             diasNoMes[1] = 29;
 84  
         }
 85  
 
 86  0
         String nomeMes = meses[indiceMes];
 87  0
         int numDias = diasNoMes[indiceMes];
 88  
 
 89  0
         calendario.set(Calendar.DATE, 1);
 90  0
         int numPrimeiroDiaMes = calendario.get(Calendar.DAY_OF_WEEK);
 91  
 
 92  0
         int numLinhas = (numDias + numPrimeiroDiaMes - 1) / 7;
 93  0
         float resto = (numDias + numPrimeiroDiaMes - 1) % 7;
 94  0
         if (resto > 0) {
 95  0
             numLinhas++;
 96  
         }
 97  
 
 98  0
         log.debug(nomeMes + " " + ano);
 99  0
         log.debug("numero de dias do mês: " + numDias);
 100  0
         log.debug("primeiro dia da semana: " + numPrimeiroDiaMes);
 101  0
         log.debug("Linhas: " + numLinhas);
 102  
 
 103  0
         setLayout(new GridLayout(numLinhas + 1, 7, 1, 1));
 104  
         // adiciona ao grid o nome dos dias
 105  0
         for (int i = 0; i < 7; i++) {
 106  0
             add(new JLabel(dias[i]));
 107  
         }
 108  
 
 109  
         // adiciona os dias "vazios"
 110  0
         if (numPrimeiroDiaMes > 1) {
 111  0
             for (int i = 0; i < numPrimeiroDiaMes - 1; i++) {
 112  0
                 add(new JLabel(""));
 113  
             }
 114  
         }
 115  
         // adiciona os dias
 116  0
         for (int i = 0; i < numDias; i++) {
 117  0
             add(new JToggleButton(Integer.toString(i + 1)));
 118  
         }
 119  
 
 120  0
         setVisible(true);
 121  0
     }
 122  
 }