private void handleFeatMultiValue()

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
      }
    }