/** * Tries to set the value of an OpenEngSBModelEntry to its corresponding setter of the model. Returns true if the * setter can be called, returns false if not. */ private static boolean tryToSetValueThroughSetter(OpenEngSBModelEntry entry, Object instance) throws IllegalAccessException { try { String setterName = getSetterName(entry.getKey()); Method method = instance.getClass().getMethod(setterName, entry.getType()); method.invoke(instance, entry.getValue()); return true; } catch (NoSuchMethodException e) { // if there exist no such method, then it is an entry meant for the model tail } catch (IllegalArgumentException e) { LOGGER.error("IllegalArgumentException while trying to set values for the new model.", e); } catch (InvocationTargetException e) { LOGGER.error("InvocationTargetException while trying to set values for the new model.", e); } return false; }
/** * Does the conversion of model entries before they are returned by the getter if needed. */ private void checkForGetterResultConversion(String propertyName) { OpenEngSBModelEntry entry = objects.get(propertyName); if (List.class.isAssignableFrom(entry.getType())) { @SuppressWarnings("unchecked") List<Object> list = (List<Object>) entry.getValue(); if (list != null && list.size() != 0) { List<Object> temp = doListConversion(list, true); objects.put(propertyName, new OpenEngSBModelEntry(propertyName, temp, entry.getType())); } } else if (Map.class.isAssignableFrom(entry.getType())) { @SuppressWarnings("unchecked") Map<Object, Object> map = (Map<Object, Object>) entry.getValue(); if (map != null && map.size() != 0) { Map<Object, Object> temp = doMapConversion(map, true); objects.put(propertyName, new OpenEngSBModelEntry(propertyName, temp, entry.getType())); } } else { Object obj = doObjectConversion(entry.getValue(), true); Class<?> clazz = obj != null ? obj.getClass() : entry.getType(); objects.put(propertyName, new OpenEngSBModelEntry(propertyName, obj, clazz)); } }
/** * Converts the string located in the value property of the entry in the correct data format and returns it. */ private Object createValueOfEntry(OpenEngSBModelEntry entry) { if (entry.getType().equals(String.class)) { return entry.getValue(); } Object element = null; if (entry.getType() == null) { LOGGER.error("Unknown type for model entry with key {}", entry.getKey()); return element; } try { Class<?> clazz = entry.getType(); Constructor<?> constr = ClassUtils.getConstructorIfAvailable(clazz, String.class); if (constr != null) { element = constr.newInstance(entry.getValue()); } else { element = MethodUtils.invokeStaticMethod(clazz, "valueOf", entry.getValue()); } } catch (Exception e) { LOGGER.error("Unable to convert value with the key {} to correct type", entry.getKey()); } return element; } }
/** * Does the conversion of model entries before they are added to the list of model entries if needed. */ private List<OpenEngSBModelEntry> convertEntry(OpenEngSBModelEntry entry) { List<OpenEngSBModelEntry> entries = new ArrayList<OpenEngSBModelEntry>(); if (List.class.isAssignableFrom(entry.getType())) { @SuppressWarnings("unchecked") List<Object> list = (List<Object>) entry.getValue(); if (list.size() == 0) { entries.add(entry); } else { List<Object> temp = doListConversion(list, false); entries.add(new OpenEngSBModelEntry(entry.getKey(), temp, entry.getType())); } } else if (Map.class.isAssignableFrom(entry.getType())) { @SuppressWarnings("unchecked") Map<Object, Object> map = (Map<Object, Object>) entry.getValue(); if (map.size() == 0) { entries.add(entry); } else { Map<Object, Object> temp = doMapConversion(map, false); entries.add(new OpenEngSBModelEntry(entry.getKey(), temp, entry.getType())); } } else { Object obj = doObjectConversion(entry.getValue(), false); entries.add(new OpenEngSBModelEntry(entry.getKey(), obj, obj.getClass())); } return entries; }
if (entry.getValue() == null) { continue; } else if (entry.getType().equals(FileWrapper.class)) { try { FileWrapper wrapper = (FileWrapper) entry.getValue(); LOGGER.error(e.getMessage()); } else if (OpenEngSBModel.class.isAssignableFrom(entry.getType())) { OpenEngSBModel temp = (OpenEngSBModel) entry.getValue(); String subOid = convertSubModel(temp, objects, info); object.putEDBObjectEntry(entry.getKey(), subOid, String.class); } else if (List.class.isAssignableFrom(entry.getType())) { List<?> list = (List<?>) entry.getValue(); if (list == null || list.size() == 0) { object.putEDBObjectEntry(entryName, item, item.getClass()); } else if (entry.getType().isArray()) { Object[] array = (Object[]) entry.getValue(); if (array == null || array.length == 0) { } else if (Map.class.isAssignableFrom(entry.getType())) { Map<?, ?> map = (Map<?, ?>) entry.getValue(); if (map == null || map.size() == 0) { object.putEDBObjectEntry(entry.getKey(), entry.getValue(), entry.getType());