|
|
@@ -64,6 +64,7 @@ import java.util.*; |
|
|
|
* |
|
|
|
* @author costin@dnt.ro |
|
|
|
* @author Sam Ruby <rubys@us.ibm.com> |
|
|
|
* @author Glenn McAllister <glennm@ca.ibm.com> |
|
|
|
*/ |
|
|
|
public class Property extends Task { |
|
|
|
|
|
|
@@ -101,20 +102,7 @@ public class Property extends Task { |
|
|
|
public void init() throws BuildException { |
|
|
|
try { |
|
|
|
if ((name != null) && (value != null)) { |
|
|
|
if( userProperty ) |
|
|
|
if (project.getUserProperty(name) == null) { |
|
|
|
project.setUserProperty(name, value); |
|
|
|
} else { |
|
|
|
log("Override ignored for " + name, |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
} |
|
|
|
else |
|
|
|
if (project.getProperty(name) == null) { |
|
|
|
project.setProperty(name, value); |
|
|
|
} else { |
|
|
|
log("Override ignored for " + name, |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
} |
|
|
|
addProperty(name, value); |
|
|
|
} |
|
|
|
|
|
|
|
if (file != null) loadFile(file); |
|
|
@@ -126,16 +114,18 @@ public class Property extends Task { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void loadFile (String name) { |
|
|
|
private void loadFile (String name) throws BuildException { |
|
|
|
Properties props = new Properties(); |
|
|
|
log("Loading " + name, Project.MSG_VERBOSE); |
|
|
|
try { |
|
|
|
if (new File(name).exists()) { |
|
|
|
props.load(new FileInputStream(name)); |
|
|
|
addProperties(props); |
|
|
|
} else { |
|
|
|
log("Unable to find " + name, Project.MSG_VERBOSE); |
|
|
|
} |
|
|
|
} catch(Exception ex) { |
|
|
|
ex.printStackTrace(); |
|
|
|
throw new BuildException(ex.getMessage(), ex, location); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -154,29 +144,99 @@ public class Property extends Task { |
|
|
|
} |
|
|
|
|
|
|
|
private void addProperties(Properties props) { |
|
|
|
resolveAllProperties(props); |
|
|
|
Enumeration e = props.keys(); |
|
|
|
while (e.hasMoreElements()) { |
|
|
|
String name = (String) e.nextElement(); |
|
|
|
String value = (String) props.getProperty(name); |
|
|
|
String v = ProjectHelper.replaceProperties(value, project.getProperties()); |
|
|
|
if( userProperty ) |
|
|
|
if (project.getUserProperty(name) == null) { |
|
|
|
project.setUserProperty(name, v); |
|
|
|
} else { |
|
|
|
log("Override ignored for " + name, |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
addProperty(name, value); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void setUserProperty( boolean userP ) { |
|
|
|
userProperty=userP; |
|
|
|
} |
|
|
|
|
|
|
|
private void addProperty(String n, String v) { |
|
|
|
if( userProperty ) { |
|
|
|
if (project.getUserProperty(n) == null) { |
|
|
|
project.setUserProperty(n, v); |
|
|
|
} else { |
|
|
|
log("Override ignored for " + name, Project.MSG_VERBOSE); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (project.getProperty(n) == null) { |
|
|
|
project.setProperty(n, v); |
|
|
|
} else { |
|
|
|
log("Override ignored for " + name, Project.MSG_VERBOSE); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void resolveAllProperties(Hashtable props) { |
|
|
|
Hashtable toResolve = new Hashtable(); |
|
|
|
Enumeration e = props.keys(); |
|
|
|
boolean more = true; |
|
|
|
|
|
|
|
while (more) { |
|
|
|
while (e.hasMoreElements()) { |
|
|
|
Vector propsInValue = new Vector(); |
|
|
|
String name = (String) e.nextElement(); |
|
|
|
String value = (String) props.get(name); |
|
|
|
|
|
|
|
if (extractProperties(value, propsInValue)) { |
|
|
|
for (int i=0; i < propsInValue.size(); i++) { |
|
|
|
String elem = (String) propsInValue.elementAt(i); |
|
|
|
if (project.getProperties().containsKey(elem) || |
|
|
|
props.containsKey(elem)) { |
|
|
|
toResolve.put(name, value); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
if (project.getProperty(name) == null) { |
|
|
|
project.setProperty(name, v); |
|
|
|
|
|
|
|
if (toResolve.size() > 0) { |
|
|
|
Enumeration tre = toResolve.keys(); |
|
|
|
while (tre.hasMoreElements()) { |
|
|
|
String name2 = (String) tre.nextElement(); |
|
|
|
String value2 = (String) toResolve.get(name2); |
|
|
|
String v = ProjectHelper.replaceProperties(value2, |
|
|
|
project.getProperties()); |
|
|
|
v = ProjectHelper.replaceProperties(v, props); |
|
|
|
props.put(name, v); |
|
|
|
} |
|
|
|
|
|
|
|
toResolve.clear(); |
|
|
|
e = props.keys(); |
|
|
|
} else { |
|
|
|
log("Override ignored for " + name, |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
more = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void setUserProperty( boolean userP ) { |
|
|
|
userProperty=userP; |
|
|
|
private boolean extractProperties(String source, Vector properties) { |
|
|
|
// This is an abreviated version of |
|
|
|
// ProjectHelper.replaceProperties method |
|
|
|
int i=0; |
|
|
|
int prev=0; |
|
|
|
int pos; |
|
|
|
|
|
|
|
while( (pos=source.indexOf( "$", prev )) >= 0 ) { |
|
|
|
if( pos == (source.length() - 1)) { |
|
|
|
prev = pos + 1; |
|
|
|
} else if (source.charAt( pos + 1 ) != '{' ) { |
|
|
|
prev=pos+2; |
|
|
|
} else { |
|
|
|
int endName=source.indexOf( '}', pos ); |
|
|
|
String n=source.substring( pos+2, endName ); |
|
|
|
properties.addElement(n); |
|
|
|
prev=endName+1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return (properties.size() > 0); |
|
|
|
} |
|
|
|
|
|
|
|
} |