Skip to content
Snippets Groups Projects
Helpers.jrag 2.83 KiB
aspect Helpers {
  // --- of ---
  public static ValueElement ValueElement.of(int value) {
    return new ValueElement(false, String.valueOf(value));
  }
  public static ValueElement ValueElement.of(boolean value) {
    return new ValueElement(false, String.valueOf(value));
  }
  public static ValueElement ValueElement.of(String value) {
    return new ValueElement(false, value);
  }
  public static StringElement StringElement.of(String value) {
    return new StringElement(false, value);
  }

  // --- addKeyValuePair ---
  public void MappingElement.addKeyValuePair(String key, Element value) {
    addKeyValuePair(new KeyValuePair(key, value));
  }

  // --- put ---
  public MappingElement MappingElement.put(String key, int value) {
    addKeyValuePair(key, ValueElement.of(value));
    return this;
  }
  public MappingElement MappingElement.put(String key, boolean value) {
    addKeyValuePair(key, ValueElement.of(value));
    return this;
  }
  public MappingElement MappingElement.put(String key, String value) {
    addKeyValuePair(key, makeStringElement(value));
    return this;
  }
  public MappingElement MappingElement.put(String key, Element inner) {
    addKeyValuePair(key, inner);
    return this;
  }

  // --- add ---
  public ListElement ListElement.add(int value) {
    addElement(ValueElement.of(value));
    return this;
  }
  public ListElement ListElement.add(boolean value) {
    addElement(ValueElement.of(value));
    return this;
  }
  public ListElement ListElement.add(String value) {
    addElement(makeStringElement(value));
    return this;
  }
  public ListElement ListElement.add(Element inner) {
    addElement(inner);
    return this;
  }

  // --- helper methods for put/add ---
  protected SimpleElement ComplexElement.makeStringElement(String value) {
    if (value == null || value.equals("null")) {
      return StringElement.of("null");
    }
    if (value.trim().isEmpty()) {
      return StringElement.of(value);
    }
    // simple test, check for special characters
    return containsAny(value, ":#,[{\"\n") ?
      StringElement.of(value.replace("\n", "\\n").replace("\"", "\\\"")) :
      ValueElement.of(value);
  }
  protected boolean ComplexElement.containsAny(String s, String searchChars) {
    // from https://stackoverflow.com/a/54399334/2493208
    java.util.Set<Character> charsToTestFor = searchChars.chars()
            .mapToObj(ch -> Character.valueOf((char) ch))
            .collect(java.util.stream.Collectors.toSet());
    return s.chars().anyMatch(ch -> charsToTestFor.contains(Character.valueOf((char) ch)));
  }

  // --- getValue ---
  public java.util.Optional<Element> MappingElement.getValue(String key) {
    for (KeyValuePair pair : getKeyValuePairList()) {
      if (pair.getKey().equals(key)) {
        return java.util.Optional.of(pair.getValue());
      }
    }
    return java.util.Optional.empty();
  }
}