/** * Gets the object that is embedded within the current entry. * @return the object */ private Object fetchEmbedded() { // use embedded meta data from field EmbeddedMetaData embeddedMetaData = mmd.getEmbeddedMetaData(); // use field meta data from embedded meta data List<AbstractMemberMetaData> embeddedMmds = new ArrayList<AbstractMemberMetaData>(Arrays.asList(embeddedMetaData.getMemberMetaData())); // TODO Provide the owner in this call ObjectProvider embeddedSM = ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, effectiveClassMetaData, null, -1); // TODO Why get SM just after creating it???? embeddedSM = getEmbeddedObjectProvider(embeddedSM.getObject()); return fetchMerge(embeddedSM, attributes, embeddedMmds, embeddedMetaData); }
/** * Utility method to process the passed persistable object. * We know that this object has no ObjectProvider when it comes in here. * @param fieldNumber Absolute field number * @param pc The persistable object */ protected void processPersistable(int fieldNumber, Object pc) { ExecutionContext ec = op.getExecutionContext(); ObjectProvider theSM = null; // No ObjectProvider but object returned to us by NeoDatis so we know it is persistent // Connect a ObjectProvider in P_CLEAN state with all fields loaded AbstractClassMetaData acmd = ec.getMetaDataManager().getMetaDataForClass(pc.getClass(), ec.getClassLoaderResolver()); Object id = NeoDatisUtils.getIdentityForObject(pc, acmd, ec, odb); theSM = ec.getNucleusContext().getObjectProviderFactory().newForPersistentClean(ec, id, pc); // Recurse to all fields of this object since just assigned its ObjectProvider theSM.provideFields(theSM.getClassMetaData().getAllMemberPositions(), new AssignObjectProviderFieldManager(theSM, odb)); }
if (ec.findObjectProvider(pc) == null) ObjectProviderFactory.newForHollowPreConstructed(ec, id, pc); ObjectProvider sm = ObjectProviderFactory.newForHollow(ec, pcClass, id); pc = sm.getObject();
ObjectProvider embOP = ec.getNucleusContext().getObjectProviderFactory().newForHollow(ec, embeddedType, null); embOP.setPcObjectType(objectType); value = embOP.getObject();
ObjectProvider op = ec.getNucleusContext().getObjectProviderFactory().newForDetached(ec, pc, getObjectId(pc), null); pc.dnReplaceStateManager(op); op.retrieveDetachState(op);
ObjectProvider op = ec.getNucleusContext().getObjectProviderFactory().newForHollowPopulatedAppId(ec, pcCls, fv); if (!ignoreCache)
ObjectProvider referenceSM = ObjectProviderFactory.newForHollow(ec, pcClass, id); Object referenceObject = referenceSM.getObject();
ObjectProvider op = ec.getNucleusContext().getObjectProviderFactory().newForDetached(ec, pc, getObjectId(pc), null); pc.dnReplaceStateManager(op); op.retrieveDetachState(op);
ObjectProvider embeddedSM = ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, effectiveClassMetaData, null, -1); for (AbstractMemberMetaData embeddedMmd : embeddedMmds)
sm = ec.getNucleusContext().getObjectProviderFactory().newForPersistentClean(ec, id, obj);
ObjectProvider sm = ec.getNucleusContext().getObjectProviderFactory().newForHollow(ec, pcClass, id);
ObjectProvider op = ec.getNucleusContext().getObjectProviderFactory().newForDetached(ec, pc, getObjectId(pc), null); pc.dnReplaceStateManager(op); op.retrieveDetachState(op);
/** * Convenience method to return the ObjectProvider for the specified value. * The return will never be null, since we always want to store all properties into the * owning object (for querying). * @param ammd Metadata for the member where this object is embedded * @param fieldNumber Field number in the owning object where this is embedded * @param value The embedded value (or null, maybe when retrieving) * @return ObjectProvider to use */ protected ObjectProvider getEmbeddedObjectProvider(Class type, int fieldNumber, Object value) { if (value == null) { value = JDOImplHelper.getInstance().newInstance(type, (javax.jdo.spi.StateManager)getObjectProvider()); } ObjectProvider embeddedOP = ec.findObjectProvider(value); if (embeddedOP == null) { embeddedOP = ObjectProviderFactory.newForEmbedded(ec, value, false, getObjectProvider(), fieldNumber); embeddedOP.setPcObjectType(ObjectProvider.EMBEDDED_PC); } return embeddedOP; }
op = ObjectProviderFactory.newForPersistentClean(ec, id, obj); op.provideFields(cmd.getAllMemberPositions(), new AssignStateManagerFieldManager(storeMgr, cont, op));
ObjectProvider op = ec.getNucleusContext().getObjectProviderFactory().newForDetached(ec, pc, getObjectId(pc), null); pc.dnReplaceStateManager(op); op.retrieveDetachState(op);
/** * Method to return the ObjectProvider for an embedded PC object (element, key, value). * It creates one if the element is not currently managed. * @param op ObjectProvider of the owner * @param obj The embedded PC object * @param ownerMmd The meta data for the owner field * @param pcType Object type for the embedded object (see ObjectProvider EMBEDDED_PC etc) * @return The ObjectProvider */ public ObjectProvider getObjectProviderForEmbeddedPCObject(ObjectProvider op, Object obj, AbstractMemberMetaData ownerMmd, short pcType) { ExecutionContext ec = op.getExecutionContext(); ObjectProvider objOP = ec.findObjectProvider(obj); if (objOP == null) { objOP = ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, obj, false, op, ownerMmd.getAbsoluteFieldNumber()); } objOP.setPcObjectType(pcType); return objOP; }
sm = ec.getNucleusContext().getObjectProviderFactory().newForPersistentClean(ec, id, obj); AbstractClassMetaData cmd = sm.getClassMetaData();
if (ec.findObjectProvider(key) == null || ec.getApiAdapter().getExecutionContext(key) == null) ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, key, false, ownerOP, mmd.getAbsoluteFieldNumber()); if (ec.findObjectProvider(val) == null || ec.getApiAdapter().getExecutionContext(val) == null) ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, val, false, ownerOP, mmd.getAbsoluteFieldNumber());
private void updateEmbedded(Object value) { if (value == null) { // create an instance with empty fields, this will null-out all embedded fields // TODO Populate the owner object in this call ObjectProvider embeddedSM = ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, effectiveClassMetaData, null, -1); int[] allMemberPositions = embeddedSM.getClassMetaData().getAllMemberPositions(); for (int i : allMemberPositions) { embeddedSM.makeDirty(i); } //get the dummy value value = embeddedSM.getObject(); } ObjectProvider embeddedSM = ec.findObjectProvider(value); boolean insert = false; if (embeddedSM == null) { embeddedSM = getEmbeddedObjectProvider(value); insert = true; } EmbeddedMetaData embeddedMetaData = mmd.getEmbeddedMetaData(); List<AbstractMemberMetaData> embeddedMmds = new ArrayList<AbstractMemberMetaData>(Arrays.asList(embeddedMetaData.getMemberMetaData())); updateMerge(embeddedSM, attributes, embeddedMmds, embeddedMetaData, insert); }
if (ec.findObjectProvider(key) == null || ec.getApiAdapter().getExecutionContext(key) == null) ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, key, false, ownerOP, mmd.getAbsoluteFieldNumber()); if (ec.findObjectProvider(val) == null || ec.getApiAdapter().getExecutionContext(val) == null) ec.getNucleusContext().getObjectProviderFactory().newForEmbedded(ec, val, false, ownerOP, mmd.getAbsoluteFieldNumber());