Package com.webobjects.eoaccess

Examples of com.webobjects.eoaccess.EORelationship


                 String attributeName = (String) path.lastObject();
               String prefix = "";
                 if(path.count() > 1) {
                     for (int i = 0; i < path.count() - 1; i++) {
                         String part = (String) path.objectAtIndex(i);
                         EORelationship rel = entity.anyRelationshipNamed(part);
                         entity = rel.destinationEntity();
                         prefix += part + ".";
                     }
                 }
                     if(entity.attributeNamed(attributeName) == null) {
                       EOClassDescription cd = entity.classDescriptionForInstances();
View Full Code Here


      * @param editingContext the editingContext to fetch in
      * @param skipFaultedRelationships if true, skip any object whose relationship has already been faulted
      */
     public static void batchFetchRelationship(EODatabaseContext databaseContext, String entityName, String relationshipName, NSArray objects, EOEditingContext editingContext, boolean skipFaultedRelationships) {
       EOEntity entity = ERXEOAccessUtilities.entityNamed(editingContext, entityName);
       EORelationship relationship = entity.relationshipNamed(relationshipName);
       ERXEOAccessUtilities.batchFetchRelationship(databaseContext, relationship, objects, editingContext, skipFaultedRelationships);
     }
View Full Code Here

                 }

                 if (eo != null) {
                   Enumeration relationshipsEnum = entity.relationships().objectEnumerator();
                   while (relationshipsEnum.hasMoreElements()) {
                     EORelationship relationship = (EORelationship) relationshipsEnum.nextElement();
                     String relationshipName = relationship.name();
                     NSArray originalDestinationGIDs = database.snapshotForSourceGlobalID(keyGID, relationshipName);
                     if (originalDestinationGIDs != null) {
                       NSMutableArray newDestinationGIDs = new NSMutableArray();
                       EOQualifier qualifier = relationship.qualifierWithSourceRow(database.snapshotForGlobalID(keyGID));
                       EOFetchSpecification relationshipFetchSpec = new EOFetchSpecification(entityName, qualifier, null);
                       EOAdaptorChannel channel = databaseContext.availableChannel().adaptorChannel();
                       channel.openChannel();
                       try {
                         channel.selectAttributes(relationship.destinationEntity().attributesToFetch(), relationshipFetchSpec, false, relationship.destinationEntity());
                         NSDictionary destinationSnapshot = null;
                         do {
                           destinationSnapshot = channel.fetchRow();
                           if (destinationSnapshot != null) {
                             EOGlobalID destinationGID = relationship.destinationEntity().globalIDForRow(destinationSnapshot);
                             newDestinationGIDs.addObject(destinationGID);
                           }
                         }
                         while (destinationSnapshot != null);
                       }
View Full Code Here

      log.warn("If you programatically add relationships to an abstract entity, make sure you also add it to child entities");
    EOEntity destinationEntity = EOModelGroup.defaultGroup().entityNamed(destinationEntityName);
    EOAttribute sourceAttribute = sourceEntity.attributeNamed(sourceAttributeName);
    EOAttribute destinationAttribute = destinationEntity.attributeNamed(destinationAttributeName);
    EOJoin join = new EOJoin(sourceAttribute, destinationAttribute);
    EORelationship relationship = new EORelationship();

    relationship.setName(relationshipName);
    sourceEntity.addRelationship(relationship);
    relationship.addJoin(join);
    relationship.setToMany(toMany);
    relationship.setJoinSemantic(EORelationship.InnerJoin);
    relationship.setDeleteRule(deleteRule);
    relationship.setIsMandatory(isMandatory);
    relationship.setPropagatesPrimaryKey(shouldPropagatePrimaryKey);
    NSMutableArray<EOProperty> classProperties = sourceEntity.classProperties().mutableClone();
    if (isClassProperty && !classProperties.containsObject(relationship)) {
      classProperties.addObject(relationship);
      sourceEntity.setClassProperties(classProperties);
    } else if (!isClassProperty && classProperties.containsObject(relationship)) {
View Full Code Here

    if(sourceEntity.isAbstractEntity())
      log.warn("If you programatically add relationships to an abstract entity, make sure you also add it to child entities");

    // order is important here!
    // first create relationship and set name
    EORelationship relationship = new EORelationship();
    relationship.setName(relationshipName);
    // then add to entity (will only work if name is set!)
    sourceEntity.addRelationship(relationship);
    relationship.setDeleteRule(deleteRule);
    relationship.setIsMandatory(isMandatory);
    // finally set definition (only will work if assigned to entity!)
    relationship.setDefinition(definition);
    if (isClassProperty) {
      NSMutableArray<EOProperty> classProperties = sourceEntity.classProperties().mutableClone();
      classProperties.addObject(relationship);
      sourceEntity.setClassProperties(classProperties);
    }
    if(log.isDebugEnabled())
        log.debug(relationship + ", flattened:" + relationship.isFlattened() + ", definition:" + relationship.definition() + ", relationshipPath:" + relationship.relationshipPath());
    return relationship;
  }
View Full Code Here

   * @param tagEntity the tag entity
   * @return the flattened to-many relationship between them (or null if there isn't one)
   */
  @SuppressWarnings("unchecked")
  public static EORelationship tagsRelationshipForEntity(EOEntity entity, EOEntity tagEntity) {
    EORelationship tagsRelationship = null;
    for (EORelationship relationship : entity.relationships()) {
      if (relationship.isFlattened() && tagEntity.name().equals(relationship.destinationEntity().name())) {
        tagsRelationship = relationship;
        break;
      }
View Full Code Here

   * @param taggableEntity the taggable entity to associate with this taggable
   * @return the join entity (you can probably ignore this)
   */
  @SuppressWarnings("unchecked")
  public static EOEntity registerTaggable(EOEntity entity, String tagsRelationshipName, EOEntity tagEntity, Class<? extends ERTaggableEntity<?>> taggableEntity) {
    EORelationship tagsRelationship;
    if (tagsRelationshipName == null) {
      tagsRelationship = ERTaggableEntity.tagsRelationshipForEntity(entity, tagEntity);
    }
    else {
      tagsRelationship = entity.relationshipNamed(tagsRelationshipName);
    }

    EOEntity joinEntity = null;
    if (tagsRelationship == null) {
      joinEntity = new EOEntity();
      joinEntity.setName(entity.name() + "Tag");
      joinEntity.setExternalName(joinEntity.name());

      EORelationship joinToItemRelationship = new EORelationship();
      joinToItemRelationship.setName(entity.name());
      joinToItemRelationship.setIsMandatory(true);
      joinToItemRelationship.setToMany(false);
      joinToItemRelationship.setJoinSemantic(EORelationship.InnerJoin);
      joinEntity.addRelationship(joinToItemRelationship);
      for (EOAttribute itemPrimaryKey : entity.primaryKeyAttributes()) {
        EOAttribute itemFKAttribute = new EOAttribute();
        itemFKAttribute.setExternalType(itemPrimaryKey.externalType());
        itemFKAttribute.setValueType(itemPrimaryKey.valueType());
        itemFKAttribute.setName("item_" + itemPrimaryKey.name());
        itemFKAttribute.setColumnName("item_" + itemPrimaryKey.columnName());
        itemFKAttribute.setClassName(itemPrimaryKey.className());
        itemFKAttribute.setWidth(itemPrimaryKey.width());
        itemFKAttribute.setPrecision(itemPrimaryKey.precision());
        itemFKAttribute.setScale(itemPrimaryKey.scale());
        itemFKAttribute.setAllowsNull(false);
        joinEntity.addAttribute(itemFKAttribute);

        EOJoin join = new EOJoin(itemFKAttribute, itemPrimaryKey);
        joinToItemRelationship.addJoin(join);
      }

      EORelationship joinToTagRelationship = new EORelationship();
      joinToTagRelationship.setName(tagEntity.name());
      joinToTagRelationship.setIsMandatory(true);
      joinToTagRelationship.setToMany(false);
      joinToTagRelationship.setJoinSemantic(EORelationship.InnerJoin);
      joinEntity.addRelationship(joinToTagRelationship);
      for (EOAttribute tagPrimaryKey : tagEntity.primaryKeyAttributes()) {
        EOAttribute tagFKAttribute = new EOAttribute();
        tagFKAttribute.setExternalType(tagPrimaryKey.externalType());
        tagFKAttribute.setValueType(tagPrimaryKey.valueType());
        tagFKAttribute.setName("tag_" + tagPrimaryKey.name());
        tagFKAttribute.setColumnName("tag_" + tagPrimaryKey.columnName());
        tagFKAttribute.setClassName(tagPrimaryKey.className());
        tagFKAttribute.setWidth(tagPrimaryKey.width());
        tagFKAttribute.setPrecision(tagPrimaryKey.precision());
        tagFKAttribute.setScale(tagPrimaryKey.scale());
        tagFKAttribute.setAllowsNull(false);
        joinEntity.addAttribute(tagFKAttribute);

        joinToTagRelationship.addJoin(new EOJoin(tagFKAttribute, tagPrimaryKey));
      }

      joinEntity.setPrimaryKeyAttributes(joinEntity.attributes());
      joinEntity.setAttributesUsedForLocking(joinEntity.attributes());
      entity.model().addEntity(joinEntity);

      EORelationship itemToJoinRelationship = new EORelationship();
      itemToJoinRelationship.setEntity(joinToItemRelationship.destinationEntity());
      itemToJoinRelationship.setName("_eofInv_" + joinToItemRelationship.entity().name() + "_" + joinToItemRelationship.name());
      NSArray<EOJoin> joinToItemRelationshipJoins = joinToItemRelationship.joins();
      for (int joinNum = joinToItemRelationshipJoins.count() - 1; joinNum >= 0; joinNum--) {
        EOJoin join = joinToItemRelationshipJoins.objectAtIndex(joinNum);
        EOJoin inverseJoin = new EOJoin(join.destinationAttribute(), join.sourceAttribute());
        itemToJoinRelationship.addJoin(inverseJoin);
      }
      itemToJoinRelationship.setDeleteRule(1); // cascade
      itemToJoinRelationship.setJoinSemantic(EORelationship.InnerJoin);
      itemToJoinRelationship.setToMany(true);
      itemToJoinRelationship.setPropagatesPrimaryKey(true);
      entity.addRelationship(itemToJoinRelationship);

      NSMutableArray properties = entity.classProperties().mutableClone();
      properties.remove(itemToJoinRelationship);
      entity.setClassProperties(properties);

      EORelationship itemToTagsRelationship = new EORelationship();
      itemToTagsRelationship.setName(tagsRelationshipName);
      entity.addRelationship(itemToTagsRelationship);
      itemToTagsRelationship.setDefinition(itemToJoinRelationship.name() + "." + joinToTagRelationship.name());

      tagsRelationship = itemToTagsRelationship;
    }
    else if (!tagsRelationship.isFlattened()) {
      throw new IllegalArgumentException("The relationship '" + tagsRelationship.name() + "' on '" + entity.name() + "' must be flattened.");
    }
    else {
      EORelationship itemToJoinRelationship = (EORelationship) tagsRelationship.componentRelationships().objectAtIndex(0);
      joinEntity = itemToJoinRelationship.destinationEntity();
    }

    NSMutableDictionary userInfo = entity.userInfo().mutableClone();
    userInfo.setObjectForKey(Boolean.TRUE, ERTaggableEntity.ERTAGGABLE_KEY);
    userInfo.setObjectForKey(tagsRelationship.name(), ERTaggableEntity.ERTAGGABLE_TAG_RELATIONSHIP_KEY);
View Full Code Here

    public void addPreferenceRelationshipToActorEntity(String entityName, String attributeNameToJoin) {
        EOEntity actor = EOModelGroup.defaultGroup().entityNamed(entityName);
        EOEntity preference = EOModelGroup.defaultGroup().entityNamed("ERCPreference");

        EOJoin preferencesJoin = new EOJoin(actor.attributeNamed(attributeNameToJoin), preference.attributeNamed("userID"));
        EORelationship preferencesRelationship = new EORelationship();

        preferencesRelationship.setName("preferences");
        actor.addRelationship(preferencesRelationship);
        preferencesRelationship.addJoin(preferencesJoin);
        preferencesRelationship.setToMany(true);
        preferencesRelationship.setJoinSemantic(EORelationship.InnerJoin);
        preferencesRelationship.setDeleteRule(EOEntityClassDescription.DeleteRuleCascade);
       
        EOJoin userJoin = new EOJoin(preference.attributeNamed("userID"), actor.attributeNamed(attributeNameToJoin) );
        EORelationship userRelationship = new EORelationship();
        userRelationship.setName("user");
        preference.addRelationship(userRelationship);
        userRelationship.addJoin(userJoin);
        userRelationship.setToMany(false);
        userRelationship.setJoinSemantic(EORelationship.InnerJoin);
    }
View Full Code Here

  // IDs
 
  public String idForMainContainer(D2WContext c) {
        String idForMainContainer = "MUC_" + idForPageConfiguration(c);
        if (c.valueForKey("currentRelationship") != null) {
            EORelationship relationship = (EORelationship) c
                    .valueForKey("currentRelationship");
            // use currentRelationship key to create unique ID (wonder-140)
            idForMainContainer = idForMainContainer.concat("_" + relationship.name());
        }
        return idForMainContainer;
  }
View Full Code Here

  }
 
  public String idForParentMainContainer(D2WContext c) {
        String idForParentMainContainer = "MUC_" + idForParentPageConfiguration(c);
        if (c.valueForKey("parentRelationship") != null) {
            EORelationship parentRelationship = (EORelationship) c
                    .valueForKey("parentRelationship");
            // use parentRelationship key to create unique parent ID
            // (wonder-140)
            idForParentMainContainer = idForParentMainContainer.concat("_"
                    + parentRelationship.name());
        }
        return idForParentMainContainer;
  }
View Full Code Here

TOP

Related Classes of com.webobjects.eoaccess.EORelationship

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.