示例#1
0
  private void printGroup() {
    if (group.getDescription() != null) {
      println(" " + group.getDescription() + " (? - 该值在用户配置文件中不存在,* - 必填项,S - 覆盖共享默认值,s - 共享值)");
    } else {
      println(" (? - 该值在用户配置文件中不存在,* - 必填项,S - 覆盖共享默认值,s - 共享值)");
    }

    println();

    // 找出最长的名称和值
    int maxLength = -1;
    int maxLengthValue = -1;

    for (ConfigProperty prop : props) {
      int length = prop.getName().length();

      if (length > maxLength && length < MAX_ALIGN) {
        maxLength = length;
      }
    }

    for (ConfigProperty prop : props) {
      String value = getPropertyValue(prop, true);
      int length =
          Math.max(prop.getName().length(), maxLength)
              + (value == null ? 0 : "  = ".length() + value.length());

      if (length > maxLengthValue && length < MAX_ALIGN * 2) {
        maxLengthValue = length;
      }
    }

    for (int i = 0; i < props.length; i++) {
      ConfigProperty prop = props[i];

      StringBuffer buffer = new StringBuffer();

      // 如果项目在配置文件中不存在,则显示?
      boolean absent = !getKeys().contains(prop.getName());

      // 如果是必填项, 则显示*号
      boolean required = prop.isRequired();

      // 如果项目定义在shared properties中,则显示S
      boolean shared = propSet.isShared(prop.getName());

      if (shared) {
        if (absent) {
          buffer.append("s");
        } else {
          buffer.append("S");
        }
      } else {
        if (absent) {
          buffer.append("?");
        } else {
          buffer.append(" ");
        }
      }

      if (required) {
        buffer.append("* ");
      } else {
        buffer.append("  ");
      }

      // 显示property序号
      buffer.append(i + 1).append(" - ");

      // 显示property名称
      buffer.append(prop.getName());

      // 显示property值
      String value = getPropertyValue(prop, true);

      if (value != null) {
        for (int j = 0; j < maxLength - prop.getName().length(); j++) {
          buffer.append(' ');
        }

        buffer.append("  = ").append(value);
      }

      // 显示property描述
      if (prop.getDescription() != null) {
        int length =
            value == null
                ? prop.getName().length()
                : Math.max(prop.getName().length(), maxLength) + "  = ".length() + value.length();

        for (int j = 0; j < maxLengthValue - length; j++) {
          buffer.append(' ');
        }

        buffer.append("   # ").append(prop.getDescription());
      }

      // 如果值是表达式,则同时显示表达式的计算值
      String evaluatedValue = evaluatePropertyValue(prop, true);

      if (evaluatedValue != null && !ObjectUtil.equals(value, evaluatedValue)) {
        buffer.append("\n");

        for (int j = 0; j < maxLength; j++) {
          buffer.append(' ');
        }

        buffer.append("          (").append(evaluatedValue).append(")");

        if (i < props.length - 1) {
          buffer.append("\n");
        }
      }

      println(buffer);
    }

    println();
  }