示例#1
0
  /**
   * Parse properties to extract optional model id definitions. The format is as follow:
   *
   * <p>
   *
   * <PRE>
   * define.model-id.column-id=modelid-noScaler
   * define.model-id.modelid-noScaler.exclude=a,b
   * define.model-id.modelid-noScaler.exclude.a.argument=scaler-name
   * define.model-id.modelid-noScaler.exclude.a.skip=1
   * define.model-id.modelid-noScaler.exclude.b.argument=normalizer-name
   * define.model-id.modelid-noScaler.exclude.b.skip=1
   * </PRE>
   *
   * These properties would define one new model-id called, to be written in a column called
   * modelid-noScaler, which excludes two arguments and one value each from the hashcode modelId
   * calculation.
   */
  public static OptionalModelId[] parseOptionalModelIdProperties(
      final Properties configurationProperties) {
    final ObjectList<OptionalModelId> result = new ObjectArrayList<OptionalModelId>();
    if (configurationProperties != null) {
      // inspect properties to figure out which optional model ids to create:
      final ObjectSet<String> optionalModelIdColumnNames = new ObjectArraySet<String>();

      for (final String propertyName : configurationProperties.stringPropertyNames()) {
        if (propertyName.startsWith("define.model-id.column-id")) {
          final String columnIdNames = configurationProperties.getProperty(propertyName);
          final String[] names = columnIdNames.split(",");
          for (final String name : names) {
            optionalModelIdColumnNames.add(name);
          }
        }
      }

      for (final String optionalColumnId : optionalModelIdColumnNames) {
        final String defineModelIdExcludePropertyName =
            "define.model-id." + optionalColumnId + ".exclude";
        final String argumentKeys =
            configurationProperties.getProperty(defineModelIdExcludePropertyName);
        final String[] keys;
        if (argumentKeys == null) {
          System.err.println(
              "Error parsing properties. Cannot find key=" + defineModelIdExcludePropertyName);
          keys = ArrayUtils.EMPTY_STRING_ARRAY;
        } else {
          keys = argumentKeys.split(",");
        }

        final OptionalModelId newOne = new OptionalModelId(optionalColumnId);
        for (String key : keys) {
          key = key.trim();
          final String excludeArgumentName =
              configurationProperties.getProperty(
                  defineModelIdExcludePropertyName + "." + key + ".argument");
          final String excludeArgumentSkip =
              configurationProperties.getProperty(
                  defineModelIdExcludePropertyName + "." + key + ".skip");
          newOne.addExcludeArgument(excludeArgumentName, Integer.parseInt(excludeArgumentSkip));
        }
        result.add(newOne);
        LOGGER.debug("Defined  modelId: " + newOne);
      }
    }
    return result.toArray(new OptionalModelId[result.size()]);
  }