1 24 package com.izforge.izpack.ant; 25 26 import java.util.Enumeration ; 27 import java.util.Vector ; 28 29 import org.apache.tools.ant.BuildException; 30 import org.apache.tools.ant.Project; 31 32 39 public class ConfigHolder 40 { 41 42 private Project project; 43 44 45 private String installText; 46 47 65 static void parseCompileProperties(String value, Vector fragments, Vector propertyRefs) 66 throws BuildException 67 { 68 int prev = 0; 69 int pos; 70 while ((pos = value.indexOf("@", prev)) >= 0) 72 { 73 74 if (pos > 0) 79 { 80 fragments.addElement(value.substring(prev, pos)); 81 } 82 if (pos == (value.length() - 1)) 85 { 86 fragments.addElement("@"); 87 prev = pos + 1; 88 } 89 else if (value.charAt(pos + 1) != '{') 90 { 91 96 if (value.charAt(pos + 1) == '@') 97 { 98 fragments.addElement("@"); 100 prev = pos + 2; 101 } 102 else 103 { 104 fragments.addElement(value.substring(pos, pos + 2)); 106 prev = pos + 2; 107 } 108 109 } 110 else 111 { 112 int endName = value.indexOf('}', pos); 114 if (endName < 0) 115 { 116 throw new BuildException("Syntax error in property: " + value); 117 } 118 String propertyName = value.substring(pos + 2, endName); 119 fragments.addElement(null); 120 propertyRefs.addElement(propertyName); 121 prev = endName + 1; 122 } 123 } 124 if (prev < value.length()) 127 { 128 fragments.addElement(value.substring(prev)); 129 } 130 } 131 132 ConfigHolder(Project project) 133 { 134 this.project = project; 135 } 136 137 144 public void addText(String rawText) 145 { 146 Vector fragments = new Vector (); 148 Vector propertyRefs = new Vector (); 149 parseCompileProperties(rawText, fragments, propertyRefs); 150 151 StringBuffer sb = new StringBuffer (); 153 Enumeration i = fragments.elements(); 154 Enumeration j = propertyRefs.elements(); 155 156 while (i.hasMoreElements()) 157 { 158 String fragment = (String ) i.nextElement(); 159 if (fragment == null) 160 { 161 String propertyName = (String ) j.nextElement(); 162 Object replacement = null; 163 164 if (replacement == null) 166 { 167 replacement = project.getProperty(propertyName); 168 } 169 170 if (replacement == null) 171 { 172 project.log("Property @{" + propertyName + "} has not been set", 173 Project.MSG_VERBOSE); 174 } 175 if (replacement != null) 176 fragment = replacement.toString(); 177 else 178 fragment = "@{" + propertyName + "}"; 179 } 180 sb.append(fragment); 181 } 182 183 installText = sb.toString(); 184 } 185 186 191 public String getText() 192 { 193 return installText; 194 } 195 196 } 197 | Popular Tags |