Package org.datanucleus

Examples of org.datanucleus.ExecutionContext


  public ListIterator listIterator(ObjectProvider op) {
    return listIterator(op, -1, -1);
  }

  protected ListIterator listIterator(ObjectProvider op, int startIdx, int endIdx) {
    ExecutionContext ec = op.getExecutionContext();
    if (MetaDataUtils.readRelatedKeysFromParent(storeMgr, ownerMemberMetaData)) {
      // Get child keys from property in owner Entity if the property exists
      Entity datastoreEntity = getOwnerEntity(op);
      String propName = EntityUtils.getPropertyName(storeMgr.getIdentifierFactory(), ownerMemberMetaData);
      if (datastoreEntity.hasProperty(propName)) {
        if (indexedList) {
          return getChildrenFromParentField(op, ec, startIdx, endIdx).listIterator();
        } else if (!MetaDataUtils.isOwnedRelation(ownerMemberMetaData, storeMgr)) {
          Object value = datastoreEntity.getProperty(propName);
          if (value == null || (value instanceof Collection && ((Collection)value).isEmpty())) {
            // No elements so just return
            return Utils.newArrayList().listIterator();
          }

          return getChildrenByKeys((List<Key>) value, ec); // TODO Use startIdx,endIdx
        } else {
          // TODO Get the objects and then order them in-memory using the order criteria
        }
      } else {
        if (op.getLifecycleState().isDeleted()) {
          // Object has been deleted so just return empty list
          return Utils.newArrayList().listIterator();
        }
      }
    }

    if (MetaDataUtils.isOwnedRelation(ownerMemberMetaData, storeMgr)) {
      // Get child keys by doing a query with the owner as the parent Entity
      Key parentKey = EntityUtils.getPrimaryKeyAsKey(ec.getApiAdapter(), op);
      return getChildrenUsingParentQuery(parentKey, getFilterPredicates(startIdx, endIdx), getSortPredicates(), ec).listIterator();
    } else {
      return Utils.newArrayList().listIterator();
    }
  }
View Full Code Here


  /* (non-Javadoc)
   * @see org.datanucleus.store.scostore.CollectionStore#remove(org.datanucleus.store.ObjectProvider, java.lang.Object, int, boolean)
   */
  public boolean remove(ObjectProvider op, Object element, int currentSize, boolean allowCascadeDelete) {
    ExecutionContext ec = op.getExecutionContext();
    if (!validateElementForReading(ec, element)) {
      return false;
    }

    Object elementToRemove = element;
    if (ec.getApiAdapter().isDetached(element)) {
      // Element passed in is detached so find attached version (DON'T attach this object)
      elementToRemove = ec.findObject(ec.getApiAdapter().getIdForObject(element), true, false,
          element.getClass().getName());
    }

    return internalRemove(op, elementToRemove, currentSize);
  }
View Full Code Here

      }
      removeAt(ownerOP, index, size);
    }
    else {
      // Ordered List - no index so null the FK (if nullable) or delete the element
      ExecutionContext ec = ownerOP.getExecutionContext();
      if (ownerMapping.isNullable()) {
        // Nullify the FK
        ObjectProvider elementSM = ec.findObjectProvider(element);
        if (relationType == RelationType.ONE_TO_MANY_BI) {
          // TODO This is ManagedRelations - move into RelationshipManager
          elementSM.replaceFieldMakeDirty(ownerMemberMetaData.getRelatedMemberMetaData(clr)[0].getAbsoluteFieldNumber(),
              null);
          if (ec.isFlushing()) {
            elementSM.flush();
          }
        } else {
          updateElementFk(ownerOP, element, null, -1);
          if (deleteElementsOnRemoveOrClear()) {
            // TODO If present elsewhere in List then don't delete the element from persistence
            ec.deleteObjectInternal(element);
          }
        }
      }
      else {
        // Delete the element
        ec.deleteObjectInternal(element);
      }
    }

    return true;
  }
View Full Code Here

    // Handle delete/nulling of the element - Use thread-local to prevent recurse
    if (removing.get()) {
      return;
    }
    boolean deleteElement = deleteElementsOnRemoveOrClear();
    ExecutionContext ec = ownerOP.getExecutionContext();
    Object element = get(ownerOP, index);
    try {
      removing.set(true);

      if (!deleteElement) {
        // Nullify the index of the element
        ObjectProvider elementOP = ec.findObjectProvider(element);
        if (elementOP != null && !ec.getApiAdapter().isDeleted(element)) {
          Entity elementEntity = getOwnerEntity(elementOP);
          if (!storeMgr.storageVersionAtLeast(StorageVersion.READ_OWNED_CHILD_KEYS_FROM_PARENTS)) {
            // Remove the external index property from the element
            elementEntity.removeProperty(getIndexPropertyName());
          }
          EntityUtils.putEntityIntoDatastore(ec, elementEntity);
        }
      } else {
        // Delete the element
        ec.deleteObjectInternal(element);
      }
    } finally {
      removing.set(false);
    }

    // TODO Don't bother with this if using latest storage version (but update tests too)
    // Not storing element keys in owner, so need to update the index property of following objects
    if (orderMapping != null) {
      // need to shift indexes of following elements down
      DatastoreServiceConfig config = storeMgr.getDefaultDatastoreServiceConfigForReads();
      DatastoreService service = DatastoreServiceFactoryInternal.getDatastoreService(config);
      AbstractClassMetaData acmd = elementCmd;
      String kind =
        storeMgr.getIdentifierFactory().newDatastoreContainerIdentifier(acmd).getIdentifierName();
      Query q = new Query(kind);
      Key key = EntityUtils.getPrimaryKeyAsKey(ec.getApiAdapter(), ownerOP);
      q.setAncestor(key);

      // create an entity just to capture the name of the index property
      Entity entity = new Entity(kind);
      orderMapping.setObject(ec, entity, new int[] {1}, index);
View Full Code Here

   * @see org.datanucleus.store.scostore.ListStore#get(org.datanucleus.store.ObjectProvider, int)
   */
  public Object get(ObjectProvider op, int index) {
    if (MetaDataUtils.readRelatedKeysFromParent(storeMgr, ownerMemberMetaData)) {
      // Get child keys from field in owner Entity
      ExecutionContext ec = op.getExecutionContext();
      Entity datastoreEntity = getOwnerEntity(op);
      String propName = EntityUtils.getPropertyName(storeMgr.getIdentifierFactory(), ownerMemberMetaData);
      if (datastoreEntity.hasProperty(propName)) {
        Object value = datastoreEntity.getProperty(propName);
        if (value == null) {
          return null;
        }

        List<Key> keys = (List<Key>)value;
        Key indexKey = keys.get(index);
        DatastoreServiceConfig config = storeMgr.getDefaultDatastoreServiceConfigForReads();
        DatastoreService ds = DatastoreServiceFactoryInternal.getDatastoreService(config);
        try {
          return EntityUtils.entityToPojo(ds.get(indexKey), elementCmd, clr, ec, false, ec.getFetchPlan());
        } catch (EntityNotFoundException enfe) {
          throw new NucleusDataStoreException("Could not determine entity for index=" + index + " with key=" + indexKey, enfe);
        }
      }
    } else {
View Full Code Here

     * @param ownerSM StateManager of the owner
     * @return StateManager of the embedded object
     */
    private ObjectProvider getStateManagerForEmbeddedObject(ObjectProvider ownerSM)
    {
        ExecutionContext ec = ownerSM.getExecutionContext();
        AbstractMemberMetaData theMmd = mmd;
        if (mmd.getParent() instanceof EmbeddedMetaData)
        {
            // Get the real owner classMetaData (when embedded the cmd is often the embedded)
            AbstractClassMetaData cmd = ec.getMetaDataManager().getMetaDataForClass(mmd.getClassName(), clr);
            theMmd = cmd.getMetaDataForMember(mmd.getName());
        }

        Object value = ownerSM.provideField(theMmd.getAbsoluteFieldNumber()); // Owner (non-embedded) PC
        if (value == null)
        {
            return null;
        }

        ObjectProvider thisSM = ec.findObjectProvider(value);
        if (thisSM == null)
        {
            // Assign a StateManager to manage our embedded object
            thisSM = ec.newObjectProviderForEmbedded(value, false, ownerSM, theMmd.getAbsoluteFieldNumber());
            thisSM.setPcObjectType(objectType);
        }

        return thisSM;
    }
View Full Code Here

  {
    if (elements == null || elements.size() == 0) {
      return null;
    }

    ExecutionContext ec = op.getExecutionContext();
    Iterator iter = elements.iterator();
    while (iter.hasNext()) {
      validateElementForReading(ec, iter.next());
    }

    // Since the datastore doesn't support 'or', we're going to sort the keys in memory.
    // issue an ancestor query that fetches all children between the first key and the last,
    // and then build the array of indices from there. The query may return entities that are
    // not in the elements so we have to be careful.
    if (elements.isEmpty()) {
      return new int[0];
    }

    if (MetaDataUtils.readRelatedKeysFromParent(storeMgr, ownerMemberMetaData)) {
      // Obtain via field of List<Key> in parent
      String propName = EntityUtils.getPropertyName(storeMgr.getIdentifierFactory(), ownerMemberMetaData);
      Entity ownerEntity = getOwnerEntity(op);
      if (ownerEntity.hasProperty(propName)) {
        Object value = ownerEntity.getProperty(propName);
        if (value == null) {
          return new int[0];
        }

        // Convert elements into list of keys to search for
        List<Key> keys = (List<Key>) value;
        Set<Key> elementKeys = Utils.newHashSet();
        for (Object element : elements) {
          Key key = EntityUtils.getKeyForObject(element, ec);
          if (key != null) {
            elementKeys.add(key);
          }
        }

        // Generate indices list for these elements
        int i = 0;
        List<Integer> indicesList = new ArrayList<Integer>();
        for (Key key : keys) {
          if (elementKeys.contains(key)) {
            indicesList.add(i);
          }
          i++;
        }
        int[] indices = new int[indicesList.size()];
        i = 0;
        for (Integer index : indicesList) {
          indices[i++] = index;
        }

        return indices;
      }
    } else {
      // Owned relation in earlier storage version so use parentKey to determine membership of list
      List<Key> keys = Utils.newArrayList();
      Set<Key> keySet = Utils.newHashSet();
      for (Object ele : elements) {
        ApiAdapter apiAdapter = ec.getApiAdapter();
        Object keyOrString =
          apiAdapter.getTargetKeyForSingleFieldIdentity(apiAdapter.getIdForObject(ele));
        Key key = keyOrString instanceof Key ? (Key) keyOrString : KeyFactory.stringToKey((String) keyOrString);
        if (key == null) {
          throw new NucleusUserException("Collection element does not have a primary key.");
View Full Code Here

  /* (non-Javadoc)
   * @see org.datanucleus.store.scostore.ListStore#indexOf(org.datanucleus.store.ObjectProvider, java.lang.Object)
   */
  public int indexOf(ObjectProvider op, Object element) {
    ExecutionContext ec = op.getExecutionContext();
    validateElementForReading(ec, element);

    ObjectProvider elementOP = ec.findObjectProvider(element);
    Key elementKey = EntityUtils.getPrimaryKeyAsKey(ec.getApiAdapter(), elementOP);
    if (elementKey == null) {
      // Not persistent
      return -1;
    }

View Full Code Here

  /* (non-Javadoc)
   * @see org.datanucleus.store.scostore.ListStore#lastIndexOf(org.datanucleus.store.ObjectProvider, java.lang.Object)
   */
  public int lastIndexOf(ObjectProvider op, Object element) {
    ExecutionContext ec = op.getExecutionContext();
    validateElementForReading(ec, element);
    ObjectProvider elementOP = ec.findObjectProvider(element);
    Key elementKey = EntityUtils.getPrimaryKeyAsKey(ec.getApiAdapter(), elementOP);
    if (elementKey == null) {
      // Not persistent
      return -1;
    }

View Full Code Here

     * @param value The overall value for this java type
     * @return The value for this datastore index
     */
    public Object getValueForDatastoreMapping(NucleusContext nucleusCtx, int index, Object value)
    {
        ExecutionContext ec = nucleusCtx.getApiAdapter().getExecutionContext(value);
        if (cmd == null)
        {
            cmd = nucleusCtx.getMetaDataManager().getMetaDataForClass(getType(),
                ec != null ? ec.getClassLoaderResolver() : nucleusCtx.getClassLoaderResolver(null));
        }

        if (cmd.getIdentityType() == IdentityType.APPLICATION)
        {
            AbstractMemberMetaData mmd =
                cmd.getMetaDataForManagedMemberAtAbsolutePosition(cmd.getPKMemberPositions()[index]);
            ObjectProvider sm = null;
            if (ec != null)
            {
                sm = ec.findObjectProvider(value);
            }

            if (sm == null)
            {
                // Transient or detached maybe, so use reflection to get PK field values
View Full Code Here

TOP

Related Classes of org.datanucleus.ExecutionContext

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.