use of org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl in project iaf by ibissource.
the class CmisUtils method processProperties.
public static Properties processProperties(Element cmisElement) {
PropertiesImpl properties = new PropertiesImpl();
Element propertiesElement = XmlUtils.getFirstChildTag(cmisElement, "properties");
Iterator<Node> propertyIterator = XmlUtils.getChildTags(propertiesElement, "property").iterator();
while (propertyIterator.hasNext()) {
Element propertyElement = (Element) propertyIterator.next();
String propertyValue = XmlUtils.getStringValue(propertyElement);
String nameAttr = propertyElement.getAttribute("name");
String typeAttr = propertyElement.getAttribute("type");
PropertyType propertyType = PropertyType.STRING;
if (StringUtils.isNotEmpty(typeAttr)) {
propertyType = PropertyType.fromValue(typeAttr);
}
if (StringUtils.isEmpty(typeAttr) && nameAttr.startsWith("cmis:")) {
propertyType = PropertyType.ID;
}
boolean isNull = Boolean.parseBoolean(propertyElement.getAttribute("isNull"));
if (isNull)
propertyValue = null;
switch(propertyType) {
case ID:
properties.addProperty(new PropertyIdImpl(addStandardDefinitions(new PropertyIdDefinitionImpl(), propertyElement, propertyType), propertyValue));
break;
case STRING:
properties.addProperty(new PropertyStringImpl(addStandardDefinitions(new PropertyStringDefinitionImpl(), propertyElement, propertyType), propertyValue));
break;
case INTEGER:
BigInteger bigInt = null;
if (StringUtils.isNotEmpty(propertyValue)) {
bigInt = new BigInteger(propertyValue);
}
properties.addProperty(new PropertyIntegerImpl(addStandardDefinitions(new PropertyIntegerDefinitionImpl(), propertyElement, propertyType), bigInt));
break;
case DATETIME:
GregorianCalendar gregorian = null;
if (StringUtils.isNotEmpty(propertyValue)) {
String formatStringAttr = propertyElement.getAttribute("formatString");
String timezoneAttr = propertyElement.getAttribute("timezone");
if (StringUtils.isEmpty(formatStringAttr)) {
formatStringAttr = CmisUtils.FORMATSTRING_BY_DEFAULT;
}
DateFormat df = new SimpleDateFormat(formatStringAttr);
try {
Date date = df.parse(propertyValue);
gregorian = new GregorianCalendar();
gregorian.setTime(date);
if (StringUtils.isNotEmpty(timezoneAttr)) {
gregorian.setTimeZone(TimeZone.getTimeZone(timezoneAttr));
}
} catch (ParseException e) {
log.warn("exception parsing date [" + propertyValue + "] using formatString [" + formatStringAttr + "]", e);
}
}
properties.addProperty(new PropertyDateTimeImpl(addStandardDefinitions(new PropertyDateTimeDefinitionImpl(), propertyElement, propertyType), gregorian));
break;
case BOOLEAN:
Boolean bool = null;
if (StringUtils.isNotEmpty(propertyValue)) {
bool = Boolean.parseBoolean(propertyValue);
}
properties.addProperty(new PropertyBooleanImpl(addStandardDefinitions(new PropertyBooleanDefinitionImpl(), propertyElement, propertyType), bool));
break;
case DECIMAL:
BigDecimal decimal = null;
if (StringUtils.isNotEmpty(propertyValue)) {
decimal = new BigDecimal(propertyValue);
}
properties.addProperty(new PropertyDecimalImpl(addStandardDefinitions(new PropertyDecimalDefinitionImpl(), propertyElement, propertyType), decimal));
break;
case URI:
properties.addProperty(new PropertyUriImpl(addStandardDefinitions(new PropertyUriDefinitionImpl(), propertyElement, propertyType), propertyValue));
break;
case HTML:
properties.addProperty(new PropertyHtmlImpl(addStandardDefinitions(new PropertyHtmlDefinitionImpl(), propertyElement, propertyType), propertyValue));
break;
default:
log.warn("unparsable type [" + typeAttr + "] for property [" + propertyValue + "]");
// Skip all and continue with the next property!
continue;
}
log.debug("set property name [" + nameAttr + "] value [" + propertyValue + "]");
}
return properties;
}
use of org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalImpl in project alfresco-repository by Alfresco.
the class CMISConnector method getProperty.
@SuppressWarnings("unchecked")
private AbstractPropertyData<?> getProperty(PropertyType propType, PropertyDefinitionWrapper propDef, Serializable value) {
AbstractPropertyData<?> result = null;
switch(propType) {
case BOOLEAN:
result = new PropertyBooleanImpl();
if (value instanceof List) {
((PropertyBooleanImpl) result).setValues((List<Boolean>) value);
} else {
((PropertyBooleanImpl) result).setValue((Boolean) value);
}
break;
case DATETIME:
result = new PropertyDateTimeImpl();
if (value instanceof List) {
((PropertyDateTimeImpl) result).setValues((List<GregorianCalendar>) DefaultTypeConverter.INSTANCE.convert(GregorianCalendar.class, (List<?>) value));
} else {
((PropertyDateTimeImpl) result).setValue(DefaultTypeConverter.INSTANCE.convert(GregorianCalendar.class, value));
}
break;
case DECIMAL:
result = new PropertyDecimalImpl();
if (value instanceof List) {
((PropertyDecimalImpl) result).setValues((List<BigDecimal>) DefaultTypeConverter.INSTANCE.convert(BigDecimal.class, (List<?>) value));
} else {
((PropertyDecimalImpl) result).setValue(DefaultTypeConverter.INSTANCE.convert(BigDecimal.class, value));
}
break;
case HTML:
result = new PropertyHtmlImpl();
if (value instanceof List) {
((PropertyHtmlImpl) result).setValues((List<String>) value);
} else {
((PropertyHtmlImpl) result).setValue((String) value);
}
break;
case ID:
result = new PropertyIdImpl();
if (value instanceof List) {
((PropertyIdImpl) result).setValues((List<String>) value);
} else {
if (value instanceof NodeRef) {
((PropertyIdImpl) result).setValue(constructObjectId((NodeRef) value, null));
} else {
((PropertyIdImpl) result).setValue((String) value);
}
}
break;
case INTEGER:
result = new PropertyIntegerImpl();
if (value instanceof List) {
((PropertyIntegerImpl) result).setValues((List<BigInteger>) DefaultTypeConverter.INSTANCE.convert(BigInteger.class, (List<?>) value));
} else {
((PropertyIntegerImpl) result).setValue(DefaultTypeConverter.INSTANCE.convert(BigInteger.class, value));
}
break;
case STRING:
result = new PropertyStringImpl();
if (value instanceof List) {
((PropertyStringImpl) result).setValues((List<String>) value);
} else {
// Filter for AtomPub and Web services bindings only. Browser/json binding already encodes.
if (AlfrescoCmisServiceCall.get() != null && (CallContext.BINDING_ATOMPUB.equals(AlfrescoCmisServiceCall.get().getBinding()) || CallContext.BINDING_WEBSERVICES.equals(AlfrescoCmisServiceCall.get().getBinding()))) {
((PropertyStringImpl) result).setValue(filterXmlRestrictedCharacters((String) value));
} else {
((PropertyStringImpl) result).setValue((String) value);
}
}
break;
case URI:
result = new PropertyUriImpl();
if (value instanceof List) {
((PropertyUriImpl) result).setValues((List<String>) value);
} else {
((PropertyUriImpl) result).setValue((String) value);
}
break;
default:
throw new RuntimeException("Unknown datatype! Spec change?");
}
if (propDef != null) {
result.setId(propDef.getPropertyDefinition().getId());
result.setQueryName(propDef.getPropertyDefinition().getQueryName());
result.setDisplayName(propDef.getPropertyDefinition().getDisplayName());
result.setLocalName(propDef.getPropertyDefinition().getLocalName());
}
return result;
}
Aggregations