Hola como estan? bueno aqui ando de nuevo trancado con un algoritmo! estoy haciendo una proyecto en el cual necesito configurar tareas programadas (sin usar el Quartz) donde tengo tareas Diarias, Semanales, Mensuales y Anuales para ello me cree un metodo en cada clase q me devuelve la proxima instancia de la tarea pero en el de la semanal me tranque jejeje (tambien me falta la mensual)
La idea es que una tarea semanal se ejecuta cierta cantidad de dias (Lunes,Martes,Miercoles,etc) y cada tantas semanas (todas las semanas, cada dos semanas, cada tres semanas,etc).
Bueno aca dejo lo q voy de la clase a ver si me pueden guiar un poco
Código:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
@Table(name = "periodicidad_semanal")
@DiscriminatorValue("2")
@PrimaryKeyJoinColumn(name="id_periodicidad")
public class PeriodicidadSemanal extends PeriodicidadTarea implements Serializable{
private int cadaSemana;
private boolean lunes;
private boolean martes;
private boolean miercoles;
private boolean jueves;
private boolean viernes;
private boolean sabado;
private boolean domingo;
private ArrayList<Boolean> dias = new ArrayList<Boolean>();
@Column(name="cada_semana")
public int getCadaSemana() {
return cadaSemana;
}
public void setCadaSemana(int cadaSemana) {
this.cadaSemana = cadaSemana;
}
@Column(name="lunes")
public boolean isLunes() {
return lunes;
}
public void setLunes(boolean lunes) {
this.lunes = lunes;
}
@Column(name="martes")
public boolean isMartes() {
return martes;
}
public void setMartes(boolean martes) {
this.martes = martes;
}
@Column(name="miercoles")
public boolean isMiercoles() {
return miercoles;
}
public void setMiercoles(boolean miercoles) {
this.miercoles = miercoles;
}
@Column(name="jueves")
public boolean isJueves() {
return jueves;
}
public void setJueves(boolean jueves) {
this.jueves = jueves;
}
@Column(name="viernes")
public boolean isViernes() {
return viernes;
}
public void setViernes(boolean viernes) {
this.viernes = viernes;
}
@Column(name="sabado")
public boolean isSabado() {
return sabado;
}
public void setSabado(boolean sabado) {
this.sabado = sabado;
}
@Column(name="domingo")
public boolean isDomingo() {
return domingo;
}
public void setDomingo(boolean domingo) {
this.domingo = domingo;
}
@Transient
public Date getProximaEjecucion(Date ultimaEjecucion) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(ultimaEjecucion);
calendar.setTime(proximoDia(calendar));
if(getConfiguracionTarea().getFechaFin() == null){
return calendar.getTime();
}else{
if(getConfiguracionTarea().getFechaFin().equals(calendar.getTime()) ||
getConfiguracionTarea().getFechaFin().after(calendar.getTime())){
return calendar.getTime();
}else{
return null;
}
}
}
@Transient
public ArrayList<Boolean> getDias(){
dias = new ArrayList<Boolean>();
dias.add(domingo);
dias.add(lunes);
dias.add(martes);
dias.add(miercoles);
dias.add(jueves);
dias.add(viernes);
dias.add(sabado);
return dias;
}
@Transient
public Date proximoDia(Calendar calAux){
int diaSemana = calAux.get(Calendar.DAY_OF_WEEK);
//En este for estoy trancado
for(int i = diaSemana;i < getDias().size(); i++){
boolean valor = getDias().get(i);
if(valor){
break;
}
}
calAux.add(Calendar.DATE, cadaSemana * 7);
return calAux.getTime();
}
}
saludos y gracias