001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.tools.template_engine;
003
004 import java.util.Collection;
005
006
007 public class Variable implements TemplateEntry {
008
009 private static final String SPECIAL_VARIABLE_PREFIX = "special:";
010 private static final String SPECIAL_VALUE_EVERYTHING = "everything";
011
012
013 private final String variableName;
014 private final boolean special;
015
016 public Variable(String variableName) {
017 if (variableName.toLowerCase().startsWith(SPECIAL_VARIABLE_PREFIX)) {
018 this.variableName = variableName.substring(SPECIAL_VARIABLE_PREFIX.length());
019 // special:special:key means that real key named special:key is needed, not special variable
020 this.special = !this.variableName.toLowerCase().startsWith(SPECIAL_VARIABLE_PREFIX);
021 } else {
022 this.variableName = variableName;
023 this.special = false;
024 }
025 }
026
027 @Override
028 public void appendText(StringBuilder result, TemplateEngineDataProvider dataProvider) {
029 if (special && SPECIAL_VALUE_EVERYTHING.equals(variableName)) {
030 Collection<String> keys = dataProvider.getTemplateKeys();
031 boolean first = true;
032 for (String key: keys) {
033 if (!first) {
034 result.append(", ");
035 } else {
036 first = false;
037 }
038 result.append(key).append("=").append(dataProvider.getTemplateValue(key, false));
039 }
040 } else {
041 Object value = dataProvider.getTemplateValue(variableName, special);
042 if (value != null) {
043 result.append(value);
044 }
045 }
046 }
047
048 @Override
049 public boolean isValid(TemplateEngineDataProvider dataProvider) {
050 if (special && SPECIAL_VALUE_EVERYTHING.equals(variableName))
051 return true;
052 else
053 return dataProvider.getTemplateValue(variableName, special) != null;
054 }
055
056 @Override
057 public String toString() {
058 return "{" + variableName + "}";
059 }
060
061 public boolean isSpecial() {
062 return special;
063 }
064
065 }