Package org.exolab.castor.persist

Examples of org.exolab.castor.persist.ClassMolder


    public final UpdateAndRemovedFlags removeRelation(final TransactionContext tx,
            final Object object, final ClassMolder relatedMolder,
            final Object relatedObject) {
        UpdateAndRemovedFlags flags = new UpdateAndRemovedFlags();
        // remove the object from the collection
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        ClassMolder relatedBaseMolder = relatedMolder;
        while (fieldClassMolder != relatedBaseMolder
                && relatedBaseMolder != null) {
            relatedBaseMolder = relatedBaseMolder.getExtends();
        }
        if (fieldClassMolder == relatedBaseMolder) {
            boolean changed = false;
            Object related = _fieldMolder.getValue(object, tx.getClassLoader());
View Full Code Here


     * @see org.castor.persist.resolver.ResolverStrategy#create(
     *      org.castor.persist.TransactionContext, java.lang.Object)
     */
    public Object create(final TransactionContext tx, final Object object) {
        Object field = null;
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        Object o = _fieldMolder.getValue(object, tx.getClassLoader());
        if (o != null) {
            Object fid = fieldClassMolder.getIdentity(tx, o);
            if (fid != null) {
                field = fid;
            }
        }
        return field;
View Full Code Here

    public boolean markCreate(final TransactionContext tx, final OID oid, final Object object)
    throws PersistenceException {
        // create dependent object if exists
        boolean updateCache = false;
       
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        Object o = _fieldMolder.getValue(object, tx.getClassLoader());
        if (o != null) {
            if (_fieldMolder.isDependent()) {
                if (!tx.isRecorded(o)) {
                    tx.markCreate(fieldClassMolder, o, oid);
                    if (!_fieldMolder.isStored() && fieldClassMolder.isKeyGenUsed()) {
                        updateCache = true;
                    }
                } else {
                    // fail-fast principle: if the object depend on another object,
                    // throw exception
                    if (!tx.isDepended(oid, o)) {
                        throw new PersistenceException(
                                "Dependent object may not change its master. Object: " + o
                                + " new master: " + oid);
                    }
                }
            } else if (tx.isAutoStore()) {
                if (!tx.isRecorded(o)) {
                    tx.markCreate(fieldClassMolder, o, null);
                    if (!_fieldMolder.isStored() && fieldClassMolder.isKeyGenUsed()) {
                        updateCache = true;
                    }
                }
            }
        }
View Full Code Here

    public UpdateFlags preStore(final TransactionContext tx, final OID oid,
            final Object object, final int timeout, final Object field)
    throws PersistenceException {
        UpdateFlags flags = new UpdateFlags();
       
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        Object value = _fieldMolder.getValue(object, tx.getClassLoader());
        Identity curIdentity = (Identity) field;
        Identity newIdentity = null;
        if (value != null) {
            newIdentity = fieldClassMolder.getIdentity(tx, value);
            flags.setNewField(newIdentity);
        }

        // | yip: don't delete the following comment,
        //      until it proved working by time. :-P
        // if ids are the same or not canCreate
        //    if object is deleted
        //        warn
        //    if object are the same
        //        done
        //    not the same
        //        exception
        // ids not the same or canCreate
        //    if depend
        //       if old is not null
        //          delete old
        //          removeRelation
        //       if canCreate
        //          create new
        //    not depend and autoStore
        //       if old is not null
        //          removeRelation
        //       if canCreate
        //          createObject
        //    not depend nor autoStore
        //       if old is not null
        //          removeRelation
        //       if new is not null
        if (ClassMolderHelper.isEquals(curIdentity, newIdentity)) {
            /*
             * Let's deal with a situation where there's no dependent object (field == null),
             * a 'new' dependent object has been set (value != null), but as we are using a key
             * generator on this newly set object, calling fieldClassMolder.getIdentity() will
             * return null (and hence newField == null). In this case, we still have to mark this
             * new object for creation and instruct Castor to update the cache(s) as well.
             */
            if ((field == null) && (value != null)
                    &&  _fieldMolder.isDependent() && !tx.isRecorded(value)) {
                if (_fieldMolder.isStored() && _fieldMolder.isCheckDirty()) {
                    flags.setUpdatePersist(true);
                }
                flags.setUpdateCache(true);
                tx.markCreate(fieldClassMolder, value, oid);
            }
           
            //TODO [WG]: can anybody please explain to me the meaning of the next two lines.
            if (!_debug) { return flags; }
            if (curIdentity == null) { return flags; } // do the next field if both are null

            if ((value != null) && tx.isDeleted(value)) {
                LOG.warn ("Deleted object found!");
                if (_fieldMolder.isStored() && _fieldMolder.isCheckDirty()) {
                    flags.setUpdatePersist(true);
                }
                flags.setUpdateCache(true);
                _fieldMolder.setValue(object, null, tx.getClassLoader());
                return flags;
            }

            if (tx.isAutoStore() || _fieldMolder.isDependent()) {
                if (value != tx.fetch(fieldClassMolder, curIdentity, null)) {
                    throw new DuplicateIdentityException("");
                }
            }
        } else {
            if (_fieldMolder.isStored() /* && _fieldMolder.isCheckDirty() */) {
                flags.setUpdatePersist(true);
            }
            flags.setUpdateCache(true);

            if (_fieldMolder.isDependent()) {
                if (curIdentity != null) {
                    Object reldel = tx.fetch(fieldClassMolder, curIdentity, null);
                    if (reldel != null) {
                        tx.delete(reldel);
                    }
                }

                if ((value != null) && !tx.isRecorded(value)) {
                    tx.markCreate(fieldClassMolder, value, oid);
                }

            } else if (tx.isAutoStore()) {
                if (curIdentity != null) {
                    Object deref = tx.fetch(fieldClassMolder, curIdentity, null);
                    if (deref != null) {
                        fieldClassMolder.removeRelation(tx, deref, _classMolder, object);
                    }
                }

                if ((value != null) && !tx.isRecorded(value)) {
                    tx.markCreate(fieldClassMolder, value, null);
                }
            } else {
                if (curIdentity != null) {
                    Object deref = tx.fetch(fieldClassMolder, curIdentity, null);
                    if (deref != null) {
                        fieldClassMolder.removeRelation(tx, deref, _classMolder, object);
                    }
                }

                // yip: user're pretty easily to run into cache
                // integrity problem here, if user forgot to create
                // "value" explicitly. We autoload the value for him.
                if ((value != null) && !tx.isRecorded(value)) {
                    Identity fieldValue = fieldClassMolder.getIdentity(tx, value);
                    if (fieldValue != null) {
                        ProposedEntity temp = new ProposedEntity(fieldClassMolder);
                        tx.load(fieldValue, temp, null);
                        _fieldMolder.setValue(object, temp.getEntity(), tx.getClassLoader());
                    } else {
View Full Code Here

     *      org.castor.persist.TransactionContext, java.lang.Object, java.lang.Object)
     */
    public Object store(final TransactionContext tx, final Object object, final Object field) {
        Object newField = null;
        if (_fieldMolder.isStored()) {
            ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
            Object value = _fieldMolder.getValue(object, tx.getClassLoader());
            if (value != null) {
                newField = fieldClassMolder.getIdentity(tx, value);
            }
        }
        return newField;
    }
View Full Code Here

     */
    public void update(final TransactionContext tx, final OID oid, final Object object,
            final AccessMode suggestedAccessMode, final Object field) throws PersistenceException {
        Identity nfield = (Identity) field;
       
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        Object o = _fieldMolder.getValue(object, tx.getClassLoader());
        if (_fieldMolder.isDependent()) {
            // depedent class won't have persistenceInfo in LockEngine
            // must look at fieldMolder for it

View Full Code Here

     *      org.castor.persist.TransactionContext, org.exolab.castor.persist.OID,
     *      java.lang.Object)
     */
    public Object updateCache(final TransactionContext tx, final OID oid, final Object object) {
        Object field = null;
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        Object value = _fieldMolder.getValue(object, tx.getClassLoader());
        if (value != null) {
            Object fid = fieldClassMolder.getIdentity(tx, value);
            if (_fieldMolder.isLazy() && (value instanceof LazyCGLIB)) {
                boolean hasMaterialized =
                    ((LazyCGLIB) value).interceptedHasMaterialized().booleanValue();
                if (!hasMaterialized) {
                    fid = fieldClassMolder.getActualIdentity(tx, value);
                }
            }
            if (fid != null) { field = fid; }
        }
        return field;
View Full Code Here

     *      org.castor.persist.TransactionContext, java.lang.Object, java.lang.Object)
     */
    public void markDelete(final TransactionContext tx, final Object object, final Object field)
    throws PersistenceException {
        // persistanceCapable include many_to_one
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        Identity identity = (Identity) field;
        if (identity != null) {
            Object fetched = tx.fetch(fieldClassMolder, identity, null);
            if (fetched != null) {
                if (_fieldMolder.isDependent()) {
                    tx.delete(fetched);
                } else {
                    // delete the object from the other side of the relation
                    fieldClassMolder.removeRelation(tx, fetched, _classMolder, object);
                }
            }
        }
       
        if (_fieldMolder.isDependent()) {
View Full Code Here

     *      org.castor.persist.TransactionContext, org.exolab.castor.persist.OID,
     *      java.lang.Object, java.lang.Object)
     */
    public void revertObject(final TransactionContext tx, final OID oid, final Object object,
            final Object field) throws PersistenceException {
        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();
        if (field != null) {
            Object value = tx.fetch(fieldClassMolder, (Identity) field, null);
            _fieldMolder.setValue(object, value, tx.getClassLoader());
        } else {
            _fieldMolder.setValue(object, null, tx.getClassLoader());
View Full Code Here

     */
    public void expireCache(final TransactionContext tx, final Object field)
    throws PersistenceException {
        // field is not primitive type. Related object will be expired

        ClassMolder fieldClassMolder = _fieldMolder.getFieldClassMolder();

        if (field != null) {
            // use the corresponding Persistent fields as the identity
            tx.expireCache(fieldClassMolder, (Identity) field);
        }
View Full Code Here

TOP

Related Classes of org.exolab.castor.persist.ClassMolder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.