in impl/src/main/java/org/apache/tuscany/sdo/util/resource/ChangeSummaryStreamDeserializer.java [582:662]
public final ChangeSummary end() throws XMLStreamException {
if (forwardReferences != null)
for (Iterator iterator = forwardReferences.iterator(); iterator.hasNext();) {
/*
* Forward-referenced(unresolved) modified DataObject from begin(...)
*/
ForwardReference forwardReference = (ForwardReference) iterator.next();
EObject referent = referent(forwardReference);
if (referent == null)
continue; // report error?
// iterator.remove();
Type type = ((DataObject) referent).getType();
Collection featureChanges = unsetProperties(referent, forwardReference.unset, type);
if (forwardReference.attributes != null)
for (Iterator attributes = forwardReference.attributes.iterator(); attributes.hasNext();) {
/*
* Log property old value as local attribute from begin(...)
*/
Attribute attribute = (Attribute) attributes.next();
logAttributeChange(featureChanges, attribute.name, type, attribute.value, forwardReference.nameSpaces);
}
if (forwardReference.qualifiedAttributes != null)
for (Iterator attributes = forwardReference.qualifiedAttributes.iterator(); attributes.hasNext();) {
/*
* Log property old value as qualified/global attribute from begin(...)
*/
QualifiedAttribute attribute = (QualifiedAttribute) attributes.next();
logAttributeChange(featureChanges, attribute.nameSpace, attribute.name, type, attribute.value, forwardReference.nameSpaces);
}
if (forwardReference.tags != null) {
if (propertyMapChanges != null)
propertyMapChanges.lists.clear();
for (Iterator tags = forwardReference.tags.iterator(); tags.hasNext();) {
/*
* Log property old value as element from begin(...)
*/
Tag tag = (Tag) tags.next();
Property property = getProperty(tag.nameSpace, tag.name.getLocalPart(), type);
if (tag.ref != null)
tag.value = referent(tag.ref, tag.nameSpaceContext);
// if (tag.value == null) report error?
else if (tag.events != null)
tag.value = value(play(tag));
if (property.isMany()) {
Collection list;
if (propertyMapChanges == null) {
propertyMapChanges = new PropertyMapChanges();
list = propertyMapChanges.newList(property);
} else
list = propertyMapChanges.get(property);
addPropertyChange( list, tag.value, property);
} else
logPropertyChange(featureChanges, property, tag.value);
}
if (propertyMapChanges != null)
logManyChanges(propertyMapChanges, referent, featureChanges);
}
}
if (objectChangesCollection != null)
for (Iterator iterator = objectChangesCollection.iterator(); iterator.hasNext();) {
/*
* Forward-referenced(unresolved) child DataObject from begin(...)
*/
ObjectChanges objectChanges = (ObjectChanges) iterator.next();
if (objectChanges.elementChanges != null)
for (Iterator elementChanges = objectChanges.elementChanges.iterator(); elementChanges.hasNext();) {
ElementChange elementChange = (ElementChange) elementChanges.next();
Object value = referent(elementChange);
if (value == null)
continue; // report error?
// iterator.remove();
logPropertyChange(objectChanges.featureChanges, elementChange.containing, elementChange.containment, value);
}
if (objectChanges.lists != null)
logManyChanges(objectChanges, (EObject) ((Map.Entry) ((EStructuralFeature.Setting) objectChanges.featureChanges).getEObject())
.getKey(), objectChanges.featureChanges);
}
if (logging)
changeSummary.resumeLogging();
return changeSummary;
}