/** * Handle call of "getOpenEngSBModelEntries" */ private List<OpenEngSBModelEntry> handleGetOpenEngSBModelEntries() throws Throwable { List<OpenEngSBModelEntry> entries = new ArrayList<OpenEngSBModelEntry>(); for (OpenEngSBModelEntry entry : objects.values()) { if (entry.getValue() == null) { entries.add(entry); continue; } entries.addAll(convertEntry(entry)); } return entries; }
/** * 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; }
/** * Handle call of a getter method */ private Object handleGetMethod(Method method) throws Throwable { String propertyName = ModelUtils.getPropertyName(method); checkForGetterResultConversion(propertyName); Object returnValue = objects.get(propertyName).getValue(); if (returnValue == null && method.isAnnotationPresent(DefaultStringValue.class)) { DefaultStringValue value = method.getAnnotation(DefaultStringValue.class); returnValue = value.value(); } return returnValue; }
/** * 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; }
/** * 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 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)); } }
OpenEngSBModelEntry entry = (OpenEngSBModelEntry) args[0]; LOGGER.debug("addOpenEngSBModelEntry was called with entry {} with the value {}", entry.getKey(), entry.getValue()); handleAddEntry(entry); return null;
/** * 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(); String content = Base64.encodeBase64String(wrapper.getContent()); object.putEDBObjectEntry(entry.getKey(), content, String.class); 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) { continue; Object[] array = (Object[]) entry.getValue(); if (array == null || array.length == 0) { continue; Map<?, ?> map = (Map<?, ?>) entry.getValue(); if (map == null || map.size() == 0) { continue; object.putEDBObjectEntry(entry.getKey(), entry.getValue(), entry.getType());