newProperty = endUuid(nodeData, propName);
}
else
{
PropertyDefinitionData pDef;
PropertyDefinitionDatas defs;
InternalQName[] nTypes = mixinNodeTypes.toArray(new InternalQName[mixinNodeTypes.size() + 1]);
nTypes[nTypes.length - 1] = nodeData.getPrimaryTypeName();
defs = nodeTypeDataManager.getPropertyDefinitions(propName, nTypes);
if (defs == null || defs.getAnyDefinition() == null)
{
if (!((Boolean)context.get(ContentImporter.RESPECT_PROPERTY_DEFINITIONS_CONSTRAINTS)))
{
log.warn("Property definition not found for " + propName.getAsString());
continue;
}
throw new RepositoryException("Property definition not found for " + propName.getAsString());
}
pDef = defs.getAnyDefinition();
if ((pDef == null) || (defs == null))
{
throw new RepositoryException("no propertyDefinition found");
}
if (pDef.getRequiredType() == PropertyType.BINARY)
{
newProperty = endBinary(propertiesMap, newProperty, propName);
}
else
{
StringTokenizer spaceTokenizer = new StringTokenizer(propertiesMap.get(propName));
List<ValueData> values = new ArrayList<ValueData>();
int pType = pDef.getRequiredType() > 0 ? pDef.getRequiredType() : PropertyType.STRING;
if ("".equals(propertiesMap.get(propName)))
{
// Skip empty non string values
if (pType != PropertyType.STRING)
{
continue;
}
String denormalizeString = StringConverter.denormalizeString(propertiesMap.get(propName));
Value value = valueFactory.createValue(denormalizeString, pType);
values.add(((BaseValue)value).getInternalData());
if (Constants.EXO_OWNER.equals(propName))
{
nodeData.setExoOwner(denormalizeString);
}
}
else
{
List<String> denormalizeStrings = new ArrayList<String>();
while (spaceTokenizer.hasMoreTokens())
{
String elem = spaceTokenizer.nextToken();
String denormalizeString = StringConverter.denormalizeString(elem);
denormalizeStrings.add(denormalizeString);
Value value = valueFactory.createValue(denormalizeString, pType);
if (log.isDebugEnabled())
{
String valueAsString = null;
try
{
valueAsString = value.getString();
}
catch (Exception e)
{
log.error("Can't present value as string. " + e.getMessage());
valueAsString = "[Can't present value as string]";
}
log.debug("Property " + ExtendedPropertyType.nameFromValue(pType) + ": " + propName + "="
+ valueAsString);
}
values.add(((BaseValue)value).getInternalData());
}
if (pType == ExtendedPropertyType.PERMISSION)
{
nodeData.setExoPrivileges(denormalizeStrings);
}
else if (Constants.EXO_OWNER.equals(propName))
{
nodeData.setExoOwner(denormalizeStrings.get(0));
}
}
boolean isMultivalue = true;
// determinating is property multivalue;
if (values.size() == 1)
{
// there is single-value defeniton
if (defs.getDefinition(false) != null)
{
isMultivalue = false;
}
}
else
{
if ((defs.getDefinition(true) == null) && (defs.getDefinition(false) != null))
{
throw new ValueFormatException("Can not assign multiple-values Value"
+ " to a single-valued property " + propName.getAsString() + " node " + jcrName.getName());
}
}