Ignore:
Timestamp:
01/09/13 00:09:10 (11 years ago)
Author:
psniegowski
Message:

Add f0 parsing and f0->Model transformation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • java/main/src/main/java/com/framsticks/params/ReflectionAccess.java

    r77 r78  
    33import java.lang.reflect.Field;
    44import java.lang.reflect.InvocationTargetException;
     5import java.lang.reflect.Modifier;
     6import java.lang.reflect.Type;
    57import java.util.List;
    68
     
    4345                        String id = param.getId();
    4446                        try {
    45                                 return type.cast(object.getClass().getField(id).get(object));
     47                                return type.cast(reflectedClass.getField(id).get(object));
    4648                        } catch (NoSuchFieldException ignored) {
    4749                        }
    4850                        try {
    49                                 return type.cast(object.getClass().getMethod(accessorName(true, id)).invoke(object));
     51                                return type.cast(reflectedClass.getMethod(accessorName(true, id)).invoke(object));
    5052                        } catch (NoSuchMethodException ex) {
    5153                                //ex.printStackTrace();
     
    6870        }
    6971
    70         private <T> void setValue(Param param, T val) {
     72        private <T> void setValue(Param param, T value) {
    7173                if (object == null) {
    7274                        return;
     
    7577                        String id = param.getId();
    7678                        try {
    77                                 object.getClass().getField(id).set(object, val);
     79                                Field f = reflectedClass.getField(id);
     80                                Class t = f.getType();
     81                                if (Modifier.isFinal(f.getModifiers())) {
     82                                        return;
     83                                }
     84                                if (value != null || (!t.isPrimitive())) {
     85                                        f.set(object, value);
     86                                }
    7887                                return;
    7988                        } catch (NoSuchFieldException ignored) {
    8089                        }
    8190                        try {
    82                                 object.getClass().getMethod(accessorName(false, id), new Class[]{val.getClass()}).invoke(object, val);
    83                         } catch (InvocationTargetException e) {
    84                                 //e.printStackTrace();
     91                                reflectedClass.getMethod(accessorName(false, id), new Class[]{param.getStorageType()}).invoke(object, value);
     92                        } catch (InvocationTargetException ignored) {
    8593                        } catch (NoSuchMethodException ignored) {
    8694                        }
    87                 } catch (IllegalAccessException ex) {
    88                         LOGGER.warn("illegal access error occurred while trying to access returnedObject");
     95                } catch (Exception ex) {
    8996                        ex.printStackTrace();
    9097                }
     
    103110                resetErrors();
    104111
    105                 Field[] fields;
    106112                try {
    107                         // TODO: conceptually invalid - should clean only fields that are specified in FramsClass
    108                         fields = object.getClass().getFields();
    109 
    110                         for (Field field : fields) {
    111                                 field.set(object, null);
     113                        for (Param p : framsClass.getParamEntries()) {
     114                                setValue(p, p.getDef(Object.class));
    112115                        }
    113                 } catch (IllegalAccessException ex) {
    114                         LOGGER.warn("IllegalAccessException thrown while trying to reset object values");
     116                } catch (IllegalArgumentException ex) {
    115117                        ex.printStackTrace();
    116118                }
     
    125127        @Override
    126128        public void select(Object object) {
     129                assert object == null || reflectedClass.isInstance(object);
    127130                this.object = object;
    128131        }
     
    166169        }
    167170        LOGGER.fatal("failed to create reflected object of class " + reflectedClass.getCanonicalName() + " for frams type " + framsClass.getId());
    168 
    169171        return null;
    170172    }
Note: See TracChangeset for help on using the changeset viewer.