private ObjectData createObjectData(final NakedObject object, final boolean ensurePersistent) {
LOG.debug("compiling object data for " + object);
ObjectData data;
data = new ObjectData(object.getSpecification(), (SerialOid) object.getOid(), (FileVersion) object.getVersion());
final NakedObjectAssociation[] fields = object.getSpecification().getAssociations();
for (int i = 0; i < fields.length; i++) {
if (!fields[i].isPersisted()) {
continue;
}
final NakedObject field = fields[i].get(object);
final NakedObject fieldContent = field;
final String fieldId = fields[i].getId();
if (fields[i].isOneToManyAssociation()) {
data.addInternalCollection(fieldContent, fieldId, ensurePersistent);
} else if (fields[i].getSpecification().isEncodeable()) {
final boolean isEmpty = fields[i].isEmpty(object);
if (field == null || isEmpty) {
data.saveValue(fieldId, isEmpty, null);
} else {
final EncodeableFacet facet = fieldContent.getSpecification().getFacet(EncodeableFacet.class);
final String encodedValue = facet.toEncodedString(fieldContent);
data.saveValue(fieldId, isEmpty, encodedValue);
}
} else if (fields[i].isOneToOneAssociation()) {
data.addAssociation(fieldContent, fieldId, ensurePersistent);
}
}
return data;
}