AbstractPropertyData<?> property = null;
if (propDef != null) {
switch (propDef.getPropertyType()) {
case STRING:
property = new PropertyStringImpl();
((PropertyStringImpl) property).setValues(copyStringValues(values));
break;
case ID:
property = new PropertyIdImpl();
((PropertyIdImpl) property).setValues(copyStringValues(values));
break;
case BOOLEAN:
property = new PropertyBooleanImpl();
((PropertyBooleanImpl) property).setValues(copyBooleanValues(values));
break;
case INTEGER:
property = new PropertyIntegerImpl();
((PropertyIntegerImpl) property).setValues(copyIntegerValues(values));
break;
case DECIMAL:
property = new PropertyDecimalImpl();
((PropertyDecimalImpl) property).setValues(copyDecimalValues(values));
break;
case DATETIME:
property = new PropertyDateTimeImpl();
((PropertyDateTimeImpl) property).setValues(copyDateTimeValues(values));
break;
case HTML:
property = new PropertyHtmlImpl();
((PropertyHtmlImpl) property).setValues(copyStringValues(values));
break;
case URI:
property = new PropertyUriImpl();
((PropertyUriImpl) property).setValues(copyStringValues(values));
break;
default:
throw new CmisRuntimeException("Unknown property type!");
}
property.setId(id);
property.setDisplayName(propDef.getDisplayName());
property.setQueryName(propDef.getQueryName());
property.setLocalName(propDef.getLocalName());
} else {
// this else block should only be reached in rare circumstances
// it may return incorrect types
if (values == null) {
property = new PropertyStringImpl();
((PropertyStringImpl) property).setValues(null);
} else {
Object firstValue = values.get(0);
if (firstValue instanceof Boolean) {
property = new PropertyBooleanImpl();
((PropertyBooleanImpl) property).setValues(copyBooleanValues(values));
} else if (firstValue instanceof BigInteger) {
property = new PropertyIntegerImpl();
((PropertyIntegerImpl) property).setValues(copyIntegerValues(values));
} else if (firstValue instanceof BigDecimal) {
property = new PropertyDecimalImpl();
((PropertyDecimalImpl) property).setValues(copyDecimalValues(values));
} else {
property = new PropertyStringImpl();
((PropertyStringImpl) property).setValues(copyStringValues(values));
}
}
property.setId(id);