Example #1
0
    public static void checkConsistency(
        Database database,
        BootstrapPackage pkg,
        Set<BootstrapPackage> allPackages,
        Set<ObjectType> additionalTypes) {
      Set<ObjectType> allMyTypes = getAllTypes(database, pkg);
      Set<ObjectType> allTypes = new HashSet<ObjectType>();
      for (BootstrapPackage otherPkg : allPackages) {
        allTypes.addAll(getAllTypes(database, otherPkg));
      }
      Map<ObjectField, ObjectType> checkFields = new HashMap<ObjectField, ObjectType>();
      for (ObjectType type : allMyTypes) {
        for (ObjectField field : type.getFields()) {
          for (ObjectType t : field.getTypes()) {
            if (!field.isEmbedded() && !t.isEmbedded()) {
              checkFields.put(field, t);
            }
          }
        }
      }

      if (additionalTypes != null) {
        for (ObjectType type : additionalTypes) {
          for (ObjectField field : type.getFields()) {
            for (ObjectType t : field.getTypes()) {
              if (!field.isEmbedded() && !t.isEmbedded()) {
                checkFields.put(field, t);
              }
            }
          }
        }
      }

      for (ObjectField field : database.getEnvironment().getFields()) {
        for (ObjectType t : field.getTypes()) {
          if (!field.isEmbedded() && !t.isEmbedded()) {
            checkFields.put(field, t);
          }
        }
      }

      for (Map.Entry<ObjectField, ObjectType> entry : checkFields.entrySet()) {
        ObjectField field = entry.getKey();
        ObjectType t = entry.getValue();
        if (field.getParentType() != null
            && field
                .getParentType()
                .as(TypeData.class)
                .getFollowReferencesFields()
                .contains(field.getInternalName())) {
          continue;
        }
        if (!allMyTypes.contains(t)) {
          if (allTypes.contains(t)) {
            if (!pkg.getTypesInOtherPackages().containsKey(t)) {
              pkg.getTypesInOtherPackages().put(t, new HashSet<BootstrapPackage>());
            }
            for (BootstrapPackage otherPkg : allPackages) {
              if (getAllTypes(database, otherPkg).contains(t)) {
                pkg.getTypesInOtherPackages().get(t).add(otherPkg);
              }
            }
          }
          if (t.as(TypeData.class).getTypeMappableGroups().isEmpty()
              || t.as(TypeData.class).getTypeMappableUniqueKey() == null) {
            if (!pkg.getMissingTypes().containsKey(t)) {
              pkg.getMissingTypes().put(t, new HashSet<ObjectField>());
            }
            pkg.getMissingTypes().get(t).add(field);
          }
        }
      }
    }