Пример #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());
      }
    }
  }
Пример #2
0
  static EntityModel processEntity(JSONObject entity, DbContext ctx, Version version) {
    if (entity.has("rootModel")) { // if there is a rootModel property, we're dealing with a view
      processEntityView(entity, ctx);
    } else { // otherwise an entity table
      EntityModelVersion v =
          ctx.currentVersion()
              .newModel(
                  entity.getString("name"), !entity.has("render") || entity.getBoolean("render"))
              .currentVersion();
      if (entity.has("properties")) {
        JSONArray properties = entity.getJSONArray("properties");
        for (int p = 0; p < properties.length(); p++) {
          JSONObject property = properties.getJSONObject(p);
          v.newProperty(
              property.has("type")
                  ? EntityProperty.Type.valueOf(property.getString("type"))
                  : EntityProperty.Type.UNKNOWN,
              property.getString("name"),
              property.has("nullable") && property.getBoolean("nullable"));
        }
      }
    }

    EntityModel m = ctx.getModel(entity.getString("name"));
    if (m == null)
      throw new NullPointerException("Model " + entity.getString("name") + " not found");
    if (entity.has("extensions")) {
      JSONArray extensions = entity.getJSONArray("extensions");
      for (int p = 0; p < extensions.length(); p++) {
        m.getExtensions().add(extensions.getString(p));
      }
    }

    if (entity.has("queries")) processQueries(entity.getJSONObject("queries"), m, version);

    if (entity.has("indexes")) {
      JSONArray indexes = entity.getJSONArray("indexes");
      for (int i = 0; i < indexes.length(); i++) {
        JSONObject index = indexes.getJSONObject(i);

        List<EntityIndexProperty> properties = new ArrayList<EntityIndexProperty>();

        if (index.has("properties")) {
          JSONArray indexProperties = index.getJSONArray("properties");
          for (int p = 0; p < indexProperties.length(); p++) {
            Object prop = indexProperties.get(p);
            EntityIndexProperty property = new EntityIndexProperty();
            if (prop instanceof String) {
              property.setProperty(m.getProperty(m.currentVersion().getVersion(), (String) prop));
              property.setOrder(EntityIndexProperty.Order.DEFAULT);
            } else {
              JSONObject o = (JSONObject) prop;
              property.setProperty(
                  m.getProperty(m.currentVersion().getVersion(), o.getString("name")));
              property.setOrder(
                  o.has("order")
                      ? EntityIndexProperty.Order.valueOf(index.getString("order"))
                      : EntityIndexProperty.Order.DEFAULT);
            }
            properties.add(property);
          }
        }

        m.currentVersion()
            .newIndex(
                index.has("type")
                    ? EntityIndex.Type.valueOf(index.getString("type"))
                    : EntityIndex.Type.DEFAULT,
                index.getString("name"),
                properties);
      }
    }

    return m;
  }