Examples of BeanWrapper


Examples of org.springframework.beans.BeanWrapper

    tb1.setNestedIndexedBean(new IndexedTestBean());
    tb2.setNestedIndexedBean(new IndexedTestBean());
    tb3.setNestedIndexedBean(new IndexedTestBean());
    tb4.setNestedIndexedBean(new IndexedTestBean());
    tb5.setNestedIndexedBean(new IndexedTestBean());
    BeanWrapper bw = new BeanWrapperImpl(bean);
    bw.registerCustomEditor(String.class, "array[0].nestedIndexedBean.array[0].name", new PropertyEditorSupport() {
      public void setAsText(String text) throws IllegalArgumentException {
        setValue("array" + text);
      }
    });
    bw.registerCustomEditor(String.class, "list.nestedIndexedBean.list[1].name", new PropertyEditorSupport() {
      public void setAsText(String text) throws IllegalArgumentException {
        setValue("list" + text);
      }
    });
    bw.registerCustomEditor(String.class, "map[key1].nestedIndexedBean.map.name", new PropertyEditorSupport() {
      public void setAsText(String text) throws IllegalArgumentException {
        setValue("map" + text);
      }
    });

    MutablePropertyValues pvs = new MutablePropertyValues();
    pvs.addPropertyValue("array[0].nestedIndexedBean.array[0].name", "name5");
    pvs.addPropertyValue("array[1].nestedIndexedBean.array[1].name", "name4");
    pvs.addPropertyValue("list[0].nestedIndexedBean.list[0].name", "name3");
    pvs.addPropertyValue("list[1].nestedIndexedBean.list[1].name", "name2");
    pvs.addPropertyValue("map[key1].nestedIndexedBean.map[\"key1\"].name", "name1");
    pvs.addPropertyValue("map['key2'].nestedIndexedBean.map[key2].name", "name0");
    bw.setPropertyValues(pvs);
    assertEquals("arrayname5", tb0.getNestedIndexedBean().getArray()[0].getName());
    assertEquals("name4", tb1.getNestedIndexedBean().getArray()[1].getName());
    assertEquals("name3", ((TestBean) tb2.getNestedIndexedBean().getList().get(0)).getName());
    assertEquals("listname2", ((TestBean) tb3.getNestedIndexedBean().getList().get(1)).getName());
    assertEquals("mapname1", ((TestBean) tb4.getNestedIndexedBean().getMap().get("key1")).getName());
View Full Code Here

Examples of org.springframework.data.mapping.model.BeanWrapper

    write(source, target, entity);
  }

  @SuppressWarnings("rawtypes")
  protected void write(Object source, final Map target, SolrPersistentEntity<?> entity) {
    final BeanWrapper wrapper = BeanWrapper.create(source, getConversionService());

    entity.doWithProperties(new PropertyHandler<SolrPersistentProperty>() {

      @SuppressWarnings({ "unchecked" })
      @Override
      public void doWithPersistentProperty(SolrPersistentProperty persistentProperty) {

        Object value = wrapper.getProperty(persistentProperty, persistentProperty.getType());
        if (value == null || persistentProperty.isReadonly()) {
          return;
        }

        if (persistentProperty.containsWildcard() && !persistentProperty.isMap()) {
View Full Code Here

Examples of play.data.binding.BeanWrapper

        return null != k ? siena.Util.readField(obj, k) : null;
    }
 
  public static <T> T edit(T o, String name, Map<String, String[]> params, Annotation[] annotations) {
    try {
      BeanWrapper bw = new BeanWrapper(o.getClass());
      // Start with relations
      Class<?> spClazz = o.getClass();
      /*Set<Field> fields = new HashSet<Field>();
      while (spClazz!=null) {
        Collections.addAll(fields, spClazz.getDeclaredFields());
        spClazz = spClazz.getSuperclass();
      }*/
      for (Field field : ClassInfo.getClassInfo(spClazz).allExtendedFields) {
        boolean isEntity = false;
        boolean isJson = false;
        String relation = null;
        boolean multiple = false;
        String owner = null;
        Class<?> clazz = field.getType();

        // ONE TO MANY or ONE TO ONE association
        if(ClassInfo.isModel(clazz)) {
          isEntity = true;
          relation = clazz.getName();
        }

        // MANY TO ONE association
        // type QUERY<T> + annotation @Filter
        else if(siena.Query.class.isAssignableFrom(clazz)){
          isEntity = true;
          multiple = true;
          Class<?> fieldType =
            (Class<?>) ((ParameterizedType)
                field.getGenericType()).getActualTypeArguments()[0];
          relation = fieldType.getName();
          owner = field.getAnnotation(Filter.class).value();
          // by default, takes the type of the parent entity in lower case
          if(owner == null || "".equals(owner)){
            owner = o.getClass().getName().toLowerCase();
          }
        }
        else if(Json.class.isAssignableFrom(clazz)){
          isJson = true;
        }
        else if(field.isAnnotationPresent(Embedded.class)){
          if(List.class.isAssignableFrom(clazz)){
            multiple = true;
                }
          else if(Map.class.isAssignableFrom(clazz)){
            multiple = true;
                }
                else {
                  multiple = false;
                }
        }
        else if(byte[].class.isAssignableFrom(clazz)
            /*|| Blob.class.isAssignableFrom(field.getType())*/)
        {
          // if params is present but empty, resets the older value
          @SuppressWarnings("unused")
          String[] posted = params.get(name + "." + field.getName());
          // TODO
          @SuppressWarnings("unused")
          Object val = field.get(o)
          //params.put(name + "." + field.getName(), val);
        }
       
        if (isEntity) {
          // builds entity list for many to one
          if (multiple) {
            // retrieves list to synchronize new and removed objects
            Query<?> q = (Query<?>)siena.Util.readField(o, field);
            // no limitation for the time being
            List<?> relObjs = q.fetch();

            @SuppressWarnings("unchecked")
            Class<? extends siena.Model> relClass = (Class<? extends siena.Model>)Play.classloader.loadClass(relation);
            String idName = keyName(relClass);
            String[] ids = params.get(name + "." + field.getName() + "@"+idName);
            if(ids == null) {
              ids = params.get(name + "." + field.getName() + "."+idName);
            }

            if (ids != null) {             
              params.remove(name + "." + field.getName() + "."+idName);
              params.remove(name + "." + field.getName() + "@"+idName);
             
              Field ownerField = siena.Util.getField(relClass, owner);
              for (String _id : ids) {
                if (_id.equals("")) {
                  continue;
                }
                Object idVal = Binder.directBind(_id, keyType(relClass));
               
                // verifies the field is not already owned by the object
                // if yes, no need to resave it with this owner
                boolean b = false;
                for(Object relObj:relObjs){
                  Object keyRelObj = keyValue(relObj);
                  if(keyRelObj != null && keyRelObj.equals(idVal)){
                    relObjs.remove(relObj);
                    b = true;
                    break;
                  }
                }
                if(!b){
                  siena.Model res =
                    siena.Model.all(relClass)
                      .filter(idName, idVal)
                      .get();
                  if(res!=null){
                    // sets the object to the owner field into the relation entity
                   
                    if(ownerField == null) {
                      throw new UnexpectedException("In related Model "+relClass.getName()+" owner field '"+owner+"' not found");
                    }
                    siena.Util.setField(res, ownerField, o);
                    res.save();
                  }
                   
                  else Validation.addError(name+"."+field.getName(), "validation.notFound", _id);
                }
               
              }
              // now remaining objects have to be unowned
              for(Object relObj:relObjs){
                siena.Util.setField(relObj, ownerField, null);
                SienaPlugin.pm().save(relObj);
              }

              // can't set arraylist to Query<T>
              // bw.set(field.getName(), o, l);
            }
          }
          // builds simple entity for simple association
          else {
            @SuppressWarnings("unchecked")
            Class<? extends siena.Model> relClass = (Class<? extends siena.Model>)Play.classloader.loadClass(relation);
            String idName = keyName(relClass);
            String[] ids = params.get(name + "." + field.getName() + "@"+idName);
            if(ids == null) {
              ids = params.get(name + "." + field.getName() + "."+idName);
            }
            if (ids != null && ids.length > 0 && !ids[0].equals("")) {
              params.remove(name + "." + field.getName() + "."+idName);
              params.remove(name + "." + field.getName() + "@"+idName);

              siena.Model res =
                siena.Model.all(relClass)
                  .filter(idName, Binder.directBind(ids[0], keyType(relClass)))
                  .get();
              if(res!=null)
                bw.set(field.getName(), o, res);
              else Validation.addError(name+"."+field.getName(), "validation.notFound", ids[0]);

            } else if(ids != null && ids.length > 0 && ids[0].equals("")) {
              bw.set(field.getName(), o , null);
              params.remove(name + "." + field.getName() + "."+idName);
              params.remove(name + "." + field.getName() + "@"+idName);
            }
          }                   
        }
        else if(isJson){
          String[] jsonStr = params.get(name + "." + field.getName());
          if (jsonStr != null && jsonStr.length > 0 && !jsonStr[0].equals("")) {
            try {
              //com.google.gson.JsonParser parser = new com.google.gson.JsonParser();
              //parser.parse(jsonStr[0]);
             
              Json json = Json.loads(jsonStr[0]);
              if(json!=null){
                bw.set(field.getName(), o, json);
                params.remove(name + "." + field.getName());
              }
              else Validation.addError(name+"."+field.getName(), "validation.notParsable");
            }catch(JsonParseException ex){
              ex.printStackTrace();
              Logger.error("json parserdelete exception:%s",
                  ex.getCause()!=null?ex.getCause().getMessage(): ex.getMessage());
              Validation.addError(
                  name+"."+field.getName(),
                  "validation.notParsable",
                  ex.getCause()!=null?ex.getCause().getMessage(): ex.getMessage());
            }catch(SienaException ex){
              ex.printStackTrace();
              Logger.error("json parserdelete exception:%s",
                  ex.getCause()!=null?ex.getCause().getMessage(): ex.getMessage());
              Validation.addError(
                  name+"."+field.getName(),
                  "validation.notParsable",
                  ex.getCause()!=null?ex.getCause().getMessage(): ex.getMessage());
            }
            catch(IllegalArgumentException ex){
              ex.printStackTrace();
              Logger.error("json parser exception:%s",
                  ex.getCause()!=null?ex.getCause().getMessage(): ex.getMessage());
              Validation.addError(
                  name+"."+field.getName(),
                  "validation.notParsable",
                  ex.getCause()!=null?ex.getCause().getMessage(): ex.getMessage());
            }
          }
        } 
      }
      // Then bind
      // all composites objects (simple entity, list and maps) are managed
      // by this function
      // v1.0.x code
      // bw.bind(name, o.getClass(), params, "", o);

            RootParamNode paramNode = RootParamNode.convert(params);
            // no http params to bind this object ? so we won't try to bind this object
            if(paramNode.getChild(name) == null) {
                return null;
            }
      // v1.1 compliant

            bw.bind(name, (Type)o.getClass(), params, "", o, o.getClass().getAnnotations());
     
      return (T) o;
    } catch (Exception e) {
      throw new UnexpectedException(e);
    }
View Full Code Here

Examples of yalp.data.binding.BeanWrapper

        ParamNode paramNode = StringUtils.isEmpty(name) ? rootParamNode : rootParamNode.getChild(name, true);
        // #1195 - Needs to keep track of whick keys we remove so that we can restore it before
        // returning from this method.
        List<ParamNode.RemovedNode> removedNodesList = new ArrayList<ParamNode.RemovedNode>();
        try {
            BeanWrapper bw = new BeanWrapper(o.getClass());
            // Start with relations
            Set<Field> fields = new HashSet<Field>();
            Class clazz = o.getClass();
            while (!clazz.equals(Object.class)) {
                Collections.addAll(fields, clazz.getDeclaredFields());
                clazz = clazz.getSuperclass();
            }
            for (Field field : fields) {
                boolean isEntity = false;
                String relation = null;
                boolean multiple = false;
                //
                if (field.isAnnotationPresent(OneToOne.class) || field.isAnnotationPresent(ManyToOne.class)) {
                    isEntity = true;
                    relation = field.getType().getName();
                }
                if (field.isAnnotationPresent(OneToMany.class) || field.isAnnotationPresent(ManyToMany.class)) {
                    Class fieldType = (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
                    isEntity = true;
                    relation = fieldType.getName();
                    multiple = true;
                }

                if (isEntity) {

                    ParamNode fieldParamNode = paramNode.getChild(field.getName(), true);

                    Class<Model> c = (Class<Model>) Yalp.classloader.loadClass(relation);
                    if (JPABase.class.isAssignableFrom(c)) {
                        String keyName = Model.Manager.factoryFor(c).keyName();
                        if (multiple && Collection.class.isAssignableFrom(field.getType())) {
                            Collection l = new ArrayList();
                            if (SortedSet.class.isAssignableFrom(field.getType())) {
                                l = new TreeSet();
                            } else if (Set.class.isAssignableFrom(field.getType())) {
                                l = new HashSet();
                            }
                            String[] ids = fieldParamNode.getChild(keyName, true).getValues();
                            if (ids != null) {
                                // Remove it to prevent us from finding it again later
                                fieldParamNode.removeChild(keyName, removedNodesList);
                                for (String _id : ids) {
                                    if (_id.equals("")) {
                                        continue;
                                    }

                                    Query q = JPA.em().createQuery("from " + relation + " where " + keyName + " = ?1");
                                    q.setParameter(1, Binder.directBind(rootParamNode.getOriginalKey(), annotations, _id, Model.Manager.factoryFor((Class<Model>) Yalp.classloader.loadClass(relation)).keyType(), null));
                                    try {
                                        l.add(q.getSingleResult());

                                    } catch (NoResultException e) {
                                        Validation.addError(name + "." + field.getName(), "validation.notFound", _id);
                                    }
                                }
                                bw.set(field.getName(), o, l);
                            }
                        } else {
                            String[] ids = fieldParamNode.getChild(keyName, true).getValues();
                            if (ids != null && ids.length > 0 && !ids[0].equals("")) {

                                Query q = JPA.em().createQuery("from " + relation + " where " + keyName + " = ?1");
                                q.setParameter(1, Binder.directBind(rootParamNode.getOriginalKey(), annotations, ids[0], Model.Manager.factoryFor((Class<Model>) Yalp.classloader.loadClass(relation)).keyType(), null));
                                try {
                                    Object to = q.getSingleResult();
                                    edit(paramNode, field.getName(), to, field.getAnnotations());
                                    // Remove it to prevent us from finding it again later
                                    paramNode.removeChild(field.getName(), removedNodesList);
                                    bw.set(field.getName(), o, to);
                                } catch (NoResultException e) {
                                    Validation.addError(fieldParamNode.getOriginalKey(), "validation.notFound", ids[0]);
                                    // Remove only the key to prevent us from finding it again later
                                    // This how the old impl does it..
                                    fieldParamNode.removeChild(keyName, removedNodesList);
                                    if (fieldParamNode.getAllChildren().size() == 0) {
                                        // remove the whole node..
                                        paramNode.removeChild(field.getName(), removedNodesList);
                                    }

                                }

                            } else if (ids != null && ids.length > 0 && ids[0].equals("")) {
                                bw.set(field.getName(), o, null);
                                // Remove the key to prevent us from finding it again later
                                fieldParamNode.removeChild(keyName, removedNodesList);
                            }
                        }
                    }
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.