/** * Handle call of "addOpenEngSBModelEntry" */ private void handleAddEntry(OpenEngSBModelEntry entry) { objects.put(entry.getKey(), entry); }
public ModelProxyHandler(Class<?> model, OpenEngSBModelEntry... entries) { objects = new HashMap<String, OpenEngSBModelEntry>(); fillModelWithNullValues(model); for (OpenEngSBModelEntry entry : entries) { if (objects.containsKey(entry.getKey()) || entry.getKey().equals(EDBConstants.MODEL_OID) || entry.getKey().equals(EDBConstants.MODEL_VERSION)) { objects.put(entry.getKey(), entry); } else { LOGGER.error("entry \"{}\" can not be set because the interface doesn't contain this field!", entry.getKey()); } } initializeModelConverterSteps(); }
/** * Handle call of "toString" */ private String handleToString() { StringBuilder builder = new StringBuilder(); boolean first = true; builder.append("{ "); for (OpenEngSBModelEntry entry : objects.values()) { if (!first) { builder.append(", "); } builder.append(entry.getKey()).append(" == ").append(entry.getValue()); first = false; } builder.append(" }"); return builder.toString(); }
/** * Tries to set the value of an OpenEngSBModelEntry to its corresponding field of the model. Returns true if the * field can be set, returns false if not. */ private static boolean tryToSetValueThroughField(OpenEngSBModelEntry entry, Object instance) throws IllegalAccessException { try { Field field = instance.getClass().getDeclaredField(entry.getKey()); field.setAccessible(true); field.set(instance, entry.getValue()); field.setAccessible(false); return true; } catch (NoSuchFieldException e) { // if no field with this name exist, try to use the corresponding setter } catch (SecurityException e) { // if a security manager is installed which don't allow this change of a field value, try // to use the corresponding setter } return false; }
/** * 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; }
} else if (methodName.equals("addOpenEngSBModelEntry")) { OpenEngSBModelEntry entry = (OpenEngSBModelEntry) args[0]; LOGGER.debug("addOpenEngSBModelEntry was called with entry {} with the value {}", entry.getKey(), entry.getValue()); handleAddEntry(entry);
/** * 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; }
FileWrapper wrapper = (FileWrapper) entry.getValue(); String content = Base64.encodeBase64String(wrapper.getContent()); object.putEDBObjectEntry(entry.getKey(), content, String.class); object.putEDBObjectEntry(entry.getKey() + FILEWRAPPER_FILENAME_SUFFIX, wrapper.getFilename(), String.class); } catch (IOException e) { 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(); item = convertSubModel((OpenEngSBModel) item, objects, info); String entryName = getEntryNameForList(entry.getKey(), i); object.putEDBObjectEntry(entryName, item, item.getClass()); item = convertSubModel((OpenEngSBModel) item, objects, info); String entryName = getEntryNameForList(entry.getKey(), i); object.putEDBObjectEntry(entryName, item, item.getClass()); object.putEDBObjectEntry(getEntryNameForMapKey(entry.getKey(), i), key); object.putEDBObjectEntry(getEntryNameForMapValue(entry.getKey(), i), value); i++; object.putEDBObjectEntry(entry.getKey(), entry.getValue(), entry.getType());