in uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java [1183:1255]
private void handleFeatMultiValue(TOP fs, FeatureImpl fi, List<String> featVals)
throws SAXException {
final int rangeCode = fi.rangeTypeClass;
switch (rangeCode) {
case LowLevelCAS.TYPE_CLASS_INT:
case LowLevelCAS.TYPE_CLASS_FLOAT:
case LowLevelCAS.TYPE_CLASS_STRING:
case LowLevelCAS.TYPE_CLASS_BOOLEAN:
case LowLevelCAS.TYPE_CLASS_BYTE:
case LowLevelCAS.TYPE_CLASS_SHORT:
case LowLevelCAS.TYPE_CLASS_LONG:
case LowLevelCAS.TYPE_CLASS_DOUBLE:
case LowLevelCAS.TYPE_CLASS_FS:
if (featVals.size() != 1) {
throw new SAXParseException(I18nUtil.localizeMessage(
UIMAException.STANDARD_MESSAGE_CATALOG, Locale.getDefault(),
"multiple_values_unexpected", new Object[] { fi.getName() }), locator);
} else {
handleFeatSingleValue(fs, fi, featVals.get(0));
}
break;
case LowLevelCAS.TYPE_CLASS_INTARRAY:
case LowLevelCAS.TYPE_CLASS_FLOATARRAY:
case LowLevelCAS.TYPE_CLASS_STRINGARRAY:
case LowLevelCAS.TYPE_CLASS_BOOLEANARRAY:
case LowLevelCAS.TYPE_CLASS_BYTEARRAY:
case LowLevelCAS.TYPE_CLASS_SHORTARRAY:
case LowLevelCAS.TYPE_CLASS_LONGARRAY:
case LowLevelCAS.TYPE_CLASS_DOUBLEARRAY:
case LowLevelCAS.TYPE_CLASS_FSARRAY: {
CommonArrayFS existingArray = (CommonArrayFS) fs.getFeatureValue(fi);
CommonArrayFS casArray = createOrUpdateArray(fi.getRangeImpl(), featVals, -1,
existingArray);
if (existingArray != casArray) {
CASImpl.setFeatureValueMaybeSofa(fs, fi, (TOP) casArray);
}
// add to nonshared fs to encompassing FS map
if (!fi.isMultipleReferencesAllowed()) { // ! multiple refs => value is not shared
addNonsharedFSToEncompassingFSMapping((TOP) casArray, fs);
}
break;
}
case CasSerializerSupport.TYPE_CLASS_INTLIST:
case CasSerializerSupport.TYPE_CLASS_FLOATLIST:
case CasSerializerSupport.TYPE_CLASS_STRINGLIST:
case CasSerializerSupport.TYPE_CLASS_FSLIST: {
if (featVals == null) {
fs.setFeatureValue(fi, null);
} else if (featVals.size() == 0) {
fs.setFeatureValue(fi, casBeingFilled.emptyList(rangeCode));
} else {
CommonList existingList = (CommonList) fs.getFeatureValue(fi);
CommonList theList = createOrUpdateList(fi.getRangeImpl(), featVals, -1, existingList);
if (existingList != theList) {
fs.setFeatureValue(fi, theList);
}
// add to nonshared fs to encompassing FS map, for all elements
if (!fi.isMultipleReferencesAllowed()) {
CommonList node = theList;
while (node != null && (node instanceof NonEmptyList)) {
addNonsharedFSToEncompassingFSMapping((TOP) node, fs);
node = node.getCommonTail();
}
}
}
break;
}
default:
assert false; // this should be an exhaustive case block
}
}