コード例 #1
0
  @Override
  public Record cloneRecord(IdentityRecordStack parentRecords) throws RecordException {
    if (parentRecords.contains(this)) {
      throw new RecordException("A record may not be nested in itself: " + id);
    }

    RecordImpl record = new RecordImpl();
    record.id = id;
    record.version = version;
    record.recordTypes.putAll(recordTypes);
    parentRecords.push(this);
    for (Entry<QName, Object> entry : fields.entrySet()) {
      record.fields.put(entry.getKey(), tryCloneValue(parentRecords, entry));
    }
    parentRecords.pop();
    if (fieldsToDelete.size() > 0) { // addAll seems expensive even when list is empty
      record.fieldsToDelete.addAll(fieldsToDelete);
    }

    if (metadatas != null) {
      for (Map.Entry<QName, Metadata> metadata : metadatas.entrySet()) {
        record.setMetadata(metadata.getKey(), metadata.getValue());
      }
    }

    // the ResponseStatus is not cloned, on purpose
    return record;
  }