Exemplo n.º 1
0
  public void register(Class<? extends LiquibaseDataType> dataTypeClass) {
    try {
      LiquibaseDataType example = dataTypeClass.newInstance();
      List<String> names = new ArrayList<String>();
      names.add(example.getName());
      names.addAll(Arrays.asList(example.getAliases()));

      Comparator<Class<? extends LiquibaseDataType>> comparator =
          new Comparator<Class<? extends LiquibaseDataType>>() {
            @Override
            public int compare(
                Class<? extends LiquibaseDataType> o1, Class<? extends LiquibaseDataType> o2) {
              try {
                return -1
                    * new Integer(o1.newInstance().getPriority())
                        .compareTo(o2.newInstance().getPriority());
              } catch (Exception e) {
                throw new UnexpectedLiquibaseException(e);
              }
            }
          };

      for (String name : names) {
        name = name.toLowerCase();
        if (registry.get(name) == null) {
          registry.put(name, new ArrayList<Class<? extends LiquibaseDataType>>());
        }
        List<Class<? extends LiquibaseDataType>> classes = registry.get(name);
        classes.add(dataTypeClass);
        Collections.sort(classes, comparator);
      }
    } catch (Exception e) {
      throw new UnexpectedLiquibaseException(e);
    }
  }