Ejemplo n.º 1
0
  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;
  }
Ejemplo n.º 2
0
  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;
  }