You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by dc...@apache.org on 2010/04/22 18:28:00 UTC

svn commit: r936938 [24/29] - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-server: chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/ chemistry-opencmis-server-bindings/src/main/java/org/apache/chem...

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java?rev=936938&r1=936937&r2=936938&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java Thu Apr 22 16:27:57 2010
@@ -57,656 +57,656 @@ import org.junit.Test;
  * @author Jens
  */
 public class TypeValidationTest extends TestCase {
-	private static final String MY_DOC_TYPE = "MyDocType1";
-	private static final String STRING_DOC_TYPE = "StringDocType";
-	private static final String STRING_PROP_TYPE = "StringProp";
-	private static final String INT_DOC_TYPE = "IntegerDocType";
-	private static final String INT_PROP_TYPE = "IntegerProp";
-	private static final String DECIMAL_DOC_TYPE = "DecimalDocType";
-	private static final String DECIMAL_PROP_TYPE = "DecimalProp";
-	private static final String PICK_LIST_DOC_TYPE = "PickListDocType";
-	private static final String PICK_LIST_PROP_DEF = "PickListProp";
-	private static final String DOC_TYPE_SUPER = "SuperDocType";
-	private static final String DOC_TYPE_SUB = "SubDocType";
-	private static final String STRING_PROP_TYPE_SUPER = "StringPropSuper";
-	private static final String STRING_PROP_TYPE_SUB = "StringPropSub";
-	private static final BindingsObjectFactory FACTORY = new BindingsObjectFactoryImpl();
-
-	@Before
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	@After
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
-	private List<PropertyData<?>> createPropertiesWithNameAndTypeId(String typeId) {
-		List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
-		properties.add(FACTORY.createPropertyIdData(PropertyIds.NAME, "Document_1"));
-		properties.add(FACTORY.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
-		return properties;
-	}
-
-	@Test
-	public void testMandatoryPropertyValidation() {
-		// create properties in the same way as we would pass them to a
-		// createDocument call
-		// of the ObjectService
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(MY_DOC_TYPE);
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// validate properties according to type
-		TypeDefinition typeDef = buildMyType();
-
-		// try missing mandatory Boolean property
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if mandatory property is missing.");
-		} catch (CmisConstraintException e) {
-			assertTrue(e.getMessage().contains("mandatory properties are missing"));
-		}
-
-		// add missing mandatory Boolean property and try again
-		properties.add(FACTORY.createPropertyBooleanData("BooleanProp", true));
-		props = FACTORY.createPropertiesData(properties);
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (CmisConstraintException e) {
-			fail("TypeValidator should not throw CMISConstraintException if mandatory property is present.");
-		}
-	}
-
-	@Test
-	public void testStringPropertyValidation() {
-		TypeDefinition typeDef = buildTypeWithStringProp(); // we only have one
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(STRING_DOC_TYPE);
-		properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE,
-				"A String property with quite a long value exceeding the max. length."));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try exceeding string length
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(STRING_DOC_TYPE);
-		properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE, "short val"));
-		props = FACTORY.createPropertiesData(properties);
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw exception if string length is valid" + e);
-		}
-	}
-
-	@Test
-	public void testIntegerPropertyValidation() {
-
-		TypeDefinition typeDef = buildTypeWithIntegerProp();
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(INT_DOC_TYPE);
-		properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(-100))); // try
-																									// wrong
-																									// value
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try exceeding string length
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if integer value is out of range");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(INT_DOC_TYPE);
-		properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(1))); // try
-																									// correct
-																									// value
-		props = FACTORY.createPropertiesData(properties);
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw exception if integer value is valid. " + e);
-		}
-
-	}
-
-	@Test
-	public void testDecimalPropertyValidation() {
-		TypeDefinition typeDef = buildTypeWithDecimalProp();
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(DECIMAL_DOC_TYPE);
-		properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(-11.11)));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try exceeding string length
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if decimal value is out of range");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(DECIMAL_DOC_TYPE);
-		properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(1.23)));
-		props = FACTORY.createPropertiesData(properties);
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw exception if decimal value is valid. " + e);
-		}
-	}
-
-	@Test
-	public void testPickListValidationSingleValue() {
-		TypeDefinition typeDef = buildTypeWithPickList(Cardinality.SINGLE);
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "pink"));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try wrong value
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "blue"));
-		props = FACTORY.createPropertiesData(properties);
-
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-					+ e);
-		}
-	}
-
-	@Test
-	public void testPickListValidationMultiValue() {
-		TypeDefinition typeDef = buildTypeWithPickList(Cardinality.MULTI);
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		List<String> propValues = new ArrayList<String>();
-		propValues.add("red");
-		propValues.add("pink");
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try wrong value
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		propValues = new ArrayList<String>();
-		propValues.add("red");
-		propValues.add("green");
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-		props = FACTORY.createPropertiesData(properties);
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-					+ e);
-		}
-	}
-
-	@Test
-	public void testPickListValidationMultiUsingMultipleValueLists() {
-		TypeDefinition typeDef = buildTypeWithMultiPickList();
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		List<String> propValues = new ArrayList<String>();
-		propValues.add("red");
-		propValues.add("green");
-		propValues.add("pink");
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try wrong value
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		propValues = new ArrayList<String>();
-		propValues.add("red");
-		propValues.add("green");
-		propValues.add("blue");
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-		props = FACTORY.createPropertiesData(properties);
-
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-					+ e);
-		}
-	}
-
-	@Test
-	public void testHierachicalPickListValidationSingleValue() {
-		TypeDefinition typeDef = buildTypeWithHierachicalPickList(Cardinality.SINGLE);
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "frankfurt"));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try wrong value
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "munich"));
-		props = FACTORY.createPropertiesData(properties);
-
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-					+ e);
-		}
-	}
-
-	@Test
-	public void testHierachicalPickListValidationMultiValue() {
-		TypeDefinition typeDef = buildTypeWithHierachicalPickList(Cardinality.MULTI);
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		List<String> propValues = new ArrayList<String>();
-		propValues.add("stuttgart");
-		propValues.add("hintertupfingen");
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try wrong value
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-			fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
-		propValues = new ArrayList<String>();
-		propValues.add("munich");
-		propValues.add("walldorf");
-		properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
-		props = FACTORY.createPropertiesData(properties);
-
-		try {
-			TypeValidator.validateProperties(typeDef, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
-					+ e);
-		}
-	}
-
-	@Test
-	public void testInheritedPropertyValidation() {
-		TypeManager tm = buildInheritedTypes();
-		TypeDefinition superType = tm.getTypeById(DOC_TYPE_SUPER).getTypeDefinition();
-		TypeDefinition subType = tm.getTypeById(DOC_TYPE_SUB).getTypeDefinition();
-		;
-
-		List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
-		properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUB,
-				"A String property with quite a long value exceeding the max. length."));
-		Properties props = FACTORY.createPropertiesData(properties);
-
-		// try exceeding string length on org property
-		try {
-			TypeValidator.validateProperties(superType, props, true);
-			fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		// try exceeding string length on inherited property
-		properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
-		properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUPER,
-				"A String property with quite a long value exceeding the max. length."));
-		props = FACTORY.createPropertiesData(properties);
-
-		// try exceeding string length
-		try {
-			TypeValidator.validateProperties(subType, props, true);
-			fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
-		} catch (Exception e) {
-			assertTrue(e instanceof CmisConstraintException);
-		}
-
-		properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
-		properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUPER, "super val"));
-		properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUB, "sub val"));
-		props = FACTORY.createPropertiesData(properties);
-		try {
-			TypeValidator.validateProperties(subType, props, true);
-		} catch (Exception e) {
-			fail("TypeValidator should not throw exception if string length is valid" + e);
-		}
-	}
-
-	/**
-	 * create sample type
-	 * 
-	 * @return type definition of sample type
-	 */
-	private static InMemoryDocumentTypeDefinition buildMyType() {
-		// always add CMIS default types
-
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(MY_DOC_TYPE,
-				"Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		// create a boolean property definition
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-		PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
-				"Sample Boolean Property");
-		((PropertyBooleanDefinitionImpl) prop).setIsRequired(true);
-		propertyDefinitions.put(prop.getId(), prop);
-
-		prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
-				"Sample Boolean multi-value Property");
-		propertyDefinitions.put(prop.getId(), prop);
-
-		PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
-				"Sample DateTime Property");
-		propertyDefinitions.put(prop2.getId(), prop2);
-
-		prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
-				"Sample DateTime multi-value Property");
-		propertyDefinitions.put(prop2.getId(), prop2);
-
-		PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
-				"Sample Decimal Property");
-		propertyDefinitions.put(prop3.getId(), prop3);
-
-		prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalPropMV", "Sample Decimal multi-value Property");
-		propertyDefinitions.put(prop3.getId(), prop3);
-
-		PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
-				"Sample Html Property");
-		propertyDefinitions.put(prop4.getId(), prop4);
-
-		prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlPropMV", "Sample Html multi-value Property");
-		propertyDefinitions.put(prop4.getId(), prop4);
-
-		PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property");
-		propertyDefinitions.put(prop5.getId(), prop5);
-
-		prop5 = PropertyCreationHelper.createIdDefinition("IdPropMV", "Sample Id Html multi-value Property");
-		propertyDefinitions.put(prop5.getId(), prop5);
-
-		PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
-				"Sample Int Property");
-		propertyDefinitions.put(prop6.getId(), prop6);
-
-		prop6 = PropertyCreationHelper.createIntegerDefinition("IntPropMV", "Sample Int multi-value Property");
-		propertyDefinitions.put(prop6.getId(), prop6);
-
-		PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
-				"Sample String Property");
-		propertyDefinitions.put(prop7.getId(), prop7);
-
-		PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp", "Sample Uri Property");
-		propertyDefinitions.put(prop8.getId(), prop8);
-
-		prop8 = PropertyCreationHelper.createUriDefinition("UriPropMV", "Sample Uri multi-value Property");
-		propertyDefinitions.put(prop8.getId(), prop8);
-
-		PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-				"Sample Pick List Property");
-
-		PropertyCreationHelper.addElemToPicklist(prop9, "red");
-		PropertyCreationHelper.addElemToPicklist(prop9, "green");
-		PropertyCreationHelper.addElemToPicklist(prop9, "blue");
-		PropertyCreationHelper.addElemToPicklist(prop9, "black");
-		PropertyCreationHelper.setDefaultValue(prop9, "blue");
-
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	private static InMemoryDocumentTypeDefinition buildTypeWithStringProp() {
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(STRING_DOC_TYPE,
-				"String Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-
-		PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE,
-				"Sample String Property");
-		propDef.setMaxLength(BigInteger.valueOf(10));
-		propertyDefinitions.put(propDef.getId(), propDef);
-
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	private static InMemoryDocumentTypeDefinition buildTypeWithIntegerProp() {
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(INT_DOC_TYPE,
-				"Int Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-
-		PropertyIntegerDefinitionImpl propDef = PropertyCreationHelper.createIntegerDefinition(INT_PROP_TYPE,
-				"Sample Integer Property");
-		propDef.setMinValue(BigInteger.valueOf(-1));
-		propDef.setMaxValue(BigInteger.valueOf(1));
-		propertyDefinitions.put(propDef.getId(), propDef);
-
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	private static InMemoryDocumentTypeDefinition buildTypeWithDecimalProp() {
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(DECIMAL_DOC_TYPE,
-				"Decimal Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-
-		PropertyDecimalDefinitionImpl propDef = PropertyCreationHelper.createDecimalDefinition(DECIMAL_PROP_TYPE,
-				"Sample Decimal Property");
-		propDef.setMinValue(BigDecimal.valueOf(-1.5));
-		propDef.setMaxValue(BigDecimal.valueOf(1.5));
-		propertyDefinitions.put(propDef.getId(), propDef);
-
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	public static InMemoryDocumentTypeDefinition buildTypeWithPickList(Cardinality cardinality) {
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(PICK_LIST_DOC_TYPE,
-				"PickList Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-
-		PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-				"Sample PickList (choice) Property");
-		List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-		ChoiceImpl<String> elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("red"));
-		elem.setDisplayName("Red");
-		choiceList.add(elem);
-		elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("green"));
-		elem.setDisplayName("Green");
-		choiceList.add(elem);
-		elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("blue"));
-		elem.setDisplayName("Blue");
-		choiceList.add(elem);
-		elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("black"));
-		elem.setDisplayName("Black");
-		choiceList.add(elem);
-		propDef.setChoices(choiceList);
-		propDef.setDefaultValue(Collections.singletonList("blue"));
-		propDef.setCardinality(cardinality);
-		propertyDefinitions.put(propDef.getId(), propDef);
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	public static InMemoryDocumentTypeDefinition buildTypeWithMultiPickList() {
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(PICK_LIST_DOC_TYPE,
-				"PickList Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-
-		PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-				"Sample PickList (choice) Property");
-		List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-		ChoiceImpl<String> elem = new ChoiceImpl<String>();
-		List<String> valueList = new ArrayList<String>();
-		valueList.add("red");
-		valueList.add("green");
-		valueList.add("blue");
-		elem.setValue(valueList);
-		elem.setDisplayName("RGB");
-		choiceList.add(elem);
-
-		elem = new ChoiceImpl<String>();
-		valueList = new ArrayList<String>();
-		valueList.add("cyan");
-		valueList.add("magenta");
-		valueList.add("yellow");
-		valueList.add("black");
-		elem.setValue(valueList);
-		elem.setDisplayName("CMYK");
-		choiceList.add(elem);
-
-		propDef.setChoices(choiceList);
-		// propDef.setDefaultValue(...);
-		propDef.setCardinality(Cardinality.MULTI);
-		propertyDefinitions.put(propDef.getId(), propDef);
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	public static InMemoryDocumentTypeDefinition buildTypeWithHierachicalPickList(Cardinality cardinality) {
-		InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(PICK_LIST_DOC_TYPE,
-				"PickList Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-
-		// Create a two-level pick list with an outer property list state and an
-		// inner
-		// list of city
-		PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
-				"Sample PickList (choice) Property");
-		List<Choice<String>> choiceListOuter = new ArrayList<Choice<String>>();
-
-		ChoiceImpl<String> elemOuter = new ChoiceImpl<String>();
-		elemOuter.setDisplayName("Bavaria");
-		List<Choice<String>> choiceListInner = new ArrayList<Choice<String>>();
-		ChoiceImpl<String> elemInner = new ChoiceImpl<String>();
-		elemInner.setDisplayName("Munich");
-		elemInner.setValue(Collections.singletonList("munich"));
-		choiceListInner.add(elemInner);
-		elemInner = new ChoiceImpl<String>();
-		elemInner.setDisplayName("Ingolstadt");
-		elemInner.setValue(Collections.singletonList("ingolstadt"));
-		choiceListInner.add(elemInner);
-		elemInner = new ChoiceImpl<String>();
-		elemInner.setDisplayName("Passau");
-		elemInner.setValue(Collections.singletonList("passau"));
-		choiceListInner.add(elemInner);
-		elemOuter.setChoice(choiceListInner);
-		choiceListOuter.add(elemOuter);
-
-		elemOuter = new ChoiceImpl<String>();
-		elemOuter.setDisplayName("Baden Wurtemberg");
-		choiceListInner = new ArrayList<Choice<String>>();
-		elemInner = new ChoiceImpl<String>();
-		elemInner.setDisplayName("Stuttgart");
-		elemInner.setValue(Collections.singletonList("stuttgart"));
-		choiceListInner.add(elemInner);
-		elemInner = new ChoiceImpl<String>();
-		elemInner.setDisplayName("Karlsruhe");
-		elemInner.setValue(Collections.singletonList("karlsruhe"));
-		choiceListInner.add(elemInner);
-		elemInner = new ChoiceImpl<String>();
-		elemInner.setDisplayName("Walldorf");
-		elemInner.setValue(Collections.singletonList("walldorf"));
-		choiceListInner.add(elemInner);
-		elemOuter.setChoice(choiceListInner);
-		choiceListOuter.add(elemOuter);
-
-		propDef.setChoices(choiceListOuter);
-		propDef.setCardinality(cardinality);
-		propertyDefinitions.put(propDef.getId(), propDef);
-		cmisType.setPropertyDefinitions(propertyDefinitions);
-
-		return cmisType;
-	}
-
-	private static TypeManager buildInheritedTypes() {
-
-		TypeManager tm = new TypeManager();
-		tm.initTypeSystem(null); // create CMIS default types
-
-		// create super type
-		InMemoryDocumentTypeDefinition cmisSuperType = new InMemoryDocumentTypeDefinition(DOC_TYPE_SUPER,
-				"Document Type With a child", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-		PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE_SUPER,
-				"Sample String Property SuperType");
-		propDef.setMaxLength(BigInteger.valueOf(10));
-		propertyDefinitions.put(propDef.getId(), propDef);
-		cmisSuperType.setPropertyDefinitions(propertyDefinitions);
-
-		// create sub type
-		InMemoryDocumentTypeDefinition cmisSubType = new InMemoryDocumentTypeDefinition(DOC_TYPE_SUB,
-				"Document Type With a parent", cmisSuperType);
-
-		propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		// create a String property definition
-		propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE_SUB, "Sample String Property Subtype");
-		propDef.setMaxLength(BigInteger.valueOf(20));
-		propertyDefinitions.put(propDef.getId(), propDef);
-		cmisSubType.setPropertyDefinitions(propertyDefinitions);
+    private static final String MY_DOC_TYPE = "MyDocType1";
+    private static final String STRING_DOC_TYPE = "StringDocType";
+    private static final String STRING_PROP_TYPE = "StringProp";
+    private static final String INT_DOC_TYPE = "IntegerDocType";
+    private static final String INT_PROP_TYPE = "IntegerProp";
+    private static final String DECIMAL_DOC_TYPE = "DecimalDocType";
+    private static final String DECIMAL_PROP_TYPE = "DecimalProp";
+    private static final String PICK_LIST_DOC_TYPE = "PickListDocType";
+    private static final String PICK_LIST_PROP_DEF = "PickListProp";
+    private static final String DOC_TYPE_SUPER = "SuperDocType";
+    private static final String DOC_TYPE_SUB = "SubDocType";
+    private static final String STRING_PROP_TYPE_SUPER = "StringPropSuper";
+    private static final String STRING_PROP_TYPE_SUB = "StringPropSub";
+    private static final BindingsObjectFactory FACTORY = new BindingsObjectFactoryImpl();
+
+    @Before
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    @After
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    private List<PropertyData<?>> createPropertiesWithNameAndTypeId(String typeId) {
+        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+        properties.add(FACTORY.createPropertyIdData(PropertyIds.NAME, "Document_1"));
+        properties.add(FACTORY.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, typeId));
+        return properties;
+    }
+
+    @Test
+    public void testMandatoryPropertyValidation() {
+        // create properties in the same way as we would pass them to a
+        // createDocument call
+        // of the ObjectService
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(MY_DOC_TYPE);
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // validate properties according to type
+        TypeDefinition typeDef = buildMyType();
+
+        // try missing mandatory Boolean property
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if mandatory property is missing.");
+        } catch (CmisConstraintException e) {
+            assertTrue(e.getMessage().contains("mandatory properties are missing"));
+        }
+
+        // add missing mandatory Boolean property and try again
+        properties.add(FACTORY.createPropertyBooleanData("BooleanProp", true));
+        props = FACTORY.createPropertiesData(properties);
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (CmisConstraintException e) {
+            fail("TypeValidator should not throw CMISConstraintException if mandatory property is present.");
+        }
+    }
+
+    @Test
+    public void testStringPropertyValidation() {
+        TypeDefinition typeDef = buildTypeWithStringProp(); // we only have one
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(STRING_DOC_TYPE);
+        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE,
+                "A String property with quite a long value exceeding the max. length."));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try exceeding string length
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(STRING_DOC_TYPE);
+        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE, "short val"));
+        props = FACTORY.createPropertiesData(properties);
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw exception if string length is valid" + e);
+        }
+    }
+
+    @Test
+    public void testIntegerPropertyValidation() {
+
+        TypeDefinition typeDef = buildTypeWithIntegerProp();
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(INT_DOC_TYPE);
+        properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(-100))); // try
+        // wrong
+        // value
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try exceeding string length
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if integer value is out of range");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(INT_DOC_TYPE);
+        properties.add(FACTORY.createPropertyIntegerData(INT_PROP_TYPE, BigInteger.valueOf(1))); // try
+        // correct
+        // value
+        props = FACTORY.createPropertiesData(properties);
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw exception if integer value is valid. " + e);
+        }
+
+    }
+
+    @Test
+    public void testDecimalPropertyValidation() {
+        TypeDefinition typeDef = buildTypeWithDecimalProp();
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(DECIMAL_DOC_TYPE);
+        properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(-11.11)));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try exceeding string length
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if decimal value is out of range");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(DECIMAL_DOC_TYPE);
+        properties.add(FACTORY.createPropertyDecimalData(DECIMAL_PROP_TYPE, BigDecimal.valueOf(1.23)));
+        props = FACTORY.createPropertiesData(properties);
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw exception if decimal value is valid. " + e);
+        }
+    }
+
+    @Test
+    public void testPickListValidationSingleValue() {
+        TypeDefinition typeDef = buildTypeWithPickList(Cardinality.SINGLE);
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "pink"));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try wrong value
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "blue"));
+        props = FACTORY.createPropertiesData(properties);
+
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
+                    + e);
+        }
+    }
+
+    @Test
+    public void testPickListValidationMultiValue() {
+        TypeDefinition typeDef = buildTypeWithPickList(Cardinality.MULTI);
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        List<String> propValues = new ArrayList<String>();
+        propValues.add("red");
+        propValues.add("pink");
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try wrong value
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        propValues = new ArrayList<String>();
+        propValues.add("red");
+        propValues.add("green");
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
+        props = FACTORY.createPropertiesData(properties);
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
+                    + e);
+        }
+    }
+
+    @Test
+    public void testPickListValidationMultiUsingMultipleValueLists() {
+        TypeDefinition typeDef = buildTypeWithMultiPickList();
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        List<String> propValues = new ArrayList<String>();
+        propValues.add("red");
+        propValues.add("green");
+        propValues.add("pink");
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try wrong value
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        propValues = new ArrayList<String>();
+        propValues.add("red");
+        propValues.add("green");
+        propValues.add("blue");
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
+        props = FACTORY.createPropertiesData(properties);
+
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
+                    + e);
+        }
+    }
+
+    @Test
+    public void testHierachicalPickListValidationSingleValue() {
+        TypeDefinition typeDef = buildTypeWithHierachicalPickList(Cardinality.SINGLE);
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "frankfurt"));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try wrong value
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, "munich"));
+        props = FACTORY.createPropertiesData(properties);
+
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
+                    + e);
+        }
+    }
+
+    @Test
+    public void testHierachicalPickListValidationMultiValue() {
+        TypeDefinition typeDef = buildTypeWithHierachicalPickList(Cardinality.MULTI);
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        List<String> propValues = new ArrayList<String>();
+        propValues.add("stuttgart");
+        propValues.add("hintertupfingen");
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try wrong value
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+            fail("TypeValidator should throw CMISConstraintException if choice value is not in list of valid values");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(PICK_LIST_DOC_TYPE);
+        propValues = new ArrayList<String>();
+        propValues.add("munich");
+        propValues.add("walldorf");
+        properties.add(FACTORY.createPropertyStringData(PICK_LIST_PROP_DEF, propValues));
+        props = FACTORY.createPropertiesData(properties);
+
+        try {
+            TypeValidator.validateProperties(typeDef, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw CMISConstraintException if choice value is in list of valid values"
+                    + e);
+        }
+    }
+
+    @Test
+    public void testInheritedPropertyValidation() {
+        TypeManager tm = buildInheritedTypes();
+        TypeDefinition superType = tm.getTypeById(DOC_TYPE_SUPER).getTypeDefinition();
+        TypeDefinition subType = tm.getTypeById(DOC_TYPE_SUB).getTypeDefinition();
+        ;
+
+        List<PropertyData<?>> properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
+        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUB,
+                "A String property with quite a long value exceeding the max. length."));
+        Properties props = FACTORY.createPropertiesData(properties);
+
+        // try exceeding string length on org property
+        try {
+            TypeValidator.validateProperties(superType, props, true);
+            fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        // try exceeding string length on inherited property
+        properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
+        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUPER,
+                "A String property with quite a long value exceeding the max. length."));
+        props = FACTORY.createPropertiesData(properties);
+
+        // try exceeding string length
+        try {
+            TypeValidator.validateProperties(subType, props, true);
+            fail("TypeValidator should throw CMISConstraintException if max string length is exceeded");
+        } catch (Exception e) {
+            assertTrue(e instanceof CmisConstraintException);
+        }
+
+        properties = createPropertiesWithNameAndTypeId(DOC_TYPE_SUB);
+        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUPER, "super val"));
+        properties.add(FACTORY.createPropertyStringData(STRING_PROP_TYPE_SUB, "sub val"));
+        props = FACTORY.createPropertiesData(properties);
+        try {
+            TypeValidator.validateProperties(subType, props, true);
+        } catch (Exception e) {
+            fail("TypeValidator should not throw exception if string length is valid" + e);
+        }
+    }
+
+    /**
+     * create sample type
+     * 
+     * @return type definition of sample type
+     */
+    private static InMemoryDocumentTypeDefinition buildMyType() {
+        // always add CMIS default types
+
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(MY_DOC_TYPE,
+                "Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        // create a boolean property definition
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+
+        PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
+                "Sample Boolean Property");
+        ((PropertyBooleanDefinitionImpl) prop).setIsRequired(true);
+        propertyDefinitions.put(prop.getId(), prop);
+
+        prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
+                "Sample Boolean multi-value Property");
+        propertyDefinitions.put(prop.getId(), prop);
+
+        PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
+                "Sample DateTime Property");
+        propertyDefinitions.put(prop2.getId(), prop2);
+
+        prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
+                "Sample DateTime multi-value Property");
+        propertyDefinitions.put(prop2.getId(), prop2);
+
+        PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
+                "Sample Decimal Property");
+        propertyDefinitions.put(prop3.getId(), prop3);
+
+        prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalPropMV", "Sample Decimal multi-value Property");
+        propertyDefinitions.put(prop3.getId(), prop3);
+
+        PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
+                "Sample Html Property");
+        propertyDefinitions.put(prop4.getId(), prop4);
+
+        prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlPropMV", "Sample Html multi-value Property");
+        propertyDefinitions.put(prop4.getId(), prop4);
+
+        PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property");
+        propertyDefinitions.put(prop5.getId(), prop5);
+
+        prop5 = PropertyCreationHelper.createIdDefinition("IdPropMV", "Sample Id Html multi-value Property");
+        propertyDefinitions.put(prop5.getId(), prop5);
+
+        PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
+                "Sample Int Property");
+        propertyDefinitions.put(prop6.getId(), prop6);
+
+        prop6 = PropertyCreationHelper.createIntegerDefinition("IntPropMV", "Sample Int multi-value Property");
+        propertyDefinitions.put(prop6.getId(), prop6);
+
+        PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
+                "Sample String Property");
+        propertyDefinitions.put(prop7.getId(), prop7);
+
+        PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp", "Sample Uri Property");
+        propertyDefinitions.put(prop8.getId(), prop8);
+
+        prop8 = PropertyCreationHelper.createUriDefinition("UriPropMV", "Sample Uri multi-value Property");
+        propertyDefinitions.put(prop8.getId(), prop8);
+
+        PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
+                "Sample Pick List Property");
+
+        PropertyCreationHelper.addElemToPicklist(prop9, "red");
+        PropertyCreationHelper.addElemToPicklist(prop9, "green");
+        PropertyCreationHelper.addElemToPicklist(prop9, "blue");
+        PropertyCreationHelper.addElemToPicklist(prop9, "black");
+        PropertyCreationHelper.setDefaultValue(prop9, "blue");
+
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    private static InMemoryDocumentTypeDefinition buildTypeWithStringProp() {
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(STRING_DOC_TYPE,
+                "String Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+
+        PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE,
+                "Sample String Property");
+        propDef.setMaxLength(BigInteger.valueOf(10));
+        propertyDefinitions.put(propDef.getId(), propDef);
+
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    private static InMemoryDocumentTypeDefinition buildTypeWithIntegerProp() {
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(INT_DOC_TYPE,
+                "Int Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+
+        PropertyIntegerDefinitionImpl propDef = PropertyCreationHelper.createIntegerDefinition(INT_PROP_TYPE,
+                "Sample Integer Property");
+        propDef.setMinValue(BigInteger.valueOf(-1));
+        propDef.setMaxValue(BigInteger.valueOf(1));
+        propertyDefinitions.put(propDef.getId(), propDef);
+
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    private static InMemoryDocumentTypeDefinition buildTypeWithDecimalProp() {
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(DECIMAL_DOC_TYPE,
+                "Decimal Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+
+        PropertyDecimalDefinitionImpl propDef = PropertyCreationHelper.createDecimalDefinition(DECIMAL_PROP_TYPE,
+                "Sample Decimal Property");
+        propDef.setMinValue(BigDecimal.valueOf(-1.5));
+        propDef.setMaxValue(BigDecimal.valueOf(1.5));
+        propertyDefinitions.put(propDef.getId(), propDef);
+
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    public static InMemoryDocumentTypeDefinition buildTypeWithPickList(Cardinality cardinality) {
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(PICK_LIST_DOC_TYPE,
+                "PickList Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+
+        PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
+                "Sample PickList (choice) Property");
+        List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
+        ChoiceImpl<String> elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("red"));
+        elem.setDisplayName("Red");
+        choiceList.add(elem);
+        elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("green"));
+        elem.setDisplayName("Green");
+        choiceList.add(elem);
+        elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("blue"));
+        elem.setDisplayName("Blue");
+        choiceList.add(elem);
+        elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("black"));
+        elem.setDisplayName("Black");
+        choiceList.add(elem);
+        propDef.setChoices(choiceList);
+        propDef.setDefaultValue(Collections.singletonList("blue"));
+        propDef.setCardinality(cardinality);
+        propertyDefinitions.put(propDef.getId(), propDef);
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    public static InMemoryDocumentTypeDefinition buildTypeWithMultiPickList() {
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(PICK_LIST_DOC_TYPE,
+                "PickList Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+
+        PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
+                "Sample PickList (choice) Property");
+        List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
+        ChoiceImpl<String> elem = new ChoiceImpl<String>();
+        List<String> valueList = new ArrayList<String>();
+        valueList.add("red");
+        valueList.add("green");
+        valueList.add("blue");
+        elem.setValue(valueList);
+        elem.setDisplayName("RGB");
+        choiceList.add(elem);
+
+        elem = new ChoiceImpl<String>();
+        valueList = new ArrayList<String>();
+        valueList.add("cyan");
+        valueList.add("magenta");
+        valueList.add("yellow");
+        valueList.add("black");
+        elem.setValue(valueList);
+        elem.setDisplayName("CMYK");
+        choiceList.add(elem);
+
+        propDef.setChoices(choiceList);
+        // propDef.setDefaultValue(...);
+        propDef.setCardinality(Cardinality.MULTI);
+        propertyDefinitions.put(propDef.getId(), propDef);
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    public static InMemoryDocumentTypeDefinition buildTypeWithHierachicalPickList(Cardinality cardinality) {
+        InMemoryDocumentTypeDefinition cmisType = new InMemoryDocumentTypeDefinition(PICK_LIST_DOC_TYPE,
+                "PickList Document Type for Validation", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+
+        // Create a two-level pick list with an outer property list state and an
+        // inner
+        // list of city
+        PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(PICK_LIST_PROP_DEF,
+                "Sample PickList (choice) Property");
+        List<Choice<String>> choiceListOuter = new ArrayList<Choice<String>>();
+
+        ChoiceImpl<String> elemOuter = new ChoiceImpl<String>();
+        elemOuter.setDisplayName("Bavaria");
+        List<Choice<String>> choiceListInner = new ArrayList<Choice<String>>();
+        ChoiceImpl<String> elemInner = new ChoiceImpl<String>();
+        elemInner.setDisplayName("Munich");
+        elemInner.setValue(Collections.singletonList("munich"));
+        choiceListInner.add(elemInner);
+        elemInner = new ChoiceImpl<String>();
+        elemInner.setDisplayName("Ingolstadt");
+        elemInner.setValue(Collections.singletonList("ingolstadt"));
+        choiceListInner.add(elemInner);
+        elemInner = new ChoiceImpl<String>();
+        elemInner.setDisplayName("Passau");
+        elemInner.setValue(Collections.singletonList("passau"));
+        choiceListInner.add(elemInner);
+        elemOuter.setChoice(choiceListInner);
+        choiceListOuter.add(elemOuter);
+
+        elemOuter = new ChoiceImpl<String>();
+        elemOuter.setDisplayName("Baden Wurtemberg");
+        choiceListInner = new ArrayList<Choice<String>>();
+        elemInner = new ChoiceImpl<String>();
+        elemInner.setDisplayName("Stuttgart");
+        elemInner.setValue(Collections.singletonList("stuttgart"));
+        choiceListInner.add(elemInner);
+        elemInner = new ChoiceImpl<String>();
+        elemInner.setDisplayName("Karlsruhe");
+        elemInner.setValue(Collections.singletonList("karlsruhe"));
+        choiceListInner.add(elemInner);
+        elemInner = new ChoiceImpl<String>();
+        elemInner.setDisplayName("Walldorf");
+        elemInner.setValue(Collections.singletonList("walldorf"));
+        choiceListInner.add(elemInner);
+        elemOuter.setChoice(choiceListInner);
+        choiceListOuter.add(elemOuter);
+
+        propDef.setChoices(choiceListOuter);
+        propDef.setCardinality(cardinality);
+        propertyDefinitions.put(propDef.getId(), propDef);
+        cmisType.setPropertyDefinitions(propertyDefinitions);
+
+        return cmisType;
+    }
+
+    private static TypeManager buildInheritedTypes() {
+
+        TypeManager tm = new TypeManager();
+        tm.initTypeSystem(null); // create CMIS default types
+
+        // create super type
+        InMemoryDocumentTypeDefinition cmisSuperType = new InMemoryDocumentTypeDefinition(DOC_TYPE_SUPER,
+                "Document Type With a child", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+        PropertyStringDefinitionImpl propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE_SUPER,
+                "Sample String Property SuperType");
+        propDef.setMaxLength(BigInteger.valueOf(10));
+        propertyDefinitions.put(propDef.getId(), propDef);
+        cmisSuperType.setPropertyDefinitions(propertyDefinitions);
+
+        // create sub type
+        InMemoryDocumentTypeDefinition cmisSubType = new InMemoryDocumentTypeDefinition(DOC_TYPE_SUB,
+                "Document Type With a parent", cmisSuperType);
+
+        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        // create a String property definition
+        propDef = PropertyCreationHelper.createStringDefinition(STRING_PROP_TYPE_SUB, "Sample String Property Subtype");
+        propDef.setMaxLength(BigInteger.valueOf(20));
+        propertyDefinitions.put(propDef.getId(), propDef);
+        cmisSubType.setPropertyDefinitions(propertyDefinitions);
 
-		tm.addTypeDefinition(cmisSuperType);
-		tm.addTypeDefinition(cmisSubType);
+        tm.addTypeDefinition(cmisSuperType);
+        tm.addTypeDefinition(cmisSubType);
 
-		return tm;
-	}
+        return tm;
+    }
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java?rev=936938&r1=936937&r2=936938&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/UnitTestTypeSystemCreator.java Thu Apr 22 16:27:57 2010
@@ -46,238 +46,238 @@ import org.apache.chemistry.opencmis.inm
 import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
 
 public class UnitTestTypeSystemCreator implements TypeCreator {
-	static public List<TypeDefinition> singletonTypes = buildTypesList();
-	public static final String COMPLEX_TYPE = "ComplexType";
-	public static final String TOPLEVEL_TYPE = "DocumentTopLevel";
-	public static final String LEVEL1_TYPE = "DocumentLevel1";;
-	public static final String LEVEL2_TYPE = "DocumentLevel2";
-	public static final String VERSION_DOCUMENT_TYPE_ID = "MyVersionedType";
-	public static final String VERSION_PROPERTY_ID = "StringProp";
-
-	/**
-	 * in the public interface of this class we return the singleton containing
-	 * the required types for testing
-	 */
-	public List<TypeDefinition> createTypesList() {
-		return singletonTypes;
-	}
-
-	public static List<TypeDefinition> getTypesList() {
-		return singletonTypes;
-	}
-
-	static public TypeDefinition getTypeById(String typeId) {
-		for (TypeDefinition typeDef : singletonTypes)
-			if (typeDef.getId().equals(typeId))
-				return typeDef;
-		return null;
-	}
-
-	/**
-	 * create root types and a collection of sample types
-	 * 
-	 * @return typesMap map filled with created types
-	 */
-	private static List<TypeDefinition> buildTypesList() {
-		// always add CMIS default types
-		List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-		InMemoryDocumentTypeDefinition cmisType1 = new InMemoryDocumentTypeDefinition("MyDocType1",
-				"My Type 1 Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-		typesList.add(cmisType1);
-
-		InMemoryDocumentTypeDefinition cmisType2 = new InMemoryDocumentTypeDefinition("MyDocType2",
-				"My Type 2 Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-		typesList.add(cmisType2);
-
-		InMemoryDocumentTypeDefinition cmisType11 = new InMemoryDocumentTypeDefinition("MyDocType1.1",
-				"My Type 3 Level 2", cmisType1);
-		typesList.add(cmisType11);
-
-		InMemoryDocumentTypeDefinition cmisType111 = new InMemoryDocumentTypeDefinition("MyDocType1.1.1",
-				"My Type 4 Level 3", cmisType11);
-		typesList.add(cmisType111);
-
-		InMemoryDocumentTypeDefinition cmisType112 = new InMemoryDocumentTypeDefinition("MyDocType1.1.2",
-				"My Type 5 Level 3", cmisType11);
-		typesList.add(cmisType112);
-
-		InMemoryDocumentTypeDefinition cmisType12 = new InMemoryDocumentTypeDefinition("MyDocType1.2",
-				"My Type 6 Level 2", cmisType1);
-		typesList.add(cmisType12);
-
-		InMemoryDocumentTypeDefinition cmisType21 = new InMemoryDocumentTypeDefinition("MyDocType2.1",
-				"My Type 7 Level 2", cmisType2);
-		typesList.add(cmisType21);
-
-		InMemoryDocumentTypeDefinition cmisType22 = new InMemoryDocumentTypeDefinition("MyDocType2.2",
-				"My Type 8 Level 2", cmisType2);
-		typesList.add(cmisType22);
-		InMemoryDocumentTypeDefinition cmisType23 = new InMemoryDocumentTypeDefinition("MyDocType2.3",
-				"My Type 9 Level 2", cmisType2);
-		typesList.add(cmisType23);
-		InMemoryDocumentTypeDefinition cmisType24 = new InMemoryDocumentTypeDefinition("MyDocType2.4",
-				"My Type 10 Level 2", cmisType2);
-		typesList.add(cmisType24);
-		InMemoryDocumentTypeDefinition cmisType25 = new InMemoryDocumentTypeDefinition("MyDocType2.5",
-				"My Type 11 Level 2", cmisType2);
-		typesList.add(cmisType25);
-
-		InMemoryDocumentTypeDefinition cmisType26 = new InMemoryDocumentTypeDefinition("MyDocType2.6",
-				"My Type 12 Level 2", cmisType2);
-		typesList.add(cmisType26);
-		InMemoryDocumentTypeDefinition cmisType27 = new InMemoryDocumentTypeDefinition("MyDocType2.7",
-				"My Type 13 Level 2", cmisType2);
-		typesList.add(cmisType27);
-		InMemoryDocumentTypeDefinition cmisType28 = new InMemoryDocumentTypeDefinition("MyDocType2.8",
-				"My Type 14 Level 2", cmisType2);
-		typesList.add(cmisType28);
-		InMemoryDocumentTypeDefinition cmisType29 = new InMemoryDocumentTypeDefinition("MyDocType2.9",
-				"My Type 15 Level 2", cmisType2);
-		typesList.add(cmisType29);
-
-		// create a complex type with properties
-		InMemoryDocumentTypeDefinition cmisComplexType = new InMemoryDocumentTypeDefinition(COMPLEX_TYPE,
-				"Complex type with properties, Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		// create a boolean property definition
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-		PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
-				"Sample Boolean Property");
-		propertyDefinitions.put(prop.getId(), prop);
-
-		prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
-				"Sample Boolean multi-value Property");
-		propertyDefinitions.put(prop.getId(), prop);
-
-		PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
-				"Sample DateTime Property");
-		propertyDefinitions.put(prop2.getId(), prop2);
-
-		prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
-				"Sample DateTime multi-value Property");
-		propertyDefinitions.put(prop2.getId(), prop2);
-
-		PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
-				"Sample Decimal Property");
-		propertyDefinitions.put(prop3.getId(), prop3);
-
-		prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalPropMV", "Sample Decimal multi-value Property");
-		propertyDefinitions.put(prop3.getId(), prop3);
-
-		PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
-				"Sample Html Property");
-		propertyDefinitions.put(prop4.getId(), prop4);
-
-		prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlPropMV", "Sample Html multi-value Property");
-		propertyDefinitions.put(prop4.getId(), prop4);
-
-		PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property");
-		propertyDefinitions.put(prop5.getId(), prop5);
-
-		prop5 = PropertyCreationHelper.createIdDefinition("IdPropMV", "Sample Id Html multi-value Property");
-		propertyDefinitions.put(prop5.getId(), prop5);
-
-		PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
-				"Sample Int Property");
-		propertyDefinitions.put(prop6.getId(), prop6);
-
-		prop6 = PropertyCreationHelper.createIntegerDefinition("IntPropMV", "Sample Int multi-value Property");
-		propertyDefinitions.put(prop6.getId(), prop6);
-
-		PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
-				"Sample String Property");
-		propertyDefinitions.put(prop7.getId(), prop7);
-
-		PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp", "Sample Uri Property");
-		propertyDefinitions.put(prop8.getId(), prop8);
-
-		prop8 = PropertyCreationHelper.createUriDefinition("UriPropMV", "Sample Uri multi-value Property");
-		propertyDefinitions.put(prop8.getId(), prop8);
-
-		PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition("PickListProp",
-				"Sample Pick List Property");
-		List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-		ChoiceImpl<String> elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("red"));
-		choiceList.add(elem);
-		elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("green"));
-		choiceList.add(elem);
-		elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("blue"));
-		choiceList.add(elem);
-		elem = new ChoiceImpl<String>();
-		elem.setValue(Collections.singletonList("black"));
-		choiceList.add(elem);
-		prop9.setChoices(choiceList);
-		prop9.setDefaultValue(Collections.singletonList("blue"));
-
-		/*
-		 * try short form: / PropertyCreationHelper.addElemToPicklist(prop9,
-		 * "red"); PropertyCreationHelper.addElemToPicklist(prop9, "green");
-		 * PropertyCreationHelper.addElemToPicklist(prop9, "blue");
-		 * PropertyCreationHelper.addElemToPicklist(prop9, "black");
-		 * PropertyCreationHelper.setDefaultValue(prop9, "blue"); /
-		 */
-
-		cmisComplexType.addCustomPropertyDefinitions(propertyDefinitions);
-
-		// add type to types collection
-		typesList.add(cmisComplexType);
-
-		// create a type hierarchy with inherited properties
-		InMemoryDocumentTypeDefinition cmisDocTypeTopLevel = new InMemoryDocumentTypeDefinition(TOPLEVEL_TYPE,
-				"Document type with properties, Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		InMemoryDocumentTypeDefinition cmisDocTypeLevel1 = new InMemoryDocumentTypeDefinition(LEVEL1_TYPE,
-				"Document type with inherited properties, Level 2", cmisDocTypeTopLevel);
-
-		InMemoryDocumentTypeDefinition cmisDocTypeLevel2 = new InMemoryDocumentTypeDefinition(LEVEL2_TYPE,
-				"Document type with inherited properties, Level 3", cmisDocTypeLevel1);
-
-		propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		PropertyStringDefinitionImpl propTop = PropertyCreationHelper.createStringDefinition("StringPropTopLevel",
-				"Sample String Property");
-		propertyDefinitions.put(propTop.getId(), propTop);
-		cmisDocTypeTopLevel.addCustomPropertyDefinitions(propertyDefinitions);
-
-		propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		PropertyStringDefinitionImpl propLevel1 = PropertyCreationHelper.createStringDefinition("StringPropLevel1",
-				"String Property Level 1");
-		propertyDefinitions.put(propLevel1.getId(), propLevel1);
-		cmisDocTypeLevel1.addCustomPropertyDefinitions(propertyDefinitions);
-
-		propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-		PropertyStringDefinitionImpl propLevel2 = PropertyCreationHelper.createStringDefinition("StringPropLevel2",
-				"String Property Level 2");
-		propertyDefinitions.put(propLevel2.getId(), propLevel2);
-		cmisDocTypeLevel2.addCustomPropertyDefinitions(propertyDefinitions);
-
-		// create a versioned type with properties
-		InMemoryDocumentTypeDefinition cmisVersionedType = new InMemoryDocumentTypeDefinition(VERSION_DOCUMENT_TYPE_ID,
-				"VersionedType", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		// create a single String property definition
-
-		propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-		PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(VERSION_PROPERTY_ID,
-				"Sample String Property");
-		propertyDefinitions.put(prop1.getId(), prop1);
-
-		cmisVersionedType.addCustomPropertyDefinitions(propertyDefinitions);
-		cmisVersionedType.setIsVersionable(true); // make it a versionable type;
-
-		// add type to types collection
-		typesList.add(cmisDocTypeTopLevel);
-		typesList.add(cmisDocTypeLevel1);
-		typesList.add(cmisDocTypeLevel2);
-		typesList.add(cmisVersionedType);
+    static public List<TypeDefinition> singletonTypes = buildTypesList();
+    public static final String COMPLEX_TYPE = "ComplexType";
+    public static final String TOPLEVEL_TYPE = "DocumentTopLevel";
+    public static final String LEVEL1_TYPE = "DocumentLevel1";;
+    public static final String LEVEL2_TYPE = "DocumentLevel2";
+    public static final String VERSION_DOCUMENT_TYPE_ID = "MyVersionedType";
+    public static final String VERSION_PROPERTY_ID = "StringProp";
+
+    /**
+     * in the public interface of this class we return the singleton containing
+     * the required types for testing
+     */
+    public List<TypeDefinition> createTypesList() {
+        return singletonTypes;
+    }
+
+    public static List<TypeDefinition> getTypesList() {
+        return singletonTypes;
+    }
+
+    static public TypeDefinition getTypeById(String typeId) {
+        for (TypeDefinition typeDef : singletonTypes)
+            if (typeDef.getId().equals(typeId))
+                return typeDef;
+        return null;
+    }
+
+    /**
+     * create root types and a collection of sample types
+     * 
+     * @return typesMap map filled with created types
+     */
+    private static List<TypeDefinition> buildTypesList() {
+        // always add CMIS default types
+        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
+
+        InMemoryDocumentTypeDefinition cmisType1 = new InMemoryDocumentTypeDefinition("MyDocType1",
+                "My Type 1 Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
+        typesList.add(cmisType1);
+
+        InMemoryDocumentTypeDefinition cmisType2 = new InMemoryDocumentTypeDefinition("MyDocType2",
+                "My Type 2 Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
+        typesList.add(cmisType2);
+
+        InMemoryDocumentTypeDefinition cmisType11 = new InMemoryDocumentTypeDefinition("MyDocType1.1",
+                "My Type 3 Level 2", cmisType1);
+        typesList.add(cmisType11);
+
+        InMemoryDocumentTypeDefinition cmisType111 = new InMemoryDocumentTypeDefinition("MyDocType1.1.1",
+                "My Type 4 Level 3", cmisType11);
+        typesList.add(cmisType111);
+
+        InMemoryDocumentTypeDefinition cmisType112 = new InMemoryDocumentTypeDefinition("MyDocType1.1.2",
+                "My Type 5 Level 3", cmisType11);
+        typesList.add(cmisType112);
+
+        InMemoryDocumentTypeDefinition cmisType12 = new InMemoryDocumentTypeDefinition("MyDocType1.2",
+                "My Type 6 Level 2", cmisType1);
+        typesList.add(cmisType12);
+
+        InMemoryDocumentTypeDefinition cmisType21 = new InMemoryDocumentTypeDefinition("MyDocType2.1",
+                "My Type 7 Level 2", cmisType2);
+        typesList.add(cmisType21);
+
+        InMemoryDocumentTypeDefinition cmisType22 = new InMemoryDocumentTypeDefinition("MyDocType2.2",
+                "My Type 8 Level 2", cmisType2);
+        typesList.add(cmisType22);
+        InMemoryDocumentTypeDefinition cmisType23 = new InMemoryDocumentTypeDefinition("MyDocType2.3",
+                "My Type 9 Level 2", cmisType2);
+        typesList.add(cmisType23);
+        InMemoryDocumentTypeDefinition cmisType24 = new InMemoryDocumentTypeDefinition("MyDocType2.4",
+                "My Type 10 Level 2", cmisType2);
+        typesList.add(cmisType24);
+        InMemoryDocumentTypeDefinition cmisType25 = new InMemoryDocumentTypeDefinition("MyDocType2.5",
+                "My Type 11 Level 2", cmisType2);
+        typesList.add(cmisType25);
+
+        InMemoryDocumentTypeDefinition cmisType26 = new InMemoryDocumentTypeDefinition("MyDocType2.6",
+                "My Type 12 Level 2", cmisType2);
+        typesList.add(cmisType26);
+        InMemoryDocumentTypeDefinition cmisType27 = new InMemoryDocumentTypeDefinition("MyDocType2.7",
+                "My Type 13 Level 2", cmisType2);
+        typesList.add(cmisType27);
+        InMemoryDocumentTypeDefinition cmisType28 = new InMemoryDocumentTypeDefinition("MyDocType2.8",
+                "My Type 14 Level 2", cmisType2);
+        typesList.add(cmisType28);
+        InMemoryDocumentTypeDefinition cmisType29 = new InMemoryDocumentTypeDefinition("MyDocType2.9",
+                "My Type 15 Level 2", cmisType2);
+        typesList.add(cmisType29);
+
+        // create a complex type with properties
+        InMemoryDocumentTypeDefinition cmisComplexType = new InMemoryDocumentTypeDefinition(COMPLEX_TYPE,
+                "Complex type with properties, Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        // create a boolean property definition
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+
+        PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
+                "Sample Boolean Property");
+        propertyDefinitions.put(prop.getId(), prop);
+
+        prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
+                "Sample Boolean multi-value Property");
+        propertyDefinitions.put(prop.getId(), prop);
+
+        PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
+                "Sample DateTime Property");
+        propertyDefinitions.put(prop2.getId(), prop2);
+
+        prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
+                "Sample DateTime multi-value Property");
+        propertyDefinitions.put(prop2.getId(), prop2);
+
+        PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
+                "Sample Decimal Property");
+        propertyDefinitions.put(prop3.getId(), prop3);
+
+        prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalPropMV", "Sample Decimal multi-value Property");
+        propertyDefinitions.put(prop3.getId(), prop3);
+
+        PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
+                "Sample Html Property");
+        propertyDefinitions.put(prop4.getId(), prop4);
+
+        prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlPropMV", "Sample Html multi-value Property");
+        propertyDefinitions.put(prop4.getId(), prop4);
+
+        PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property");
+        propertyDefinitions.put(prop5.getId(), prop5);
+
+        prop5 = PropertyCreationHelper.createIdDefinition("IdPropMV", "Sample Id Html multi-value Property");
+        propertyDefinitions.put(prop5.getId(), prop5);
+
+        PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
+                "Sample Int Property");
+        propertyDefinitions.put(prop6.getId(), prop6);
+
+        prop6 = PropertyCreationHelper.createIntegerDefinition("IntPropMV", "Sample Int multi-value Property");
+        propertyDefinitions.put(prop6.getId(), prop6);
+
+        PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
+                "Sample String Property");
+        propertyDefinitions.put(prop7.getId(), prop7);
+
+        PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp", "Sample Uri Property");
+        propertyDefinitions.put(prop8.getId(), prop8);
+
+        prop8 = PropertyCreationHelper.createUriDefinition("UriPropMV", "Sample Uri multi-value Property");
+        propertyDefinitions.put(prop8.getId(), prop8);
+
+        PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition("PickListProp",
+                "Sample Pick List Property");
+        List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
+        ChoiceImpl<String> elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("red"));
+        choiceList.add(elem);
+        elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("green"));
+        choiceList.add(elem);
+        elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("blue"));
+        choiceList.add(elem);
+        elem = new ChoiceImpl<String>();
+        elem.setValue(Collections.singletonList("black"));
+        choiceList.add(elem);
+        prop9.setChoices(choiceList);
+        prop9.setDefaultValue(Collections.singletonList("blue"));
+
+        /*
+         * try short form: / PropertyCreationHelper.addElemToPicklist(prop9,
+         * "red"); PropertyCreationHelper.addElemToPicklist(prop9, "green");
+         * PropertyCreationHelper.addElemToPicklist(prop9, "blue");
+         * PropertyCreationHelper.addElemToPicklist(prop9, "black");
+         * PropertyCreationHelper.setDefaultValue(prop9, "blue"); /
+         */
+
+        cmisComplexType.addCustomPropertyDefinitions(propertyDefinitions);
+
+        // add type to types collection
+        typesList.add(cmisComplexType);
+
+        // create a type hierarchy with inherited properties
+        InMemoryDocumentTypeDefinition cmisDocTypeTopLevel = new InMemoryDocumentTypeDefinition(TOPLEVEL_TYPE,
+                "Document type with properties, Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        InMemoryDocumentTypeDefinition cmisDocTypeLevel1 = new InMemoryDocumentTypeDefinition(LEVEL1_TYPE,
+                "Document type with inherited properties, Level 2", cmisDocTypeTopLevel);
+
+        InMemoryDocumentTypeDefinition cmisDocTypeLevel2 = new InMemoryDocumentTypeDefinition(LEVEL2_TYPE,
+                "Document type with inherited properties, Level 3", cmisDocTypeLevel1);
+
+        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        PropertyStringDefinitionImpl propTop = PropertyCreationHelper.createStringDefinition("StringPropTopLevel",
+                "Sample String Property");
+        propertyDefinitions.put(propTop.getId(), propTop);
+        cmisDocTypeTopLevel.addCustomPropertyDefinitions(propertyDefinitions);
+
+        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        PropertyStringDefinitionImpl propLevel1 = PropertyCreationHelper.createStringDefinition("StringPropLevel1",
+                "String Property Level 1");
+        propertyDefinitions.put(propLevel1.getId(), propLevel1);
+        cmisDocTypeLevel1.addCustomPropertyDefinitions(propertyDefinitions);
+
+        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+        PropertyStringDefinitionImpl propLevel2 = PropertyCreationHelper.createStringDefinition("StringPropLevel2",
+                "String Property Level 2");
+        propertyDefinitions.put(propLevel2.getId(), propLevel2);
+        cmisDocTypeLevel2.addCustomPropertyDefinitions(propertyDefinitions);
+
+        // create a versioned type with properties
+        InMemoryDocumentTypeDefinition cmisVersionedType = new InMemoryDocumentTypeDefinition(VERSION_DOCUMENT_TYPE_ID,
+                "VersionedType", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        // create a single String property definition
+
+        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+
+        PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(VERSION_PROPERTY_ID,
+                "Sample String Property");
+        propertyDefinitions.put(prop1.getId(), prop1);
+
+        cmisVersionedType.addCustomPropertyDefinitions(propertyDefinitions);
+        cmisVersionedType.setIsVersionable(true); // make it a versionable type;
+
+        // add type to types collection
+        typesList.add(cmisDocTypeTopLevel);
+        typesList.add(cmisDocTypeLevel1);
+        typesList.add(cmisDocTypeLevel2);
+        typesList.add(cmisVersionedType);
 
-		return typesList;
-	}
+        return typesList;
+    }
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java?rev=936938&r1=936937&r2=936938&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersionTestTypeSystemCreator.java Thu Apr 22 16:27:57 2010
@@ -31,57 +31,57 @@ import org.apache.chemistry.opencmis.inm
 import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
 
 public class VersionTestTypeSystemCreator implements TypeCreator {
-	static public String VERSION_TEST_DOCUMENT_TYPE_ID = "MyVersionedType";
-	static public String PROPERTY_ID = "StringProp";
-	static public List<TypeDefinition> singletonTypes = buildTypesList();
-
-	/**
-	 * in the public interface of this class we return the singleton containing
-	 * the required types for testing
-	 */
-	public List<TypeDefinition> createTypesList() {
-		return singletonTypes;
-	}
-
-	public static List<TypeDefinition> getTypesList() {
-		return singletonTypes;
-	}
-
-	static public TypeDefinition getTypeById(String typeId) {
-		for (TypeDefinition typeDef : singletonTypes)
-			if (typeDef.getId().equals(typeId))
-				return typeDef;
-		return null;
-	}
-
-	/**
-	 * create root types and a collection of sample types
-	 * 
-	 * @return typesMap map filled with created types
-	 */
-	private static List<TypeDefinition> buildTypesList() {
-		// always add CMIS default types
-		List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
-
-		// create a complex type with properties
-		InMemoryDocumentTypeDefinition cmisComplexType = new InMemoryDocumentTypeDefinition(
-				VERSION_TEST_DOCUMENT_TYPE_ID, "VersionedType", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-		// create a boolean property definition
-
-		Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-		PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(PROPERTY_ID,
-				"Sample String Property");
-		propertyDefinitions.put(prop1.getId(), prop1);
+    static public String VERSION_TEST_DOCUMENT_TYPE_ID = "MyVersionedType";
+    static public String PROPERTY_ID = "StringProp";
+    static public List<TypeDefinition> singletonTypes = buildTypesList();
+
+    /**
+     * in the public interface of this class we return the singleton containing
+     * the required types for testing
+     */
+    public List<TypeDefinition> createTypesList() {
+        return singletonTypes;
+    }
+
+    public static List<TypeDefinition> getTypesList() {
+        return singletonTypes;
+    }
+
+    static public TypeDefinition getTypeById(String typeId) {
+        for (TypeDefinition typeDef : singletonTypes)
+            if (typeDef.getId().equals(typeId))
+                return typeDef;
+        return null;
+    }
+
+    /**
+     * create root types and a collection of sample types
+     * 
+     * @return typesMap map filled with created types
+     */
+    private static List<TypeDefinition> buildTypesList() {
+        // always add CMIS default types
+        List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
+
+        // create a complex type with properties
+        InMemoryDocumentTypeDefinition cmisComplexType = new InMemoryDocumentTypeDefinition(
+                VERSION_TEST_DOCUMENT_TYPE_ID, "VersionedType", InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        // create a boolean property definition
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+
+        PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition(PROPERTY_ID,
+                "Sample String Property");
+        propertyDefinitions.put(prop1.getId(), prop1);
 
-		cmisComplexType.addCustomPropertyDefinitions(propertyDefinitions);
-		cmisComplexType.setIsVersionable(true); // make it a versionable type;
+        cmisComplexType.addCustomPropertyDefinitions(propertyDefinitions);
+        cmisComplexType.setIsVersionable(true); // make it a versionable type;
 
-		// add type to types collection
-		typesList.add(cmisComplexType);
+        // add type to types collection
+        typesList.add(cmisComplexType);
 
-		return typesList;
-	}
+        return typesList;
+    }
 
 }