Package siena

Examples of siena.ClassInfo


    for(Key key:keyMap.keySet()){
      Map<Field, List<Object>> objectMap = keyMap.get(key);
      for(Field field: objectMap.keySet()){
        for(Object obj:objectMap.get(field)){
          Class<?> clazz = obj.getClass();
          ClassInfo info = ClassInfo.getClassInfo(clazz);
          Field idField = info.getIdField();
          Entity entity = GaeMappingUtils.createEntityInstanceFromParent(idField, info, obj, key, parentInfos.get(i), field);
          GaeMappingUtils.fillEntity(obj, entity);
          entities.add(entity);
        }
      }
      i++;
    }
   
    List<Key> generatedKeys = ds.put(entities);
   
    i=0;
    Map<Key, Map<Field, List<Object>>> recKeyMap = new HashMap<Key, Map<Field, List<Object>>>();
    List<ClassInfo> recInfos = new ArrayList<ClassInfo>();
    for(Key key:keyMap.keySet()){
      Map<Field, List<Object>> objectMap = keyMap.get(key);
      for(Field field: objectMap.keySet()){
        for(Object obj:objectMap.get(field)){
          Class<?> clazz = obj.getClass();
          ClassInfo info = ClassInfo.getClassInfo(clazz);
          Field idField = info.getIdField();
          GaeMappingUtils.setIdFromKey(idField, obj, generatedKeys.get(i));
         
          if(info.hasAggregatedFields){
            recInfos.add(info);
            Map<Field, List<Object>> recObjectMap = new HashMap<Field, List<Object>>();   
View Full Code Here


  }

 
  public void update(Object obj) {
    Class<?> clazz = obj.getClass();
    ClassInfo info = ClassInfo.getClassInfo(clazz);
   
    if(info.hasAggregator){
      Relation rel = (Relation)Util.readField(obj, info.aggregator);
      if(rel != null && rel.mode == RelationMode.AGGREGATION){
        ClassInfo parentInfo = ClassInfo.getClassInfo(rel.target.getClass());
        Key parentKey = GaeMappingUtils.makeKey(parentInfo, rel.target);
        if(!info.hasAggregatedFields && !info.hasOwnedFields){
          _updateSimple(obj, info, parentKey, parentInfo, (Field)rel.discriminator);
        }
        else {
View Full Code Here

  }
 
  private <T> void _updateSimpleMultiple(Iterable<T> objs, Key parentKey, ClassInfo parentInfo, Field parentField){
    List<Entity> entities = new ArrayList<Entity>();
   
    ClassInfo info = null
    Field idField = null;
   
    for(T obj: objs){
      if(info == null){
        info = ClassInfo.getClassInfo(obj.getClass());
        idField = info.getIdField();
      }
     
      Entity entity;
      Object idVal = Util.readField(obj, idField);
      // id with null value means insert
View Full Code Here

    HashMap<PersistenceType, List<Object>> objectsMap = new HashMap<PersistenceType, List<Object>>();
    HashMap<PersistenceType, List<Key>> keysMap = new HashMap<PersistenceType, List<Key>>();

    for(Object obj:objects){
      Class<?> clazz = obj.getClass();
      ClassInfo info = ClassInfo.getClassInfo(clazz);
     
      if(info.hasAggregator){
        Relation rel = (Relation)Util.readField(obj, info.aggregator);
        if(rel != null && rel.mode == RelationMode.AGGREGATION){
          ClassInfo parentInfo = ClassInfo.getClassInfo(rel.target.getClass());
          Key parentKey = GaeMappingUtils.makeKey(parentInfo, rel.target);
          _updateBuildMaps(entitiesMap, objectsMap, keysMap,
              obj, parentKey, parentInfo, (Field)rel.discriminator);
        }else {
          _updateBuildMaps(entitiesMap, objectsMap, keysMap,
View Full Code Here

      HashMap<PersistenceType, List<Entity>> entitiesMap,
      HashMap<PersistenceType, List<Object>> objectsMap,
      HashMap<PersistenceType, List<Key>> keysMap,
      Object obj, Key parentKey, ClassInfo parentInfo, Field parentField){
    Class<?> clazz = obj.getClass();
    ClassInfo info = ClassInfo.getClassInfo(clazz);
    Field idField = info.getIdField();
   
    Entity entity;
   
    Object idVal = Util.readField(obj, idField);
    // id with null value means insert
    if(idVal == null){
      if(parentKey==null){
        entity = GaeMappingUtils.createEntityInstance(idField, info, obj);
      }else {
        entity = GaeMappingUtils.createEntityInstanceFromParent(idField, info, obj, parentKey, parentInfo, parentField);
      }
      GaeMappingUtils.fillEntity(obj, entity);   
      List<Entity> entities2Insert = entitiesMap.get(PersistenceType.INSERT);
      if(entities2Insert == null){
        entities2Insert = new ArrayList<Entity>();
        entitiesMap.put(PersistenceType.INSERT, entities2Insert);
      }
      entities2Insert.add(entity);
      List<Object> objects2Insert = objectsMap.get(PersistenceType.INSERT);
      if(objects2Insert == null){
        objects2Insert = new ArrayList<Object>();
        objectsMap.put(PersistenceType.INSERT, objects2Insert);
      }
      objects2Insert.add(obj);
    }else {
      if(parentKey == null){
        entity = GaeMappingUtils.createEntityInstanceForUpdate(info, obj);
      }else {
        entity = GaeMappingUtils.createEntityInstanceForUpdateFromParent(
            info, obj, parentKey, parentInfo, parentField);
      }
      GaeMappingUtils.fillEntity(obj, entity);   
      List<Entity> entities2Update = entitiesMap.get(PersistenceType.UPDATE);
      if(entities2Update == null){
        entities2Update = new ArrayList<Entity>();
        entitiesMap.put(PersistenceType.UPDATE, entities2Update);
      }
      entities2Update.add(entity);
    }

    for(Field f: info.ownedFields){
      // doesn't do anything with One<T>
      if(ClassInfo.isOne(f)){
        // set the owner field in the child object using the content of the one
        One4PM<?> relObj = (One4PM<?>)Util.readField(obj, f);
        Map<FieldMapKeys, Object> m = info.oneFieldMap.get(f);
        if(m != null){
          Field asField = (Field)m.get(FieldMapKeys.FIELD);
          if(relObj.isModified()){
            // unassociates previous object
            Object prevObj =relObj.getPrev();
            if(prevObj != null){
              Util.setField(prevObj, asField, null);
            }
            // resets modified flag
            relObj.setModified(false);
            List<Object> objects2Save = objectsMap.get(PersistenceType.SAVE);
            if(objects2Save == null){
              objects2Save = new ArrayList<Object>();
              objectsMap.put(PersistenceType.SAVE, objects2Save);
            }
            objects2Save.add(prevObj);
           
            Object oneObj = relObj.get();
            if(oneObj != null){
              Util.setField(oneObj, asField, obj);
              objects2Save.add(oneObj);
            }
          }         
        }
      }else if(ClassInfo.isMany(f)){
        Many4PM<?> lq = (Many4PM<?>)Util.readField(obj, f);
       
        // when you remove an element from a Many<T>, it just removes the link
        if(!lq.asList2Remove().isEmpty()){
          Field asField = (Field)info.manyFieldMap.get(f).get(FieldMapKeys.FIELD);
          for(Object elt : lq.asList2Remove()){
            Util.setField(elt, asField, null);
            List<Object> objects2Save = objectsMap.get(PersistenceType.SAVE);
            if(objects2Save == null){
              objects2Save = new ArrayList<Object>();
              objectsMap.put(PersistenceType.SAVE, objects2Save);
            }
            objects2Save.add(elt);
          }         
          lq.asList2Remove().clear();
        }
        if(!lq.asList2Add().isEmpty()){
          Field asField = (Field)info.manyFieldMap.get(f).get(FieldMapKeys.FIELD);
          for(Object elt : lq.asList2Add()){
            Util.setField(elt, asField, obj);
            List<Object> objects2Save = objectsMap.get(PersistenceType.SAVE);
            if(objects2Save == null){
              objects2Save = new ArrayList<Object>();
              objectsMap.put(PersistenceType.SAVE, objects2Save);
            }
            objects2Save.add(elt);
          }
          lq.asList2Add().clear();
        }
      }
    }     
   
    for(Field f: info.aggregatedFields){
      if(ClassInfo.isOne(f)){
        One4PM<?> one = (One4PM<?>)Util.readField(obj, f);
        if(one.isModified()){
          // deletes previous object
          Object prevObj =one.getPrev();
          if(prevObj != null){
            Class<?> delClazz = prevObj.getClass();
            ClassInfo delInfo = ClassInfo.getClassInfo(delClazz);

            Key delKey = GaeMappingUtils.makeKeyFromParent(
                  delInfo, prevObj, entity.getKey(), info, f);
           
            List<Key> key2Remove = keysMap.get(PersistenceType.DELETE);
            if(key2Remove == null){
              key2Remove = new ArrayList<Key>();
              keysMap.put(PersistenceType.DELETE, key2Remove);
            }
            key2Remove.add(delKey);
          }
          // resets modified flag
          one.setModified(false);
         
          Object oneObj = one.get();
          if(oneObj != null){
            _updateBuildMaps(entitiesMap, objectsMap, keysMap, oneObj, entity.getKey(), info, f);
          }
        }
       
      }
      else if(ClassInfo.isMany(f)){
        Many4PM<?> lq = (Many4PM<?>)Util.readField(obj, f);
        // do not update all objects, would be crazy :)
        // UPDATE IS THE RESPONSABILITY OF THE CODER
        /*if(!lq.asList().isEmpty()){
          for(Object elt : lq.asList()){
            _buildUpdateList(entities, entities2Remove, objects2Save, elt, entity.getKey(), info, f);
          }         
        }*/
       
        // add to entities2remove child entities that have been removed
        if(!lq.asList2Remove().isEmpty()){
          Key delKey;
          for(Object elt : lq.asList2Remove()){
            Class<?> delClazz = elt.getClass();
            ClassInfo delInfo = ClassInfo.getClassInfo(delClazz);

            delKey = GaeMappingUtils.makeKeyFromParent(
                  delInfo, elt, entity.getKey(), info, f);
           
            List<Key> key2Remove = keysMap.get(PersistenceType.DELETE);
View Full Code Here

      List<Key> generatedKeys = ds.put(entities);
     
      int i=0;
      for(Object elt:objectsMap.get(PersistenceType.INSERT)){
        Class<?> clazz = elt.getClass();
        ClassInfo info = ClassInfo.getClassInfo(clazz);
        Field idField = info.getIdField();
        GaeMappingUtils.setIdFromKey(idField, elt, generatedKeys.get(i));
      }
     
      nb += generatedKeys.size();
    }
View Full Code Here

  }
 
 
  public void save(Object obj) {
    Class<?> clazz = obj.getClass();
    ClassInfo info = ClassInfo.getClassInfo(clazz);
    Field idField = info.getIdField();
   
    //Entity entity;
    Object idVal = Util.readField(obj, idField);
    // id with null value means insert
    if(idVal == null){
View Full Code Here


 
  private <T> PreparedQuery prepare(Query<T> query) {
    Class<?> clazz = query.getQueriedClass();
    ClassInfo info = ClassInfo.getClassInfo(clazz);
    com.google.appengine.api.datastore.Query q;

    // manages aggregation at first
    List<QueryAggregated> aggregs = query.getAggregatees();
    if(aggregs.isEmpty()){
View Full Code Here

   
  }

  private <T> PreparedQuery prepareKeysOnly(Query<T> query) {
    Class<?> clazz = query.getQueriedClass();
    ClassInfo info = ClassInfo.getClassInfo(clazz);
    com.google.appengine.api.datastore.Query q;

    // manages aggregation at first
    List<QueryAggregated> aggregs = query.getAggregatees();
    if(aggregs.isEmpty()){
View Full Code Here

 
  protected <T> void fillAggregated(ClassInfo info, T ancestor, Key ancestorKey) {
    // now gets aggregated one2one (one2many are retrieved by ListQuery except with @Join)
    for(Field f:info.aggregatedFields){
      Class<?> cClazz = f.getType();
      ClassInfo cInfo = ClassInfo.getClassInfo(cClazz);
      if(ClassInfo.isModel(cClazz)){
        // creates a query for fieldname:child_tablename
        com.google.appengine.api.datastore.Query q =
          new com.google.appengine.api.datastore.Query(GaeMappingUtils.getKindWithAncestorField(cInfo, info, f));
View Full Code Here

TOP

Related Classes of siena.ClassInfo

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.