Пример #1
0
  /**
   * Resolve dependencies between model items
   *
   * @param query support for querying other items in model
   */
  private void resolveDependencies(ModelQuery query, NamespaceDAO namespaceDAO) {
    NamespacePrefixResolver prefixResolver = createLocalPrefixResolver(model, namespaceDAO);

    for (DataTypeDefinition def : dataTypes.values()) {
      ((M2DataTypeDefinition) def).resolveDependencies(query);
    }
    for (ClassDefinition def : classes.values()) {
      ((M2ClassDefinition) def).resolveDependencies(query, prefixResolver, constraints);
    }
  }
Пример #2
0
  /**
   * Resolve class feature inheritence
   *
   * @param query support for querying other items in model
   */
  private void resolveInheritance(
      ModelQuery query,
      NamespacePrefixResolver prefixResolver,
      Map<QName, ConstraintDefinition> modelConstraints) {
    // Calculate order of class processing (root to leaf)
    Map<Integer, List<ClassDefinition>> order = new TreeMap<Integer, List<ClassDefinition>>();
    for (ClassDefinition def : classes.values()) {
      // Calculate class depth in hierarchy
      int depth = 0;
      QName parentName = def.getParentName();
      while (parentName != null) {
        ClassDefinition parentClass = getClass(parentName);
        if (parentClass == null) {
          break;
        }
        depth = depth + 1;
        parentName = parentClass.getParentName();
      }

      // Map class to depth
      List<ClassDefinition> classes = order.get(depth);
      if (classes == null) {
        classes = new ArrayList<ClassDefinition>();
        order.put(depth, classes);
      }
      classes.add(def);

      if (logger.isTraceEnabled()) {
        logger.trace("Resolving inheritance: class " + def.getName() + " found at depth " + depth);
      }
    }

    // Resolve inheritance of each class
    for (int depth = 0; depth < order.size(); depth++) {
      for (ClassDefinition def : order.get(depth)) {
        ((M2ClassDefinition) def).resolveInheritance(query, prefixResolver, modelConstraints);
      }
    }
  }