From e633a179b1c2d123567842f8a07af74718a89eeb Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 4 Aug 2011 14:28:51 +0200 Subject: [PATCH] [Bug #1132] Create new enum CalendarExceptionTypeColor The enum is being used in CalendarExceptionType and all the entities related have been updated to work with the new enum. Web service has also been updated. Colors defined now are: DEFAULT (red), GREEN and BLUE. Colors to show in the interface are just examples and should be changed in a later patch. FEA: ItEr75S04BugFixing --- .../entities/CalendarExceptionType.java | 16 +-- .../entities/CalendarExceptionTypeColor.java | 58 ++++++++++ .../PredefinedCalendarExceptionTypes.java | 14 +-- .../src/main/resources/db.changelog-1.1.xml | 7 ++ .../calendars/entities/Calendars.hbm.xml | 8 +- .../calendars/entities/BaseCalendarTest.java | 3 +- .../api/CalendarExceptionTypeColorDTO.java | 34 ++++++ .../api/CalendarExceptionTypeDTO.java | 8 +- .../CalendarExceptionTypeColorConverter.java | 101 ++++++++++++++++++ .../impl/CalendarExceptionTypeConverter.java | 17 ++- .../BaseCalendarServiceTest.java | 3 +- .../api/CalendarExceptionTypeServiceTest.java | 12 ++- 12 files changed, 253 insertions(+), 28 deletions(-) create mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionTypeColor.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/api/CalendarExceptionTypeColorDTO.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeColorConverter.java diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java index 060c9eba2..ab8a7e83a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionType.java @@ -51,7 +51,7 @@ public class CalendarExceptionType extends IntegrationEntity implements private String name; - private String color; + private CalendarExceptionTypeColor color = CalendarExceptionTypeColor.DEFAULT; private Capacity capacity = Capacity.zero(); @@ -59,19 +59,21 @@ public class CalendarExceptionType extends IntegrationEntity implements return create(new CalendarExceptionType()); } - public static CalendarExceptionType create(String name, String color, + public static CalendarExceptionType create(String name, + CalendarExceptionTypeColor color, Boolean notAssignable) { return create(new CalendarExceptionType(name, color, notAssignable)); } public static CalendarExceptionType create(String code, String name, - String color, Boolean notAssignable) { + CalendarExceptionTypeColor color, Boolean notAssignable) { return create(new CalendarExceptionType(name, color, notAssignable), code); } public static CalendarExceptionType create(String code, String name, - String color, Boolean notAssignable, EffortDuration duration) { + CalendarExceptionTypeColor color, Boolean notAssignable, + EffortDuration duration) { CalendarExceptionType calendarExceptionType = new CalendarExceptionType( name, color, notAssignable); calendarExceptionType.setDuration(duration); @@ -85,7 +87,7 @@ public class CalendarExceptionType extends IntegrationEntity implements } - public CalendarExceptionType(String name, String color, + public CalendarExceptionType(String name, CalendarExceptionTypeColor color, Boolean notOverAssignable) { this.name = name; this.color = color; @@ -103,11 +105,11 @@ public class CalendarExceptionType extends IntegrationEntity implements this.name = name; } - public String getColor() { + public CalendarExceptionTypeColor getColor() { return color; } - public void setColor(String color) { + public void setColor(CalendarExceptionTypeColor color) { this.color = color; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionTypeColor.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionTypeColor.java new file mode 100644 index 000000000..993c5f177 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/CalendarExceptionTypeColor.java @@ -0,0 +1,58 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 2011 Igalia, S.L. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.calendars.entities; + +import static org.navalplanner.business.i18n.I18nHelper._; + +/** + * Enum representing the possible colors to choose for a + * {@link CalendarExceptionType} + * + * @author Manuel Rego Casasnovas + */ +public enum CalendarExceptionTypeColor { + DEFAULT(_("red (default)"), "red", "lightcoral"), + GREEN(_("green"), "green", "lightgreen"), + BLUE(_("blue"), "blue", "lightblue"); + + private final String name; + private final String colorOwnException; + private final String colorDerivedException; + + private CalendarExceptionTypeColor(String name, String colorOwnException, + String colorDerivedException) { + this.name = name; + this.colorOwnException = colorOwnException; + this.colorDerivedException = colorDerivedException; + } + + public String getName() { + return name; + } + + public String getColorOwnException() { + return colorOwnException; + } + + public String getColorDerivedException() { + return colorDerivedException; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/PredefinedCalendarExceptionTypes.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/PredefinedCalendarExceptionTypes.java index 10f8b8ea5..ced346b9f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/PredefinedCalendarExceptionTypes.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/PredefinedCalendarExceptionTypes.java @@ -29,15 +29,17 @@ package org.navalplanner.business.calendars.entities; */ public enum PredefinedCalendarExceptionTypes { - HOLIDAY("HOLIDAY", "red", true), SICK_LEAVE("SICK_LEAVE", "red", true), LEAVE( - "LEAVE", "red", true), STRIKE("STRIKE", "red", true), BANK_HOLIDAY( - "BANK_HOLIDAY", "red", true), WORKABLE_BANK_HOLIDAY( - "WORKABLE_BANK_HOLIDAY", "orange", false); + HOLIDAY("HOLIDAY", CalendarExceptionTypeColor.DEFAULT, true), + SICK_LEAVE("SICK_LEAVE", CalendarExceptionTypeColor.DEFAULT, true), + LEAVE("LEAVE", CalendarExceptionTypeColor.DEFAULT, true), + STRIKE("STRIKE", CalendarExceptionTypeColor.DEFAULT, true), + BANK_HOLIDAY("BANK_HOLIDAY", CalendarExceptionTypeColor.DEFAULT, true), + WORKABLE_BANK_HOLIDAY("WORKABLE_BANK_HOLIDAY", CalendarExceptionTypeColor.DEFAULT, false); private CalendarExceptionType calendarExceptionType; - private PredefinedCalendarExceptionTypes(String name, String color, - Boolean notAssignable) { + private PredefinedCalendarExceptionTypes(String name, + CalendarExceptionTypeColor color, Boolean notAssignable) { // Using the name as code in order to be more human friendly calendarExceptionType = CalendarExceptionType.create(name, name, color, notAssignable); diff --git a/navalplanner-business/src/main/resources/db.changelog-1.1.xml b/navalplanner-business/src/main/resources/db.changelog-1.1.xml index 6ee75e41c..8801fe23c 100644 --- a/navalplanner-business/src/main/resources/db.changelog-1.1.xml +++ b/navalplanner-business/src/main/resources/db.changelog-1.1.xml @@ -223,4 +223,11 @@ + + Update color in calendar_exception_type to DEFAULT + + + + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/calendars/entities/Calendars.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/calendars/entities/Calendars.hbm.xml index e8a40358a..346d99d09 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/calendars/entities/Calendars.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/calendars/entities/Calendars.hbm.xml @@ -92,7 +92,13 @@ column="code_autogenerated" /> - + + + + org.navalplanner.business.calendars.entities.CalendarExceptionTypeColor + 12 + + . + */ + +package org.navalplanner.ws.calendarexceptiontypes.api; + +import javax.xml.bind.annotation.XmlEnum; + +import org.navalplanner.business.calendars.entities.CalendarExceptionTypeColor; + +/** + * DTO for {@link CalendarExceptionTypeColor} enum. + * + * @author Manuel Rego Casasnovas + */ +@XmlEnum +public enum CalendarExceptionTypeColorDTO { + DEFAULT, RED, GREEN, BLUE; +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/api/CalendarExceptionTypeDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/api/CalendarExceptionTypeDTO.java index 3070f303f..1d7f41e15 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/api/CalendarExceptionTypeDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/api/CalendarExceptionTypeDTO.java @@ -41,7 +41,7 @@ public class CalendarExceptionTypeDTO extends IntegrationEntityDTO { public String name; @XmlAttribute - public String color; + public CalendarExceptionTypeColorDTO color; @XmlAttribute(name = "over-assignable") public boolean overAssignable; @@ -52,7 +52,8 @@ public class CalendarExceptionTypeDTO extends IntegrationEntityDTO { public CalendarExceptionTypeDTO() { } - public CalendarExceptionTypeDTO(String code, String name, String color, + public CalendarExceptionTypeDTO(String code, String name, + CalendarExceptionTypeColorDTO color, boolean overAssignable, int duration) { super(code); this.name = name; @@ -61,7 +62,8 @@ public class CalendarExceptionTypeDTO extends IntegrationEntityDTO { this.duration = duration; } - public CalendarExceptionTypeDTO(String name, String color, + public CalendarExceptionTypeDTO(String name, + CalendarExceptionTypeColorDTO color, boolean overAssignable, int duration) { this(generateCode(), name, color, overAssignable, duration); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeColorConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeColorConverter.java new file mode 100644 index 000000000..4e47302a9 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeColorConverter.java @@ -0,0 +1,101 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 2011 Igalia, S.L. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.ws.calendarexceptiontypes.impl; + +import static org.navalplanner.web.I18nHelper._; + +import java.util.HashMap; +import java.util.Map; + +import org.navalplanner.business.calendars.entities.CalendarExceptionTypeColor; +import org.navalplanner.ws.calendarexceptiontypes.api.CalendarExceptionTypeColorDTO; + +/** + * Converter from/to {@link CalendarExceptionTypeColor} entities to/from DTOs. + * + * @author Manuel Rego Casasnovas + */ +public class CalendarExceptionTypeColorConverter { + + private final static Map calendarExceptionTypeColorToDTO = new HashMap(); + + private final static Map calendarExceptionTypeColorFromDTO = new HashMap(); + + static { + + calendarExceptionTypeColorFromDTO.put( + CalendarExceptionTypeColorDTO.RED, + CalendarExceptionTypeColor.DEFAULT); + + calendarExceptionTypeColorToDTO.put(CalendarExceptionTypeColor.DEFAULT, + CalendarExceptionTypeColorDTO.DEFAULT); + calendarExceptionTypeColorFromDTO.put( + CalendarExceptionTypeColorDTO.DEFAULT, + CalendarExceptionTypeColor.DEFAULT); + + calendarExceptionTypeColorToDTO.put(CalendarExceptionTypeColor.GREEN, + CalendarExceptionTypeColorDTO.GREEN); + calendarExceptionTypeColorFromDTO.put( + CalendarExceptionTypeColorDTO.GREEN, + CalendarExceptionTypeColor.GREEN); + + calendarExceptionTypeColorToDTO.put(CalendarExceptionTypeColor.BLUE, + CalendarExceptionTypeColorDTO.BLUE); + calendarExceptionTypeColorFromDTO.put( + CalendarExceptionTypeColorDTO.BLUE, + CalendarExceptionTypeColor.BLUE); + + } + + public final static CalendarExceptionTypeColorDTO toDTO( + CalendarExceptionTypeColor resource) { + CalendarExceptionTypeColorDTO value = calendarExceptionTypeColorToDTO + .get(resource); + + if (value == null) { + throw new RuntimeException(_("Unable to convert {0} " + + "value to {1} type", resource.toString(), + CalendarExceptionTypeColorDTO.class.getName())); + } else { + return value; + } + } + + /** + * It returns null if the parameter is null. + */ + public final static CalendarExceptionTypeColor toEntity( + CalendarExceptionTypeColorDTO resource) { + if (resource == null) { + return null; + } + + CalendarExceptionTypeColor value = calendarExceptionTypeColorFromDTO + .get(resource); + + if (value == null) { + throw new RuntimeException(_("Unable to convert value to {0} type", + CalendarExceptionTypeColor.class.getName())); + } else { + return value; + } + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeConverter.java index a72fb87be..51b4d7fae 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeConverter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/calendarexceptiontypes/impl/CalendarExceptionTypeConverter.java @@ -23,6 +23,7 @@ package org.navalplanner.ws.calendarexceptiontypes.impl; import org.navalplanner.business.calendars.entities.CalendarExceptionType; import org.navalplanner.business.workingday.EffortDuration; +import org.navalplanner.ws.calendarexceptiontypes.api.CalendarExceptionTypeColorDTO; import org.navalplanner.ws.calendarexceptiontypes.api.CalendarExceptionTypeDTO; /** @@ -40,23 +41,29 @@ public final class CalendarExceptionTypeConverter { CalendarExceptionType calendarExceptionType) { EffortDuration duration = calendarExceptionType.getDuration(); int seconds = (duration != null) ? duration.getSeconds() : 0; + + CalendarExceptionTypeColorDTO colorDTO = CalendarExceptionTypeColorConverter + .toDTO(calendarExceptionType.getColor()); + return new CalendarExceptionTypeDTO(calendarExceptionType.getCode(), - calendarExceptionType.getName(), calendarExceptionType - .getColor(), calendarExceptionType.isOverAssignableWithoutLimit(), + calendarExceptionType.getName(), colorDTO, + calendarExceptionType.isOverAssignableWithoutLimit(), seconds); } public final static CalendarExceptionType toEntity( CalendarExceptionTypeDTO entityDTO) { return CalendarExceptionType.create(entityDTO.code, entityDTO.name, - entityDTO.color, entityDTO.overAssignable, EffortDuration - .seconds(entityDTO.duration)); + CalendarExceptionTypeColorConverter.toEntity(entityDTO.color), + entityDTO.overAssignable, + EffortDuration.seconds(entityDTO.duration)); } public static void updateCalendarExceptionType( CalendarExceptionType entity, CalendarExceptionTypeDTO entityDTO) { entity.setName(entityDTO.name); - entity.setColor(entityDTO.color); + entity.setColor(CalendarExceptionTypeColorConverter + .toEntity(entityDTO.color)); entity.setOverAssignable(entityDTO.overAssignable); entity.setDuration(EffortDuration.seconds(entityDTO.duration)); } diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/basecalendars/BaseCalendarServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/basecalendars/BaseCalendarServiceTest.java index 6f10e8d50..73e87e815 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/basecalendars/BaseCalendarServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/basecalendars/BaseCalendarServiceTest.java @@ -45,6 +45,7 @@ import org.navalplanner.business.calendars.daos.ICalendarExceptionTypeDAO; import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.calendars.entities.CalendarData; import org.navalplanner.business.calendars.entities.CalendarExceptionType; +import org.navalplanner.business.calendars.entities.CalendarExceptionTypeColor; import org.navalplanner.business.calendars.entities.Capacity; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; @@ -120,7 +121,7 @@ public class BaseCalendarServiceTest { @Rollback(false) public void givenCalendarExceptionTypeStored() { CalendarExceptionType calendarExceptionType = CalendarExceptionType - .create("name", "color", false); + .create("name", CalendarExceptionTypeColor.DEFAULT, false); calendarExceptionType.setCode(typeCode); calendarExceptionTypeDAO.save(calendarExceptionType); diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/calendarexceptiontypes/api/CalendarExceptionTypeServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/calendarexceptiontypes/api/CalendarExceptionTypeServiceTest.java index 57541b995..9b2c7ee0d 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/calendarexceptiontypes/api/CalendarExceptionTypeServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/calendarexceptiontypes/api/CalendarExceptionTypeServiceTest.java @@ -35,9 +35,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.calendars.daos.ICalendarExceptionTypeDAO; import org.navalplanner.business.calendars.entities.CalendarExceptionType; +import org.navalplanner.business.calendars.entities.CalendarExceptionTypeColor; import org.navalplanner.ws.calendarexceptiontypes.api.CalendarExceptionTypeDTO; import org.navalplanner.ws.calendarexceptiontypes.api.CalendarExceptionTypeListDTO; import org.navalplanner.ws.calendarexceptiontypes.api.ICalendarExceptionTypeService; +import org.navalplanner.ws.calendarexceptiontypes.impl.CalendarExceptionTypeColorConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -68,7 +70,7 @@ public class CalendarExceptionTypeServiceTest { private CalendarExceptionType givenCalendarExceptionTypeStored() { CalendarExceptionType calendarExceptionType = CalendarExceptionType - .create("name", "color", false); + .create("name", CalendarExceptionTypeColor.DEFAULT, false); calendarExceptionTypeDAO.save(calendarExceptionType); calendarExceptionTypeDAO.flush(); @@ -79,14 +81,14 @@ public class CalendarExceptionTypeServiceTest { } @Test - public void exportLabelTypes() { + public void exportExceptionTypes() { CalendarExceptionTypeListDTO list = calendarExceptionTypeService .getCalendarExceptionType(); assertTrue(list.calendarExceptionTypes.isEmpty()); } @Test - public void exportLabelTypes2() { + public void exportExceptionTypes2() { CalendarExceptionType calendarExceptionType = givenCalendarExceptionTypeStored(); CalendarExceptionTypeListDTO list = calendarExceptionTypeService @@ -99,7 +101,9 @@ public class CalendarExceptionTypeServiceTest { .getCode())); assertThat(calendarExceptionTypeDTO.name, equalTo(calendarExceptionType .getName())); - assertThat(calendarExceptionTypeDTO.color, + assertThat( + CalendarExceptionTypeColorConverter + .toEntity(calendarExceptionTypeDTO.color), equalTo(calendarExceptionType.getColor())); assertThat(calendarExceptionTypeDTO.overAssignable, equalTo(calendarExceptionType.isOverAssignableWithoutLimit()));