Examples of ObjectProvider


Examples of org.datanucleus.store.ObjectProvider

                ExecutionContext ec = ownerSM.getExecutionContext();
                Iterator iter = c.iterator();
                while (iter.hasNext())
                {
                    Object pc = iter.next();
                    ObjectProvider objSM = ec.findObjectProvider(pc);
                    if (objSM == null)
                    {
                        objSM = ObjectProviderFactory.newForEmbedded(ec, pc, false, ownerSM, fieldNumber);
                    }
                }
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

            if (!fieldName.equals(candidateAlias))
            {
                if (ec.getApiAdapter().isPersistent(value))
                {
                    // Make sure this field is loaded
                    ObjectProvider valueSM = ec.findObjectProvider(value);
                    if (valueSM != null)
                    {
                        AbstractMemberMetaData mmd = valueSM.getClassMetaData().getMetaDataForMember(fieldName);
                        if (mmd == null)
                        {
                            NucleusLogger.QUERY.error("Cannot find " + fieldName + " member of " + valueSM.getClassMetaData().getFullClassName());
                            return new InMemoryFailure();
                        }
                        if (mmd.getAbsoluteFieldNumber() >= 0)
                        {
                            // Field is managed, and not loaded, so load it
                            valueSM.isLoaded(mmd.getAbsoluteFieldNumber());
                        }
                    }
                }
                value = ClassUtils.getValueOfFieldByReflection(value, fieldName);
            }
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

            // Transient or detached maybe
            return ClassUtils.getValueOfFieldByReflection(object, mmd.getName());
            // TODO What if this is a property?
        }

        ObjectProvider sm = ec.findObjectProvider(object);
        if (!mmd.isPrimaryKey())
        {
            // Make sure the field is loaded
            ec.getApiAdapter().isLoaded(sm, mmd.getAbsoluteFieldNumber());
        }

        FieldManager fm = new SingleValueFieldManager();
        sm.provideFields(new int[] {mmd.getAbsoluteFieldNumber()}, fm);
        return fm.fetchObjectField(mmd.getAbsoluteFieldNumber());
    }
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

        if (!ec.getApiAdapter().isPersistable(obj))
        {
            return null;
        }

        ObjectProvider sm = ec.findObjectProvider(obj);
        if (sm == null)
        {
            // Find the identity
            Object id = null;
            if (acmd.getIdentityType() == IdentityType.DATASTORE)
            {
                throw new NucleusException(LOCALISER.msg("XML.DatastoreID"));
            }
            else
            {
                id = ec.getApiAdapter().getNewApplicationIdentityObjectId(obj, acmd);
            }
            // TODO What about nondurable?

            // Object not managed so give it a StateManager before returning it
            sm = ObjectProviderFactory.newForPersistentClean(ec, id, obj);
            AbstractClassMetaData cmd = sm.getClassMetaData();

            // Mark as not loaded all (non-embedded) relation fields
            int[] members = cmd.getAllMemberPositions();
            for (int i = 0; i < members.length; i++)
            {
                AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(i);
                if (mmd.getRelationType(ec.getClassLoaderResolver()) != Relation.NONE &&
                    mmd.getEmbeddedMetaData() == null)
                {
                    sm.unloadField(mmd.getName());
                }
            }
        }

        // Wrap all unwrapped SCO fields of this instance so we can pick up any changes
        sm.replaceAllLoadedSCOFieldsWithWrappers();

        return sm;
    }
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

                        Object id = ec.getApiAdapter().getNewApplicationIdentityObjectId(clr.classForName(cmd.getFullClassName()), nList.item(0).getFirstChild().getNodeValue());
                        Object related = ec.findObject(id, true, true, null);
                        if (relationType == Relation.ONE_TO_ONE_BI)
                        {
                            // Set other side of relation to avoid reloading
                            ObjectProvider relatedSM = ec.findObjectProvider(related);
                            AbstractMemberMetaData relatedMmd = mmd.getRelatedMemberMetaDataForObject(clr, sm.getObject(), related);
                            relatedSM.replaceField(relatedMmd.getAbsoluteFieldNumber(), sm.getObject());
                        }
                        return related;
                    }
                    return null;

                case Relation.ONE_TO_MANY_UNI :
                case Relation.ONE_TO_MANY_BI :
                    // TODO Cater for Map/array
                    if (mmd.hasCollection())
                    {
                        AbstractClassMetaData cmd2 = sm.getExecutionContext().getMetaDataManager().getMetaDataForClass(mmd.getCollection().getElementType(), clr);

                        // Get value being unmarshalled
                        sm.copyFieldsFromObject(value, new int[]{fieldNumber});
                        Collection collection = (Collection) sm.provideField(fieldNumber);

                        // Make sure we get the right type of element (allow for inheritance)
                        NodeList nLists = ((Element) node).getElementsByTagName(
                            XMLUtils.getElementNameForMember(mmd, FieldRole.ROLE_COLLECTION_ELEMENT));
                        for (int i = 0; i < nLists.getLength(); i++)
                        {
                            final String nodeValue = nLists.item(i).getFirstChild().getNodeValue();
                            if (nodeValue != null && nodeValue.trim().length() > 0)
                            {
                                final AbstractClassMetaData elementCmd = XMLUtils.findMetaDataForNode(doc, cmd2,
                                    ec.getMetaDataManager(), nodeValue, clr);
                                if (elementCmd == null && cmd2 != null)
                                {
                                    throw new NucleusException("Unable to find object of type " + cmd2.getFullClassName() + " with id=" + nodeValue);
                                }

                                Object id = ec.getApiAdapter().getNewApplicationIdentityObjectId(
                                    clr.classForName(elementCmd.getFullClassName()), nodeValue);
                                Object related = ec.findObject(id, true, true, null);
                                if (relationType == Relation.ONE_TO_MANY_BI)
                                {
                                    // Set other side of relation to avoid reloading
                                    ObjectProvider relatedSM = ec.findObjectProvider(related);
                                    AbstractMemberMetaData relatedMmd = relatedSM.getClassMetaData().getMetaDataForMember(mmd.getMappedBy());
                                    relatedSM.replaceField(relatedMmd.getAbsoluteFieldNumber(), sm.getObject());
                                }
                                collection.add(related);
                            }
                        }
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

        }
        else
        {
            // Element was already persistent so make sure the FK is in place
            // TODO This is really "ManagedRelationships" so needs to go in RelationshipManager
            ObjectProvider elementSM = ec.findObjectProvider(element);
            if (getFieldNumberInElementForBidirectional(elementSM) >= 0)
            {
                // Managed Relations : 1-N bidir, so update the owner of the element
                ec.getApiAdapter().isLoaded(elementSM, getFieldNumberInElementForBidirectional(elementSM)); // Ensure is loaded
                Object oldOwner = elementSM.provideField(getFieldNumberInElementForBidirectional(elementSM));
                if (oldOwner != newOwner)
                {
                    if (NucleusLogger.PERSISTENCE.isDebugEnabled())
                    {
                        NucleusLogger.PERSISTENCE.debug(LOCALISER.msg("055009", sm.toPrintableID(),
                            ownerMemberMetaData.getFullFieldName(), StringUtils.toJVMIDString(element)));
                    }

                    int relatedFieldNumber = getFieldNumberInElementForBidirectional(elementSM);
                    elementSM.replaceFieldMakeDirty(relatedFieldNumber, newOwner);
                    if (ec.getManageRelations())
                    {
                        // Managed Relationships - add the change we've made here to be analysed at flush
                        ec.getRelationshipManager(elementSM).relationChange(relatedFieldNumber, oldOwner, newOwner);
                    }

                    if (ec.isFlushing())
                    {
                        elementSM.flush();
                    }
                }
                return oldOwner != newOwner;
            }
            else
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

        if (ec.getApiAdapter().isDetached(element)) // User passed in detached object to collection.remove()!
        {
            // Find an attached equivalent of this detached object (DON'T attach the object itself)
            elementToRemove = ec.findObject(ec.getApiAdapter().getIdForObject(element), true, false, element.getClass().getName());
        }
        ObjectProvider elementSM = ec.findObjectProvider(elementToRemove);

        Object oldOwner = null;
        if (ownerFieldNumber >= 0)
        {
            if (!ec.getApiAdapter().isDeleted(elementToRemove))
            {
                // Find the existing owner if the record hasn't already been deleted
                ec.getApiAdapter().isLoaded(elementSM, ownerFieldNumber);
                oldOwner = elementSM.provideField(ownerFieldNumber);
            }
        }
        else
        {
            // TODO Check if the element is managed by a different owner now
        }

        // Owner of the element has been changed
        if (ownerFieldNumber >= 0 && oldOwner != ownerSM.getObject() && oldOwner != null)
        {
            return false;
        }

        boolean deleteElement = checkRemovalOfElementShouldDelete(ownerSM);
        if (deleteElement)
        {
            if (ec.getApiAdapter().isPersistable(elementToRemove) && ec.getApiAdapter().isDeleted(elementToRemove))
            {
                // Element is waiting to be deleted so flush it (it has the FK)
                elementSM.flush();
            }
            else
            {
                // Element not yet marked for deletion so go through the normal process
                ec.deleteObjectInternal(elementToRemove);
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

        {
            // TODO Move this into RelationshipManager
            // Managed Relations : 1-N bidirectional so null the owner on the elements
            if (!ec.getApiAdapter().isDeleted(element))
            {
                ObjectProvider elementSM = ec.findObjectProvider(element);
                if (elementSM != null)
                {
                    // Null the owner of the element
                    if (NucleusLogger.PERSISTENCE.isDebugEnabled())
                    {
                        NucleusLogger.PERSISTENCE.debug(LOCALISER.msg("055010",
                            ownerSM.toPrintableID(),
                            ownerMemberMetaData.getFullFieldName(),
                            StringUtils.toJVMIDString(element)));
                    }

                    int relatedFieldNumber = getFieldNumberInElementForBidirectional(elementSM);
                    Object currentValue = elementSM.provideField(relatedFieldNumber);
                    if (currentValue != null)
                    {
                        elementSM.replaceFieldMakeDirty(relatedFieldNumber, null);
                        if (ec.isFlushing())
                        {
                            // Make sure this change gets flushed
                            elementSM.flush();
                        }
                    }
                }
            }
        }
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

                {
                    Object element = elementsIter.next();
                    if (ec.getApiAdapter().isPersistable(element) && ec.getApiAdapter().isDeleted(element))
                    {
                        // Element is waiting to be deleted so flush it (it has the FK)
                        ObjectProvider elementSM = ec.findObjectProvider(element);
                        elementSM.flush();
                    }
                    else
                    {
                        // Element not yet marked for deletion so go through the normal process
                        ec.deleteObjectInternal(element);
View Full Code Here

Examples of org.datanucleus.store.ObjectProvider

                    Map.Entry entry = (Map.Entry)iter.next();
                    Object key = entry.getKey();
                    Object value = entry.getValue();
                    if (fmd.getMap().keyIsPersistent())
                    {
                        ObjectProvider objSM = ec.findObjectProvider(key);
                        if (objSM == null)
                        {
                            objSM = ObjectProviderFactory.newForEmbedded(ec, key, false, ownerSM, fieldNumber);
                        }
                    }
                    if (fmd.getMap().valueIsPersistent())
                    {
                        ObjectProvider objSM = ec.findObjectProvider(value);
                        if (objSM == null)
                        {
                            objSM = ObjectProviderFactory.newForEmbedded(ec, value, false, ownerSM, fieldNumber);
                        }
                    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. 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.