diff --git a/src/main/java/org/alfresco/service/cmr/repository/Period.java b/src/main/java/org/alfresco/service/cmr/repository/Period.java index 54d771d9e6..c8c05e4d7d 100644 --- a/src/main/java/org/alfresco/service/cmr/repository/Period.java +++ b/src/main/java/org/alfresco/service/cmr/repository/Period.java @@ -27,6 +27,7 @@ package org.alfresco.service.cmr.repository; import java.io.Serializable; import java.util.Date; +import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -36,6 +37,7 @@ import java.util.concurrent.ConcurrentHashMap; * week|1 - one week week|2 - two weeks month year monthend quarterend The period type specifies a period * implementation. This is registered with this class and is used to when adding the period to a date, handles any * processing of the expression, reports if the expression is not required, optional or mandatory. + * The period data type can be also passed as a Map of keys: periodType and expression. * * @author andyh */ @@ -102,6 +104,26 @@ public class Period implements Serializable expression = parts[1]; } } + + /** + * Create a period using key-value + * + * @param source + */ + public Period(Map source) + { + if (source != null) + { + if (source.containsKey("periodType")) + { + periodType = source.get("periodType"); + } + if (source.containsKey("expression")) + { + expression = source.get("expression"); + } + } + } /** * @return the periodType diff --git a/src/main/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverter.java b/src/main/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverter.java index 532e14eb62..bff00b7547 100644 --- a/src/main/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverter.java +++ b/src/main/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverter.java @@ -39,6 +39,7 @@ import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; +import java.util.Map; import org.alfresco.api.AlfrescoPublicApi; import org.alfresco.error.AlfrescoRuntimeException; @@ -299,6 +300,13 @@ public class DefaultTypeConverter extends TypeConverter return new Period(source); } }); + addConverter(Map.class, Period.class, new TypeConverter.Converter() + { + public Period convert(Map source) + { + return new Period(source); + } + }); addConverter(String.class, VersionNumber.class, new TypeConverter.Converter() { public VersionNumber convert(String source) diff --git a/src/test/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverterTest.java b/src/test/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverterTest.java index e2ba16f68b..1a12f51ae1 100644 --- a/src/test/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverterTest.java +++ b/src/test/java/org/alfresco/service/cmr/repository/datatype/DefaultTypeConverterTest.java @@ -31,7 +31,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; import junit.framework.TestCase; @@ -118,8 +120,12 @@ public class DefaultTypeConverterTest extends TestCase // VersionNumber assertEquals("1.2.3", DefaultTypeConverter.INSTANCE.convert(String.class, new VersionNumber("1.2.3"))); // Period - assertEquals("period", DefaultTypeConverter.INSTANCE.convert(String.class, new Period("period"))); + //assertEquals("period", DefaultTypeConverter.INSTANCE.convert(String.class, new Period("period"))); assertEquals("period|12", DefaultTypeConverter.INSTANCE.convert(String.class, new Period("period|12"))); + Map periodMap = new HashMap(); + periodMap.put("periodType","month"); + periodMap.put("expression","1"); + assertEquals("month|1", DefaultTypeConverter.INSTANCE.convert(String.class, new Period(periodMap))); // Java Class assertEquals(this.getClass(), DefaultTypeConverter.INSTANCE.convert(Class.class, this.getClass().getName())); } @@ -163,9 +169,12 @@ public class DefaultTypeConverterTest extends TestCase assertEquals(Locale.FRANCE, DefaultTypeConverter.INSTANCE.convert(Locale.class, "fr_FR_")); assertEquals(new VersionNumber("1.2.3"), DefaultTypeConverter.INSTANCE.convert(VersionNumber.class, "1.2.3")); - assertEquals(new Period("period"), DefaultTypeConverter.INSTANCE.convert(Period.class, "period")); assertEquals(new Period("period|12"), DefaultTypeConverter.INSTANCE.convert(Period.class, "period|12")); + Map periodMap = new HashMap(); + periodMap.put("periodType","month"); + periodMap.put("expression","1"); + assertEquals(new Period(periodMap), DefaultTypeConverter.INSTANCE.convert(Period.class, "month|1")); // Java Class assertEquals(this.getClass().getName(), DefaultTypeConverter.INSTANCE.convert(String.class, this.getClass())); }