Example #1
0
  static void processProperties(
      JSONObject entity, ViewEntityModel viewModel, DbContext ctx, EntityModelVersion version) {
    JSONArray properties = entity.getJSONArray("properties");
    for (int p = 0; p < properties.length(); p++) {
      JSONObject property = properties.getJSONObject(p);
      EntityModel child;
      String alias;

      if (property.has("model")) {
        String model = property.getString("model");
        if (model.equals(viewModel.getRootModel().getName())) {
          child = viewModel.getRootModel();
          alias = viewModel.getRootAlias();
        } else {
          ViewEntityModel.EntityRelationship relationship =
              viewModel.getModel(property.getString("model"));
          child = relationship.getModel();
          alias = relationship.getAlias();
        }
      } else {
        child = viewModel;
        alias = viewModel.getRootAlias();
      }

      String propertyName = property.getString("name");
      if ("*".equals(propertyName)) {
        for (EntityProperty childProperty : child.getAllProperties(version.getVersion())) {
          String name = childProperty.getName();
          if (childProperty.getModel() instanceof ViewEntityModel
              && childProperty.getAlias() != null) name = childProperty.getAlias();
          EntityProperty cp =
              version.newProperty(
                  childProperty.getType(), name, childProperty.isNullable(), null, null);
          cp.setModelAlias(alias);
          cp.setOriginalModel(childProperty.getModel());
        }
      } else {
        EntityProperty childProperty = null;
        try {
          childProperty = child.getProperty(version.getVersion(), propertyName);
        } catch (IllegalArgumentException ignore) {
        }
        EntityProperty cp =
            version.newProperty(
                childProperty == null
                    ? EntityProperty.Type.valueOf(property.getString("type"))
                    : childProperty.getType(),
                property.getString("name"),
                !property.has("nullable") || property.getBoolean("nullable"),
                property.has("alias") ? property.getString("alias") : null,
                property.has("sql") ? property.getString("sql") : null);
        cp.setModelAlias(alias);
        if (childProperty != null) cp.setOriginalModel(childProperty.getModel());
      }
    }
  }