diff --git a/src/main/java/org/jlab/dtm/business/session/EventFacade.java b/src/main/java/org/jlab/dtm/business/session/EventFacade.java index 0f32e28..349b04a 100644 --- a/src/main/java/org/jlab/dtm/business/session/EventFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/EventFacade.java @@ -194,6 +194,28 @@ public void editEvent(BigInteger eventId, Date timeUp, String title, BigInteger throw new InternalException("EventType with ID " + eventTypeId + " not found"); } + List eventList = + this.findEventListWithIncidents( + event.getTimeDown(), timeUp == null ? new Date() : timeUp, type.getEventTypeId()); + + List differentEventList = new ArrayList<>(); + + for (Event e : eventList) { + if (!e.getEventId().equals(event.getEventId())) { + differentEventList.add(e); + } + } + + if (!differentEventList.isEmpty()) { + throw new UserFriendlyException( + "Event modification results in event of type " + + type.getAbbreviation() + + " time period collision with existing event " + + eventList.get(0).getEventId() + + " named: " + + eventList.get(0).getTitle()); + } + event.setTitle(title); event.setEventType(type); diff --git a/src/main/java/org/jlab/dtm/business/session/IncidentFacade.java b/src/main/java/org/jlab/dtm/business/session/IncidentFacade.java index 60b377c..6cb7c64 100644 --- a/src/main/java/org/jlab/dtm/business/session/IncidentFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/IncidentFacade.java @@ -408,7 +408,8 @@ public Event addEvent( throw new UserFriendlyException( "An event of type " + type.getName() - + " is already open (cannot add another open event of same type)"); + + " is already open (cannot add another open event of same type). The existing event name: " + + event.getTitle()); } /* we must ensure that an incident has a timeUp if the event is closed*/ @@ -420,6 +421,20 @@ public Event addEvent( throw new UserFriendlyException("Incident time up can not come after event time up"); } + List eventList = + eventFacade.findEventListWithIncidents( + timeDown, eventTimeUp == null ? new Date() : eventTimeUp, type.getEventTypeId()); + + if (!eventList.isEmpty()) { + throw new UserFriendlyException( + "Event addition results in type " + + type.getAbbreviation() + + " time period collision with existing event " + + eventList.get(0).getEventId() + + " named: " + + eventList.get(0).getTitle()); + } + // Enforce restrictions on closed events. Operators must work with open events if they wish to // mettle in the past AuditContext auditCtx = AuditContext.getCurrentInstance(); @@ -538,6 +553,30 @@ public void editIncident( boolean wasPreviouslyClosed = incident.getTimeUp() != null; + List eventList = + eventFacade.findEventListWithIncidents( + timeDown.before(event.getTimeDown()) ? timeDown : event.getTimeDown(), + event.getTimeUp() == null ? new Date() : event.getTimeUp(), + event.getEventType().getEventTypeId()); + + List differentEventList = new ArrayList<>(); + + for (Event e : eventList) { + if (!e.getEventId().equals(event.getEventId())) { + differentEventList.add(e); + } + } + + if (!differentEventList.isEmpty()) { + throw new UserFriendlyException( + "Incident modification results in event type " + + event.getEventType().getAbbreviation() + + " time period collision with existing event " + + eventList.get(0).getEventId() + + " named: " + + eventList.get(0).getTitle()); + } + validateAndPopulateIncident( incident, title, @@ -640,6 +679,30 @@ public void addIncident( event.setTitle(eventTitle); + List eventList = + eventFacade.findEventListWithIncidents( + timeDown.before(event.getTimeDown()) ? timeDown : event.getTimeDown(), + event.getTimeUp() == null ? new Date() : event.getTimeUp(), + event.getEventType().getEventTypeId()); + + List differentEventList = new ArrayList<>(); + + for (Event e : eventList) { + if (!e.getEventId().equals(event.getEventId())) { + differentEventList.add(e); + } + } + + if (!differentEventList.isEmpty()) { + throw new UserFriendlyException( + "Incident modification results in event type " + + event.getEventType().getAbbreviation() + + " time period collision with existing event " + + eventList.get(0).getEventId() + + " named: " + + eventList.get(0).getTitle()); + } + em.flush(); Incident incident = new Incident();