final boolean withCompleteData = resolveState == ResolveState.TRANSIENT || resolveState == ResolveState.RESOLVED;
final String type = adapter.getSpecification().getFullIdentifier();
final Oid oid = adapter.getOid();
final ObjectData data = this.dataFactory.createObjectData(type, oid, withCompleteData, adapter.getVersion());
if (isTransient) {
knownObjects.put(adapter, data);
}
final ObjectAssociation[] fields = fieldOrderCache.getFields(adapter.getSpecification());
final Data[] fieldContent = new Data[fields.length];
PersistorUtil.start(adapter, adapter.getResolveState().serializeFrom());
for (int i = 0; i < fields.length; i++) {
if (fields[i].isNotPersisted()) {
continue;
}
final ObjectAdapter field = fields[i].get(adapter);
if (fields[i].getSpecification().isEncodeable()) {
if (field == null) {
fieldContent[i] = this.dataFactory.createNullData(fields[i].getSpecification().getFullIdentifier());
} else {
fieldContent[i] = serializeEncodeable(field);
}
} else if (fields[i].isOneToManyAssociation()) {
fieldContent[i] = serializeCollection(field, graphDepth - 1, knownObjects);
} else if (fields[i].isOneToOneAssociation()) {
if (field == null) {
fieldContent[i] = !withCompleteData ? null : this.dataFactory.createNullData(fields[i].getSpecification().getFullIdentifier());
} else {
fieldContent[i] = serializeObject2(field, graphDepth - 1, knownObjects);
}
} else {
throw new UnknownTypeException(fields[i]);
}
}
PersistorUtil.end(adapter);
data.setFieldContent(fieldContent);
return data;
}