/** * Handle call of a setter method */ private void handleSetMethod(Method method, Object[] args) throws Throwable { String propertyName = ModelUtils.getPropertyName(method); if (method.isAnnotationPresent(OpenEngSBModelId.class) && args[0] != null) { OpenEngSBModelEntry entry = new OpenEngSBModelEntry(EDBConstants.MODEL_OID, args[0].toString(), String.class); objects.put(EDBConstants.MODEL_OID, entry); } Class<?> clasz = method.getParameterTypes()[0]; objects.put(propertyName, new OpenEngSBModelEntry(propertyName, args[0], clasz)); }
private void fillModelWithNullValues(Class<?> model) { for (PropertyDescriptor propertyDescriptor : ModelUtils.getPropertyDescriptorsForClass(model)) { String propertyName = propertyDescriptor.getName(); Class<?> clasz = propertyDescriptor.getPropertyType(); objects.put(propertyName, new OpenEngSBModelEntry(propertyName, null, clasz)); } }
/** * 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)); } }
@Override public OpenEngSBModelEntry deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonToken token = jp.getCurrentToken(); OpenEngSBModelEntry entry = new OpenEngSBModelEntry(); if (token != JsonToken.START_OBJECT) { return null;
Class<?> propertyClass = propertyDescriptor.getPropertyType(); if (propertyClass.isPrimitive()) { entries.add(new OpenEngSBModelEntry(propertyDescriptor.getName(), value, ClassUtils .primitiveToWrapper(propertyClass))); } else { entries.add(new OpenEngSBModelEntry(propertyDescriptor.getName(), value, propertyClass)); try { entryType = model.getClassLoader().loadClass(entry.getType()); entries.add(new OpenEngSBModelEntry(entry.getKey(), entry.getValue(), entryType)); } catch (ClassNotFoundException e) { LOGGER.error("Unable to load class {} of the model tail", entry.getType());
/** * 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; }