17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2002-2012, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.util; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Collections; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Iterator; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Map; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.TreeMap; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class VariableReplacer { 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // simple implementation for now 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private Map m = new TreeMap(Collections.reverseOrder()); 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO - fix to do streams also, clean up implementation 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public VariableReplacer add(String variable, String value) { 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert m.put(variable, value); 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return this; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String replace(String source) { 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String oldSource; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert do { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert oldSource = source; 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Iterator it = m.keySet().iterator(); it.hasNext();) { 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String variable = (String) it.next(); 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String value = (String) m.get(variable); 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert source = replaceAll(source, variable, value); 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } while (!source.equals(oldSource)); 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return source; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String replaceAll(String source, String key, String value) { 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (true) { 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int pos = source.indexOf(key); 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (pos < 0) return source; 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert source = source.substring(0,pos) + value + source.substring(pos+key.length()); 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 45