Search in sources :

Example 6 with EISOrderedCollectionChangeRecord

use of org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord in project eclipselink by eclipse-ee4j.

the class ArrayCollectionMappingHelper method simpleAddToCollectionChangeRecordWithOrder.

/**
 * Add stuff to an ordered collection.
 */
private void simpleAddToCollectionChangeRecordWithOrder(Object referenceKey, Object changeSetToAdd, ObjectChangeSet changeSet, AbstractSession session) {
    EISOrderedCollectionChangeRecord changeRecord = (EISOrderedCollectionChangeRecord) changeSet.getChangesForAttributeNamed(this.getAttributeName());
    if (changeRecord == null) {
        changeRecord = new EISOrderedCollectionChangeRecord(changeSet, getAttributeName(), getDatabaseMapping());
        changeSet.addChange(changeRecord);
    }
    changeRecord.simpleAddChangeSet(changeSetToAdd);
}
Also used : EISOrderedCollectionChangeRecord(org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord)

Example 7 with EISOrderedCollectionChangeRecord

use of org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord in project eclipselink by eclipse-ee4j.

the class EISOneToManyMappingHelper method simpleAddToCollectionChangeRecordWithOrder.

/**
 * Add stuff to an ordered collection.
 */
private void simpleAddToCollectionChangeRecordWithOrder(Object referenceKey, Object changeSetToAdd, ObjectChangeSet changeSet, AbstractSession session) {
    EISOrderedCollectionChangeRecord changeRecord = (EISOrderedCollectionChangeRecord) changeSet.getChangesForAttributeNamed(this.getAttributeName());
    if (changeRecord == null) {
        changeRecord = new EISOrderedCollectionChangeRecord(changeSet, this.getAttributeName(), this.getDatabaseMapping());
        changeSet.addChange(changeRecord);
    }
    changeRecord.simpleAddChangeSet(changeSetToAdd);
}
Also used : EISOrderedCollectionChangeRecord(org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord)

Example 8 with EISOrderedCollectionChangeRecord

use of org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord in project eclipselink by eclipse-ee4j.

the class ArrayCollectionMappingHelper method compareAttributeValuesForChangeWithOrder.

/**
 * Build and return the change record that results
 * from comparing the two collection attributes.
 * The order of the elements is significant.
 */
private ChangeRecord compareAttributeValuesForChangeWithOrder(Object cloneCollection, Object backupCollection, ObjectChangeSet owner, AbstractSession session) {
    ContainerPolicy cp = this.getContainerPolicy();
    // convert it to a Vector so we can preserve the order and use indexes
    Vector cloneVector = cp.vectorFor(cloneCollection, session);
    // "clone" it so we can clear out the slots
    Vector backupVector = cp.vectorFor(backupCollection, session);
    EISOrderedCollectionChangeRecord changeRecord = new EISOrderedCollectionChangeRecord(owner, getAttributeName(), this.getDatabaseMapping());
    for (int i = 0; i < cloneVector.size(); i++) {
        Object cloneElement = cloneVector.elementAt(i);
        boolean found = false;
        for (int j = 0; j < backupVector.size(); j++) {
            if (this.compareElementsForChange(cloneElement, backupVector.elementAt(j), session)) {
                // the clone element was found in the backup collection
                found = true;
                // clear out the matching backup element
                backupVector.setElementAt(XXX, j);
                changeRecord.addMovedChangeSet(this.buildChangeSet(cloneElement, owner, session), j, i);
                // matching backup element found - skip the rest of them
                break;
            }
        }
        if (!found) {
            // the clone element was not found, so it must have been added
            changeRecord.addAddedChangeSet(this.buildChangeSet(cloneElement, owner, session), i);
        }
    }
    for (int i = 0; i < backupVector.size(); i++) {
        Object backupElement = backupVector.elementAt(i);
        if (backupElement != XXX) {
            // the backup element was not in the clone collection, so it must have been removed
            changeRecord.addRemovedChangeSet(this.buildChangeSet(backupElement, owner, session), i);
        }
    }
    if (changeRecord.hasChanges()) {
        return changeRecord;
    } else {
        return null;
    }
}
Also used : ContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy) EISOrderedCollectionChangeRecord(org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord) Vector(java.util.Vector)

Aggregations

EISOrderedCollectionChangeRecord (org.eclipse.persistence.eis.EISOrderedCollectionChangeRecord)8 ContainerPolicy (org.eclipse.persistence.internal.queries.ContainerPolicy)4 List (java.util.List)3 AbstractSession (org.eclipse.persistence.internal.sessions.AbstractSession)2 Vector (java.util.Vector)1