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