Eu tenho uma classe que faz a lógica do calendário. Se quiser posso postar aqui… ou melhor, já postei …
[
]
/**
* Project : sgi
* File : CalendarioUtil.java
* Author : Márcio Alves Barroso
* Phone : +55 [telefone removido]
* E-mail : [email removido]
* Version : 1.0
* Created : 15/02/2006
*/
package sgi.util;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.List;
import sgi.entities.Agenda;
import sgi.facade.SgiAgendaFacade;
import sgi.vo.DiaVO;
/**
* @author Márcio Alves Barroso
*/
public class CalendarioUtil {
private SgiAgendaFacade agendaFacade;
public GregorianCalendar calendario;
public int inicioMes;
public int diaMes;
public int semanas;
public CalendarioUtil() {
this.calendario = new GregorianCalendar();
construir();
}
private void construir() {
int mesN, anoN;
mesN = calendario.get(Calendar.MONTH);
anoN = calendario.get(Calendar.YEAR);
this.inicioMes = calendario.get(Calendar.DAY_OF_WEEK);
this.diaMes = ultimoDiaMes(calendario);
this.calendario.set(Calendar.DAY_OF_MONTH, diaMes );
this.semanas = this.calendario.get(Calendar.WEEK_OF_MONTH);
this.calendario = iniciarCalendario(mesN, anoN);
}
public void paginar(int num) {
this.calendario.add(Calendar.MONTH, num);
construir();
}
private GregorianCalendar iniciarCalendario(int mes, int ano) {
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MONTH, mes);
cal.set(Calendar.YEAR, ano);
return cal;
}
public static int ultimoDiaMes(GregorianCalendar cal) {
GregorianCalendar c = new GregorianCalendar();
c.set(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.MONTH, cal.get(Calendar.MONTH)+1);
c.set(Calendar.YEAR, cal.get(Calendar.YEAR));
c.add(Calendar.DAY_OF_MONTH, -1);
return c.get(Calendar.DAY_OF_MONTH);
}
public DiaVO iniciarDia() {
DiaVO d = new DiaVO();
d.setMes(calendario.get(Calendar.MONTH));
d.setAno(calendario.get(Calendar.YEAR));
return d;
}
public List gerarCalendario(SgiAgendaFacade agendaFacade) throws Exception{
this.agendaFacade = agendaFacade;
List<DiaVO> lista = new ArrayList<DiaVO>();
int dia = 1;
boolean test = true;
DiaVO d;
loop: for ( int i=0; test; i++ ) {
for ( int j=1; j < 8; j++ ) {
d = iniciarDia();
if( i == 0 ) {
if ( j >= inicioMes ) {
if ( dia <= diaMes ) {
d.setDia(dia);
dia++;
}
}
}
else {
if ( dia <= diaMes ) {
d.setDia(dia);
dia++;
}
}
lista.add(d);
if( dia > diaMes ) {
break loop;
}
}
}
return verificaAgenda(lista);
}
public List<DiaVO> verificaAgenda(List<DiaVO> lista) throws Exception {
Collection<Agenda> colecao = agendaFacade.verificarAgendas(this.calendario.getTime());
DiaVO dia;
for( int i=0; i < lista.size(); i++ ) {
dia = (DiaVO)lista.get(i);
dia = comparaDia(colecao, dia);
lista.set(i, dia);
}
return lista;
}
public DiaVO comparaDia(Collection<Agenda> colecao, DiaVO dia ){
GregorianCalendar cal;
GregorianCalendar diaC = new GregorianCalendar();
diaC.set(Calendar.DAY_OF_MONTH, dia.getDia());
diaC.set(Calendar.MONTH, dia.getMes());
diaC.set(Calendar.YEAR, dia.getAno());
for ( Agenda agenda : colecao ) {
cal = new GregorianCalendar();
cal.setTime(agenda.getDataEvento());
if( cal.get(Calendar.YEAR) == diaC.get(Calendar.YEAR) &&
cal.get(Calendar.MONTH) == diaC.get(Calendar.MONTH) &&
cal.get(Calendar.DAY_OF_MONTH) == diaC.get(Calendar.DAY_OF_MONTH) ) {
dia.setEvento(true);
}
}
return dia;
}
public DiaVO verificaMesAno() {
int mesN, anoN;
mesN = calendario.get(Calendar.MONTH);
anoN = calendario.get(Calendar.YEAR);
String [] meses = {"Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"};
DiaVO d = new DiaVO();
d.setMesS(meses[mesN]);
d.setMes(mesN);
d.setAno(anoN);
return d;
}
}
/**
* Project : sgi
* File : DiaVO.java
* Author : Márcio Alves Barroso
* Phone : +55 [telefone removido]
* E-mail : [email removido]
* Version : 1.0
* Created : 15/02/2006
*/
package sgi.vo;
/**
* @author Márcio Alves Barroso
*/
public class DiaVO {
private int dia;
private int mes;
private int ano;
private int num;
private String mesS;
private boolean evento = false;
public String getMesS() {
return mesS;
}
public void setMesS(String mesS) {
this.mesS = mesS;
}
public int getAno() {
return ano;
}
public void setAno(int ano) {
this.ano = ano;
}
public int getMes() {
return mes;
}
public void setMes(int mes) {
this.mes = mes;
}
public int getDia() {
return dia;
}
public void setDia(int dia) {
this.dia = dia;
}
public boolean isEvento() {
return evento;
}
public void setEvento(boolean evento) {
this.evento = evento;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
Desculpe por não estar documentado.
Qualquer dúvida, dá um toque