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 }