private FMDescriptor createMDSDDescriptor(String value, FMDProperty property) { if (property != null) { return new FMDescriptor( property.getTitleBean(), property.getTitleToVisualize(), property.getDescription(), value); } else { return new FMDescriptor(null, null, null, value); } }
private void handleReferences( String reference, FMDProperty objectReference, Map<String, Object> mapToFill, Object returnedValue, boolean isArray) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { JsonNode mdsdNode = getMdsdObjectFromReference(reference); if (mdsdNode.get(TYPE_FIELD) != null && mdsdNode.get(TYPE_FIELD).asText().equals(OBJECT_TYPE)) { if (mdsdNode.get(PROPERTIES_FIELD) != null) { ArrayList<Map.Entry<String, JsonNode>> itProperties = Lists.newArrayList(mdsdNode.get(PROPERTIES_FIELD).fields()); if (isArray) { ArrayList<Object> values = (ArrayList<Object>) returnedValue; for (int z = 0; z < values.size(); z++) { handleProperties(mapToFill, itProperties, values.get(z)); } } else { if (objectReference != null) { objectReference.setOrder(getOrderFromEntity(objectReference.getOrder())); Map<String, Object> mapToFill2 = new TreeMap<String, Object>(); handleProperties(mapToFill2, itProperties, returnedValue); mapToFill.put( objectReference.getOrder(), new FMDescriptor( objectReference.getTitleBean(), objectReference.getTitleToVisualize(), objectReference.getDescription(), mapToFill2)); } /* handleProperties(mapToFill, itProperties, returnedValue); */ } } } else if (mdsdNode.get(ENUM_FIELD) != null) { if (objectReference != null) { handleEnum(mapToFill, returnedValue, objectReference); } else { System.out.println("let's see"); } } }
private void handleProperties( Map<String, Object> mapToFill, ArrayList<Map.Entry<String, JsonNode>> itProperties, Object returnedValue) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { for (int k = 0; k < itProperties.size(); k++) { String titleBean = itProperties.get(k).getKey(); FMDProperty objectProperty = fillObjectProperty( Lists.newArrayList(itProperties.get(k).getValue().fields()).listIterator()); if (objectProperty.getTitleBean() == null) { objectProperty.setTitleBean(titleBean); } Object mdsdValue = getReturnedValueFromObject(objectProperty, returnedValue, titleBean); if (mdsdValue != null) { // if there is not a reference if (objectProperty.getReference() == null) { String orderObj = getOrderFromEntity(objectProperty.getOrder()); if (isReadyToPut(objectProperty)) { Object valueToPut = ((((ValueNode) mdsdValue).getNodeType().toString()).equals("NUMBER")) ? mdsdValue : ((TextNode) mdsdValue).asText(); mapToFill.put( orderObj, new FMDescriptor( titleBean, objectProperty.getTitleToVisualize(), objectProperty.getDescription(), valueToPut)); } else if (objectProperty.getType() != null && objectProperty.getType().equals(ARRAY_TYPE) && objectProperty.getItems().get(TYPE_FIELD) != null && objectProperty.getItems().get(TYPE_FIELD).asText().equals(STRING_TYPE)) { ArrayNode values = ((ArrayNode) mdsdValue); for (int i = 0, size = values.size(); i < size; i++) { values.add(values.get(i).textValue()); } mapToFill.put( orderObj, new FMDescriptor( titleBean, objectProperty.getTitleToVisualize(), objectProperty.getDescription(), values)); } else { mapToFill.put( orderObj, new FMDescriptor( titleBean, objectProperty.getTitleToVisualize(), objectProperty.getDescription(), fillRecursive2(itProperties.get(k).getValue().fields(), mdsdValue))); } } // if it is a reference else { handleReferences( objectProperty.getReference(), objectProperty, mapToFill, mdsdValue, false); } } } }
private Object fillRecursive2(Iterator<Map.Entry<String, JsonNode>> fields, Object returnedValue) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { Map<String, Object> tempMap = new TreeMap<String, Object>(); ListIterator<Map.Entry<String, JsonNode>> listBack = Lists.newArrayList(fields).listIterator(); FMDProperty resultObj = fillObjectProperty(listBack); String type = resultObj.getType(); if (type != null) { /** STRING OR NUMBER* */ if (type.equals(STRING_TYPE) || type.equals(NUMBER_TYPE)) { Object valueStringType = invokeMethodByReflection(resultObj.getTitleBean(), returnedValue, false); if (valueStringType != null && !valueStringType.toString().equals("")) { tempMap.put( resultObj.getOrder(), new FMDescriptor( resultObj.getTitleBean(), resultObj.getTitleToVisualize(), resultObj.getDescription(), valueStringType)); return tempMap; } } /** OBJECT * */ else if (type.equals(OBJECT_TYPE)) { // 1) PROPERTIES if (resultObj.getProperties() != null) { ArrayList<Map.Entry<String, JsonNode>> itProperties = (ArrayList<Map.Entry<String, JsonNode>>) resultObj.getProperties(); handleProperties(tempMap, itProperties, returnedValue); } // 2) PATTERN PROPERTIES else if (resultObj.getProperties() == null && resultObj.getPatternProperties() != null) { Object valueObjPatternType = invokeMethodByReflection(resultObj.getTitleBean(), returnedValue, true); if (valueObjPatternType != null) { if (resultObj.getPatternProperties().equals(STRING_TYPE)) { String orderObj = getOrderFromEntity(resultObj.getOrder()); tempMap.put( orderObj, new FMDescriptor( resultObj.getTitleBean(), resultObj.getTitleToVisualize(), resultObj.getDescription(), valueObjPatternType)); } else { // TODO(FREEZED): there is not a type different from string System.out.println("here!"); } } } // 3) REF PROPERTY else if (resultObj.getProperties() == null && resultObj.getPatternProperties() == null && resultObj.getReference() != null) { handleReferences(resultObj.getReference(), resultObj, tempMap, returnedValue, false); return tempMap; } } /** ARRAY* */ else if (type.equals(ARRAY_TYPE)) { ArrayList<Map<String, Object>> result = new ArrayList<Map<String, Object>>(); ArrayList<Object> values = (ArrayList<Object>) returnedValue; JsonNode items = ((ObjectNode) resultObj.getItems()).deepCopy(); if (items.get(TYPE_FIELD) != null) { if (items.get(TYPE_FIELD).asText().equals(STRING_TYPE)) { String orderGlobal = getOrderFromEntity(resultObj.getOrder()); for (int arrCounter = 0; arrCounter < values.size(); arrCounter++) { Map<String, Object> tmp = new TreeMap<String, Object>(); String order = getOrderFromEntity(resultObj.getOrder()); tmp.put(order, values.get(arrCounter)); result.add(tmp); } tempMap.put(orderGlobal, result); } } else if (items.get(REF_FIELD) != null) { String orderGlobal = getOrderFromEntity(resultObj.getOrder()); String ref = items.get(REF_FIELD).asText(); String[] refSplitted = ref.substring(2).split("/"); // OJCODE case if (refSplitted[refSplitted.length - 1].equals(OJCODE_TYPE)) { tempMap.put( orderGlobal, new FMDescriptor( refSplitted[refSplitted.length - 1], resultObj.getTitleToVisualize(), resultObj.getDescription(), fillOjCode((ArrayList<OjCode>) returnedValue))); } else { handleReferences(items.get(REF_FIELD).asText(), null, tempMap, returnedValue, true); return tempMap; } } } } else { if (resultObj.getReference() != null) { handleReferences(resultObj.getReference(), resultObj, tempMap, returnedValue, false); } } return tempMap; }