Added data type for period expressions (MOB-750)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14580 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2009-06-08 11:19:32 +00:00
parent 1a261b54fd
commit e4562d384d
6 changed files with 66 additions and 13 deletions

View File

@@ -27,6 +27,9 @@ package org.alfresco.repo.dictionary.types.period;
import java.util.Calendar;
import java.util.Date;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.namespace.QName;
/**
* Support for calendar based periods
* @author andyh
@@ -64,4 +67,8 @@ public abstract class AbstractCalendarPeriodProvider extends AbstractPeriodProvi
*/
public abstract void add(Calendar calendar, int value);
public QName getExpressionDataType()
{
return DataTypeDefinition.INT;
}
}

View File

@@ -28,12 +28,14 @@ import java.text.ParseException;
import java.util.Date;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.namespace.QName;
import org.quartz.CronExpression;
/**
* Cron based periods
* @author andyh
*
* @author andyh
*/
public class Cron extends AbstractPeriodProvider
{
@@ -61,7 +63,7 @@ public class Cron extends AbstractPeriodProvider
}
catch (ParseException e)
{
throw new AlfrescoRuntimeException("Invalid cron expression: "+expression);
throw new AlfrescoRuntimeException("Invalid cron expression: " + expression);
}
return ce.getNextValidTimeAfter(date);
}
@@ -71,4 +73,9 @@ public class Cron extends AbstractPeriodProvider
return PERIOD_TYPE;
}
public QName getExpressionDataType()
{
return DataTypeDefinition.TEXT;
}
}

View File

@@ -25,11 +25,14 @@
package org.alfresco.repo.dictionary.types.period;
import java.util.Date;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.namespace.QName;
/**
* No period
* Period type "none"
* @author andyh
* No period Period type "none"
*
* @author andyh
*/
public class NoPeriod extends AbstractPeriodProvider
{
@@ -66,5 +69,8 @@ public class NoPeriod extends AbstractPeriodProvider
return PERIOD_TYPE;
}
public QName getExpressionDataType()
{
return null;
}
}

View File

@@ -31,6 +31,7 @@ import java.util.Date;
import junit.framework.TestCase;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.Period;
import org.alfresco.service.cmr.repository.PeriodProvider;
import org.alfresco.util.ApplicationContextHelper;
@@ -67,6 +68,7 @@ public class PeriodTest extends TestCase
assertNull(provider.getNextDate(new Date(), ""));
assertNull(provider.getNextDate(new Date(), "meep"));
assertEquals(provider.getPeriodType(), NoPeriod.PERIOD_TYPE);
assertNull(provider.getExpressionDataType());
}
/**
@@ -108,6 +110,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), Days.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -149,6 +152,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), Weeks.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -190,6 +194,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), Months.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -231,6 +236,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), Quarters.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -272,6 +278,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), Years.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -316,6 +323,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), EndOfMonth.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -360,6 +368,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), EndOfYear.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -373,6 +382,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "1");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.OPTIONAL);
assertEquals(provider.getPeriodType(), EndOfQuarter.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", true);
Period period = new Period(EndOfQuarter.PERIOD_TYPE);
@@ -521,6 +531,7 @@ public class PeriodTest extends TestCase
assertNotNull(provider.getNextDate(now, "1"));
assertNotNull(provider.getNextDate(now, "2"));
assertEquals(provider.getPeriodType(), EndOfFinancialMonth.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
}
/**
@@ -534,6 +545,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "1");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.OPTIONAL);
assertEquals(provider.getPeriodType(), EndOfFinancialYear.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", true);
Period period = new Period(EndOfFinancialYear.PERIOD_TYPE);
@@ -566,6 +578,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "1");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.OPTIONAL);
assertEquals(provider.getPeriodType(), EndOfFinancialQuarter.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", true);
Period period = new Period(EndOfFinancialQuarter.PERIOD_TYPE);
@@ -617,6 +630,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "1");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.OPTIONAL);
assertEquals(provider.getPeriodType(), EndOfFinancialYear.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
AbstractEndOfCalendarPeriodProvider instance = (AbstractEndOfCalendarPeriodProvider) provider;
instance.setStartDayOfMonth(6);
@@ -653,6 +667,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "1");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.OPTIONAL);
assertEquals(provider.getPeriodType(), EndOfFinancialQuarter.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
AbstractEndOfCalendarPeriodProvider instance = (AbstractEndOfCalendarPeriodProvider) provider;
instance.setStartDayOfMonth(6);
@@ -708,6 +723,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "1");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.OPTIONAL);
assertEquals(provider.getPeriodType(), EndOfFinancialMonth.PERIOD_TYPE);
assertEquals(DataTypeDefinition.INT, provider.getExpressionDataType());
AbstractEndOfCalendarPeriodProvider instance = (AbstractEndOfCalendarPeriodProvider) provider;
instance.setStartDayOfMonth(6);
@@ -818,6 +834,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "59 59 23 * * ?");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.MANDATORY);
assertEquals(provider.getPeriodType(), Cron.PERIOD_TYPE);
assertEquals(DataTypeDefinition.TEXT, provider.getExpressionDataType());
SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", true);
Period period = new Period(Cron.PERIOD_TYPE);
@@ -839,6 +856,7 @@ public class PeriodTest extends TestCase
assertEquals(provider.getDefaultExpression(), "P1D");
assertEquals(provider.getExpressionMutiplicity(), PeriodProvider.ExpressionMutiplicity.MANDATORY);
assertEquals(provider.getPeriodType(), XMLDuration.PERIOD_TYPE);
assertEquals(DataTypeDefinition.TEXT, provider.getExpressionDataType());
SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", true);
Period period = new Period(XMLDuration.PERIOD_TYPE);

View File

@@ -2,7 +2,9 @@ package org.alfresco.repo.dictionary.types.period;
import java.util.Date;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.datatype.Duration;
import org.alfresco.service.namespace.QName;
/**
* XMLDuration
@@ -37,4 +39,9 @@ public class XMLDuration extends AbstractPeriodProvider
return PERIOD_TYPE;
}
public QName getExpressionDataType()
{
return DataTypeDefinition.TEXT;
}
}

View File

@@ -26,6 +26,8 @@ package org.alfresco.service.cmr.repository;
import java.util.Date;
import org.alfresco.service.namespace.QName;
/**
* Provider API for period implementations
* @author andyh
@@ -79,4 +81,10 @@ public interface PeriodProvider
* @return - the default expression.
*/
public String getDefaultExpression();
/**
* Return the Alfresco data type QName to which the string value of the expression will be converted.
* @return the alfresco data type or null if an expression is not allowed.
*/
public QName getExpressionDataType();
}