Example #1
0
  /**
   * @see #write(CDODataOutput, int)
   * @since 3.0
   */
  public void convertEObjects(CDOIDProvider idProvider) {
    if (!(containerID instanceof CDOID)) {
      containerID = idProvider.provideCDOID(containerID);
    }

    EStructuralFeature[] features = getAllPersistentFeatures();
    for (int i = 0; i < features.length; i++) {
      EStructuralFeature feature = features[i];
      if (feature.isMany()) {
        CDOList list = getValueAsList(i);
        if (list != null) {
          boolean isFeatureMap = FeatureMapUtil.isFeatureMap(feature);
          for (int j = 0; j < list.size(); j++) {
            Object value = list.get(j, false);
            EStructuralFeature innerFeature = feature; // Prepare for possible feature map
            if (isFeatureMap) {
              Entry entry = (FeatureMap.Entry) value;
              innerFeature = entry.getEStructuralFeature();
              value = entry.getValue();
            }

            if (value != null && innerFeature instanceof EReference) {
              CDOID newValue = idProvider.provideCDOID(value);
              if (newValue != value) {
                list.set(j, newValue);
              }
            }
          }
        }
      } else {
        checkNoFeatureMap(feature);
        Object value = getValue(i);
        if (value != null && feature instanceof EReference) {
          CDOID newValue = idProvider.provideCDOID(value);
          if (newValue != value) {
            setValue(i, newValue);
          }
        }
      }
    }
  }
Example #2
0
  private boolean readValue(
      CDODataInput in, EClass owner, EStructuralFeature[] features, int i, boolean unchunked)
      throws IOException {
    Object value;
    byte unsetState = in.readByte();
    switch (unsetState) {
      case UNSET_OPCODE:
        return unchunked;

      case SET_NULL_OPCODE:
        setValue(i, CDORevisionData.NIL);
        return unchunked;
    }

    EStructuralFeature feature = features[i];
    if (feature.isMany()) {
      CDOList list = in.readCDOList(owner, feature);
      if (unchunked) {
        int size = list.size();
        if (size != 0) {
          Object lastElement = list.get(size - 1);
          if (lastElement == InternalCDOList.UNINITIALIZED
              || lastElement instanceof CDOElementProxy) {
            unchunked = false;
          }
        }
      }

      value = list;
    } else {
      value = in.readCDOFeatureValue(feature);
      if (TRACER.isEnabled()) {
        TRACER.format("Read feature {0}: {1}", feature.getName(), value);
      }
    }

    setValue(i, value);
    return unchunked;
  }
Example #3
0
 public int size(EStructuralFeature feature) {
   CDOList list = getList(feature);
   return list.size();
 }