protected void writeFeature()

in src/main/java/org/apache/uima/json/jsoncas2/ser/FeatureStructureSerializer.java [61:111]


  protected void writeFeature(SerializerProvider aProvider, ReferenceCache aRefCache,
          JsonGenerator aJg, FeatureStructure aFs, Feature aFeature) throws IOException {
    if (!aFeature.getRange().isPrimitive()) {
      FeatureStructure target = aFs.getFeatureValue(aFeature);
      if (target != null) {
        aJg.writeNumberField(REF_FEATURE_PREFIX + aFeature.getShortName(),
                aRefCache.fsRef(aFs.getFeatureValue(aFeature)));
      }
      return;
    }

    if (aFeature.getRange().isStringOrStringSubtype()) {
      String value = aFs.getStringValue(aFeature);
      if (value != null) {
        aJg.writeStringField(aFeature.getShortName(), value);
      }

      return;
    }

    String rangeTypeName = aFeature.getRange().getName();
    switch (rangeTypeName) {
      case CAS.TYPE_NAME_BOOLEAN:
        aJg.writeBooleanField(aFeature.getShortName(), aFs.getBooleanValue(aFeature));
        break;
      case CAS.TYPE_NAME_BYTE:
        aJg.writeNumberField(aFeature.getShortName(), aFs.getByteValue(aFeature));
        break;
      case CAS.TYPE_NAME_DOUBLE:
        writeFloatingPointField(aJg, aFeature.getShortName(), aFs.getDoubleValue(aFeature));
        break;
      case CAS.TYPE_NAME_FLOAT:
        writeFloatingPointField(aJg, aFeature.getShortName(), aFs.getFloatValue(aFeature));
        break;
      case CAS.TYPE_NAME_INTEGER: {
        aJg.writeFieldName(aFeature.getShortName());
        int value = aFs.getIntValue(aFeature);
        value = convertOffsetsIfNecessary(aProvider, aFs, aFeature, value);
        aJg.writeNumber(value);
        break;
      }
      case CAS.TYPE_NAME_LONG:
        aJg.writeNumberField(aFeature.getShortName(), aFs.getLongValue(aFeature));
        break;
      case CAS.TYPE_NAME_SHORT:
        aJg.writeNumberField(aFeature.getShortName(), aFs.getShortValue(aFeature));
        break;
      default:
        throw new IOException("Unsupported primitive type [" + rangeTypeName + "]");
    }
  }