001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.tools.template_engine; 003 004/** 005 * {@link TemplateEntry} that concatenates several templates. 006 */ 007public final class CompoundTemplateEntry implements TemplateEntry { 008 009 /** 010 * Factory method to concatenate several {@code TemplateEntry}s. 011 * 012 * If the number of entries is 0 or 1, the result may not be a {@code CompoundTemplateEntry}, 013 * but optimized to a static text or the single entry itself. 014 * @param entries the {@code TemplateEntry}s to concatenate 015 * @return a {@link TemplateEntry} that concatenates all the entries 016 */ 017 public static TemplateEntry fromArray(TemplateEntry... entries) { 018 if (entries.length == 0) 019 return new StaticText(""); 020 else if (entries.length == 1) 021 return entries[0]; 022 else 023 return new CompoundTemplateEntry(entries); 024 } 025 026 private CompoundTemplateEntry(TemplateEntry... entries) { 027 this.entries = entries; 028 } 029 030 private final TemplateEntry[] entries; 031 032 @Override 033 public void appendText(StringBuilder result, TemplateEngineDataProvider dataProvider) { 034 for (TemplateEntry te: entries) { 035 te.appendText(result, dataProvider); 036 } 037 } 038 039 @Override 040 public boolean isValid(TemplateEngineDataProvider dataProvider) { 041 for (TemplateEntry te: entries) { 042 if (!te.isValid(dataProvider)) 043 return false; 044 } 045 return true; 046 } 047 048 @Override 049 public String toString() { 050 StringBuilder result = new StringBuilder(); 051 for (TemplateEntry te: entries) { 052 result.append(te); 053 } 054 return result.toString(); 055 } 056}