Boa noite eu estou com uma duvida que não conssigo ressolver desde ontem. estou fazendo uma aplicação que gerencia salas. e nessas salas podem ser cadrastados eventos com data de inicio e fim. ate aqui tudo bem sendo que para realizar o cadrasto do evento em uma sala os horarios dos eventos nao podem bater. por exemplo eu tenho um evento que vai do dia 7 ao dia 12 do mes. entao nao posso ter outro evento cadrastado nessa mesma data nesta sala. posso ter os dias13 e 14 vagos e a partir do 16 ja ter outro evento previsto.minha duvida é na hora de cadrastar um novo evento como saber quais datas com relaçao aquela sala estariam vagas para que pudesse cadrastar novo evento sem da choque.pode ser cadrastrado eventos em qualquer data lembrando que obrigatoriamnete todo evento ja vem com data de inicio e fim definidas eu tambem tenho que levar a situação de nque no mesmo dia podera termina e comerçar um novo evento com a condição de que o primeiro terminaria as 16:00 e o segundo comerçaria as 16:01 por exemplo. pode ser qualquer api do java. Date, Calendar, LocalDateTime. so precisa resolver minha duvida. pois nao consigo pensar em um codigo que farça isso.
Nessa situação acho que seria melhor criar um pequeno banco de dados (CRUD) e adicionar as condições no seu programa. Uma lib que ajudaria muito seria o JCalendar. Vou deixar o link para você: http://www.toedter.com/download/jcalendar-1.4.zip.
Segue um breve exemplo, que com ctz deve ser aprimorado, mas pelo menos te dará um norte!
public class Sala {
private int numeroSala;
private List<Evento> eventos = new ArrayList<Evento>();
public Sala(int numeroSala) {
super();
this.numeroSala = numeroSala;
}
public Sala(){}
public int getNumeroSala() {
return numeroSala;
}
public void setNumeroSala(int numeroSala) {
this.numeroSala = numeroSala;
}
public List<Evento> getEventos() {
return eventos;
}
public void setEventos(List<Evento> eventos) {
this.eventos = eventos;
}
public void adicionarEvento(Evento obj){
if(eventos.isEmpty()){
eventos.add(obj);
System.out.println("Evento adicionado com sucesso!");
}else{
if(!hasEventoConcorrente(obj)){
eventos.add(obj);
System.out.println("Evento adicionado com sucesso!");
}else{
System.out.println("Já existe um evento neste horário");
}
}
}
public boolean hasEventoConcorrente(Evento obj){
for(Evento evento: eventos){
if((obj.getDataInicial().after(evento.getDataInicial()) && obj.getDataInicial().before(evento.getDataFinal()))){
return true;
}
}
return false;
}
}
public class Evento {
private Date dataInicial;
private Date dataFinal;
public Evento(String dataInicial, String dataFinal) {
super();
this.dataInicial = ConversorData.strToDate(dataInicial);
this.dataFinal = ConversorData.strToDate(dataFinal);
}
public Date getDataInicial() {
return dataInicial;
}
public void setDataInicial(Date dataInicial) {
this.dataInicial = dataInicial;
}
public Date getDataFinal() {
return dataFinal;
}
public void setDataFinal(Date dataFinal) {
this.dataFinal = dataFinal;
}
}
public class ConversorData {
private static final String FORMATO_DATA = "dd/MM/yyyy HH:mm";
public static Date strToDate(String str){
SimpleDateFormat sdf = new SimpleDateFormat(FORMATO_DATA);
Date data = null;
try{
data = sdf.parse(str);
}catch(ParseException pe){
System.out.println("Erro de conversão");
}
return data;
}
}
public class ReservarEventoApplication {
public static void main(String[] args) {
Sala sala = new Sala(1);
Evento reuniao = new Evento("10/10/2016 13:00", "10/10/2016 15:00");
Evento treinamento = new Evento("10/10/2016 15:30", "10/10/2016 18:00");
Evento eventoInvalido = new Evento("10/10/2016 13:45", "10/10/2016 14:00");
sala.adicionarEvento(reuniao);
sala.adicionarEvento(treinamento);
sala.adicionarEvento(eventoInvalido);
}
}
Saída no console:
Evento adicionado com sucesso!
Evento adicionado com sucesso!
Já existe um evento neste horário