public final ChangeSummary end()

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;
    }