diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java index 235075275..c28cbc615 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java @@ -96,11 +96,17 @@ public class BaseCalendar extends BaseEntity implements IValidable { return hours; } - public void setHours(Days day, Integer hours) { + public void setHours(Days day, Integer hours) + throws IllegalArgumentException { setHoursForDay(day, hours); } - private void setHoursForDay(Days day, Integer hours) { + private void setHoursForDay(Days day, Integer hours) + throws IllegalArgumentException { + if ((hours != null) && (hours < 0)) { + throw new IllegalArgumentException( + "The number of hours for a day can not be negative"); + } hoursPerDay.put(day.ordinal(), hours); } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java index d758ddf01..c2686f8ac 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java @@ -532,4 +532,11 @@ public class BaseCalendarTest { assertThat(copy.getPreviousCalendar(), nullValue()); } + @Test(expected = IllegalArgumentException.class) + public void testSetHoursInvalid() { + BaseCalendar calendar = createBasicCalendar(); + + calendar.setHours(Days.MONDAY, -5); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java index f0a35ab42..4290deb46 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java @@ -264,7 +264,8 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { item.appendChild(labelListcell); Listcell hoursListcell = new Listcell(); - Intbox hoursIntbox = Util.bind(new Intbox(), + final Intbox intBox = new Intbox(); + Intbox hoursIntbox = Util.bind(intBox, new Util.Getter() { @Override @@ -275,8 +276,12 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { @Override public void set(Integer value) { - baseCalendarModel.setHours(day, - value); + try { + baseCalendarModel.setHours(day, value); + } catch (IllegalArgumentException e) { + throw new WrongValueException(intBox, e + .getMessage()); + } } });