private JSONObject build() { this.typeMap = new HashMap<String, String>(); this.result = new JSONObject(); this.result.put("$schema", "http://json-schema.org/draft-04/schema#"); this.definitions = new JSONObject(); buildTypeDefinition(baseObject); if (hasReferenceToRoot) this.result.put("$ref", "#/definitions/type1"); else { JSONObject roottype = (JSONObject) this.definitions.remove("type1"); for (String key : JSONObject.getNames(roottype)) result.put(key, roottype.get(key)); } // only add definitions if there are any types left. if (definitions.keys().hasNext()) this.result.put("definitions", definitions); return result; }
private JSONObject associationToJSONType(IMetaAssociation assoc) { IMetaObject child = assoc.getChild(); JSONObject type = null; // some kind of foreign key if (child.isPersistable()) { // only if there is a service available for that type; if (RestServices.getServiceForEntity(child.getName()) != null) { type = new JSONObject() .put("type", "string") .put("title", String.format("Reference to a(n) '%s'", child.getName())); } } // persistent object, describe this object in the service as well else { buildTypeDefinition(child); // make sure the type is available in the schema String targetType = typeMap.get(child.getName()); type = new JSONObject().put("$ref", "#/definitions/" + targetType); if ("type1".equals(targetType)) hasReferenceToRoot = true; } // assoc should be included? if (type == null) return null; // make sure referencesets require arrays if (assoc.getType() == AssociationType.REFERENCESET) type = new JSONObject().put("type", "array").put("items", type); // make sure null refs are supported else /* not a refset */ type = orNull(type); return type; }