VariablePart.java

package org.klojang.templates;

import java.util.Optional;

/**
 * A {@link Part} implementation for representing template variables.
 *
 * @author Ayco Holleman
 */
final class VariablePart extends AbstractPart implements NamedPart {

  private final VarGroup group;
  private final String name;

  private final String placeholder;

  VariablePart(int start, String prefix, String name, String placeholder) {
    super(start);
    if (prefix == null) {
      group = null;
    } else {
      group = VarGroup.withName(prefix);
    }
    this.name = name;
    this.placeholder = placeholder;
  }

  Optional<VarGroup> varGroup() {
    return Optional.ofNullable(group);
  }

  @Override
  public String name() {
    return name;
  }

  String placeholder() {
    return placeholder;
  }

  @Override
  public String toString() {
    if (placeholder == null) {
      return "~%" + name + "%";
    }
    return "<!-- ~%" + name + "% -->" + placeholder + "<!--%-->";
  }

  VariableOccurrence toOccurrence() {
    return new VariableOccurrence(name,
        Optional.ofNullable(group),
        Optional.ofNullable(placeholder),
        start());
  }

}