|
|
@@ -81,7 +81,8 @@ public class ProjectHelper { |
|
|
|
/** |
|
|
|
* Configures the Project with the contents of the specified XML file. |
|
|
|
*/ |
|
|
|
public static void configureProject(Project project, File buildFile) throws BuildException { |
|
|
|
public static void configureProject(Project project, File buildFile) |
|
|
|
throws BuildException { |
|
|
|
new ProjectHelper(project, buildFile).parse(); |
|
|
|
} |
|
|
|
|
|
|
@@ -108,11 +109,13 @@ public class ProjectHelper { |
|
|
|
saxParser.parse(inputStream, new RootHandler()); |
|
|
|
} |
|
|
|
catch(ParserConfigurationException exc) { |
|
|
|
throw new BuildException("Parser has not been configured correctly", exc); |
|
|
|
throw new BuildException("Parser has not been configured " + |
|
|
|
"correctly", exc); |
|
|
|
} |
|
|
|
catch(SAXParseException exc) { |
|
|
|
Location location = |
|
|
|
new Location(buildFile.toString(), exc.getLineNumber(), exc.getColumnNumber()); |
|
|
|
new Location(buildFile.toString(), exc.getLineNumber(), |
|
|
|
exc.getColumnNumber()); |
|
|
|
|
|
|
|
Throwable t = exc.getException(); |
|
|
|
if (t instanceof BuildException) { |
|
|
@@ -172,15 +175,19 @@ public class ProjectHelper { |
|
|
|
parser.setDocumentHandler(this); |
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String tag, AttributeList attrs) throws SAXParseException { |
|
|
|
throw new SAXParseException("Unexpected element \"" + tag + "\"", locator); |
|
|
|
public void startElement(String tag, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
throw new SAXParseException("Unexpected element \"" + tag + "\"", |
|
|
|
locator); |
|
|
|
} |
|
|
|
|
|
|
|
public void characters(char[] buf, int start, int end) throws SAXParseException { |
|
|
|
public void characters(char[] buf, int start, int end) |
|
|
|
throws SAXParseException { |
|
|
|
String s = new String(buf, start, end).trim(); |
|
|
|
|
|
|
|
if (s.length() > 0) { |
|
|
|
throw new SAXParseException("Unexpected text \"" + s + "\"", locator); |
|
|
|
throw new SAXParseException("Unexpected text \"" + s + "\"", |
|
|
|
locator); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -199,7 +206,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Handler for the root element. It's only child must be the "project" element. |
|
|
|
* Handler for the root element. It's only child must be the "project" |
|
|
|
* element. |
|
|
|
*/ |
|
|
|
private class RootHandler extends HandlerBase { |
|
|
|
|
|
|
@@ -227,11 +235,13 @@ public class ProjectHelper { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String tag, AttributeList attrs) throws SAXParseException { |
|
|
|
public void startElement(String tag, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
if (tag.equals("project")) { |
|
|
|
new ProjectHandler(this).init(tag, attrs); |
|
|
|
} else { |
|
|
|
throw new SAXParseException("Config file is not of expected XML type", locator); |
|
|
|
throw new SAXParseException("Config file is not of " + |
|
|
|
"expected XML type", locator); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -248,7 +258,8 @@ public class ProjectHelper { |
|
|
|
super(parentHandler); |
|
|
|
} |
|
|
|
|
|
|
|
public void init(String tag, AttributeList attrs) throws SAXParseException { |
|
|
|
public void init(String tag, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
String def = null; |
|
|
|
String name = null; |
|
|
|
String id = null; |
|
|
@@ -267,15 +278,15 @@ public class ProjectHelper { |
|
|
|
} else if (key.equals("basedir")) { |
|
|
|
baseDir = value; |
|
|
|
} else { |
|
|
|
throw new SAXParseException("Unexpected attribute \"" + attrs.getName(i) + "\"", locator); |
|
|
|
throw new SAXParseException("Unexpected attribute \"" + |
|
|
|
attrs.getName(i) + "\"", locator); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (def == null) { |
|
|
|
throw new SAXParseException("The default attribute of project is required", |
|
|
|
locator); |
|
|
|
throw new SAXParseException("The default attribute of " + |
|
|
|
"project is required", locator); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
project.setDefaultTarget(def); |
|
|
|
|
|
|
@@ -296,14 +307,17 @@ public class ProjectHelper { |
|
|
|
if ((new File(baseDir)).isAbsolute()) { |
|
|
|
project.setBasedir(baseDir); |
|
|
|
} else { |
|
|
|
project.setBasedir((new File(buildFileParent, baseDir)).getAbsolutePath()); |
|
|
|
project.setBasedir(( |
|
|
|
new File(buildFileParent, baseDir)) |
|
|
|
.getAbsolutePath()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
public void startElement(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
if (name.equals("taskdef")) { |
|
|
|
handleTaskdef(name, attrs); |
|
|
|
} else if (name.equals("property")) { |
|
|
@@ -313,23 +327,28 @@ public class ProjectHelper { |
|
|
|
} else if (project.getDataTypeDefinitions().get(name) != null) { |
|
|
|
handleDataType(name, attrs); |
|
|
|
} else { |
|
|
|
throw new SAXParseException("Unexpected element \"" + name + "\"", locator); |
|
|
|
throw new SAXParseException("Unexpected element \"" + name + |
|
|
|
"\"", locator); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void handleTaskdef(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
private void handleTaskdef(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
(new TaskHandler(this, null)).init(name, attrs); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleProperty(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
private void handleProperty(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
(new TaskHandler(this, null)).init(name, attrs); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleTarget(String tag, AttributeList attrs) throws SAXParseException { |
|
|
|
private void handleTarget(String tag, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
new TargetHandler(this).init(tag, attrs); |
|
|
|
} |
|
|
|
|
|
|
|
private void handleDataType(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
private void handleDataType(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
new DataTypeHandler(this).init(name, attrs); |
|
|
|
} |
|
|
|
|
|
|
@@ -345,13 +364,15 @@ public class ProjectHelper { |
|
|
|
super(parentHandler); |
|
|
|
} |
|
|
|
|
|
|
|
public void init(String tag, AttributeList attrs) throws SAXParseException { |
|
|
|
public void init(String tag, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
String name = null; |
|
|
|
String depends = ""; |
|
|
|
String ifCond = null; |
|
|
|
String unlessCond = null; |
|
|
|
String id = null; |
|
|
|
String description = null; |
|
|
|
String token = null; |
|
|
|
|
|
|
|
for (int i = 0; i < attrs.getLength(); i++) { |
|
|
|
String key = attrs.getName(i); |
|
|
@@ -369,13 +390,17 @@ public class ProjectHelper { |
|
|
|
id = value; |
|
|
|
} else if (key.equals("description")) { |
|
|
|
description = value; |
|
|
|
} else if (key.equals("token")) { |
|
|
|
token = value; |
|
|
|
} else { |
|
|
|
throw new SAXParseException("Unexpected attribute \"" + key + "\"", locator); |
|
|
|
throw new SAXParseException("Unexpected attribute \"" + |
|
|
|
key + "\"", locator); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (name == null) { |
|
|
|
throw new SAXParseException("target element appears without a name attribute", locator); |
|
|
|
throw new SAXParseException("target element appears without " + |
|
|
|
"a name attribute", locator); |
|
|
|
} |
|
|
|
|
|
|
|
target = new Target(); |
|
|
@@ -383,6 +408,11 @@ public class ProjectHelper { |
|
|
|
target.setIf(ifCond); |
|
|
|
target.setUnless(unlessCond); |
|
|
|
target.setDescription(description); |
|
|
|
if (token == null) { |
|
|
|
target.setToken("@"); |
|
|
|
} |
|
|
|
else |
|
|
|
target.setToken(token); |
|
|
|
project.addTarget(name, target); |
|
|
|
|
|
|
|
if (id != null && !id.equals("")) |
|
|
@@ -399,7 +429,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
public void startElement(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
new TaskHandler(this, target).init(name, attrs); |
|
|
|
} |
|
|
|
} |
|
|
@@ -418,7 +449,8 @@ public class ProjectHelper { |
|
|
|
this.target = target; |
|
|
|
} |
|
|
|
|
|
|
|
public void init(String tag, AttributeList attrs) throws SAXParseException { |
|
|
|
public void init(String tag, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
try { |
|
|
|
task = project.createTask(tag); |
|
|
|
} catch (BuildException e) { |
|
|
@@ -431,7 +463,8 @@ public class ProjectHelper { |
|
|
|
task.setProject(project); |
|
|
|
} |
|
|
|
|
|
|
|
task.setLocation(new Location(buildFile.toString(), locator.getLineNumber(), locator.getColumnNumber())); |
|
|
|
task.setLocation(new Location(buildFile.toString(), |
|
|
|
locator.getLineNumber(), locator.getColumnNumber())); |
|
|
|
configureId(task, attrs); |
|
|
|
|
|
|
|
// Top level tasks don't have associated targets |
|
|
@@ -453,7 +486,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void characters(char[] buf, int start, int end) throws SAXParseException { |
|
|
|
public void characters(char[] buf, int start, int end) |
|
|
|
throws SAXParseException { |
|
|
|
if (wrapper == null) { |
|
|
|
try { |
|
|
|
addText(task, buf, start, end); |
|
|
@@ -465,7 +499,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
public void startElement(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
new NestedElementHandler(this, task, wrapper).init(name, attrs); |
|
|
|
} |
|
|
|
} |
|
|
@@ -492,7 +527,8 @@ public class ProjectHelper { |
|
|
|
this.parentWrapper = parentWrapper; |
|
|
|
} |
|
|
|
|
|
|
|
public void init(String propType, AttributeList attrs) throws SAXParseException { |
|
|
|
public void init(String propType, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
Class targetClass = target.getClass(); |
|
|
|
IntrospectionHelper ih = |
|
|
|
IntrospectionHelper.getHelper(targetClass); |
|
|
@@ -519,7 +555,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void characters(char[] buf, int start, int end) throws SAXParseException { |
|
|
|
public void characters(char[] buf, int start, int end) |
|
|
|
throws SAXParseException { |
|
|
|
if (parentWrapper == null) { |
|
|
|
try { |
|
|
|
addText(child, buf, start, end); |
|
|
@@ -531,8 +568,10 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
new NestedElementHandler(this, child, childWrapper).init(name, attrs); |
|
|
|
public void startElement(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
new NestedElementHandler(this, child, childWrapper) |
|
|
|
.init(name, attrs); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -546,7 +585,8 @@ public class ProjectHelper { |
|
|
|
super(parentHandler); |
|
|
|
} |
|
|
|
|
|
|
|
public void init(String propType, AttributeList attrs) throws SAXParseException { |
|
|
|
public void init(String propType, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
try { |
|
|
|
element = project.createDataType(propType); |
|
|
|
if (element == null) { |
|
|
@@ -560,7 +600,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void characters(char[] buf, int start, int end) throws SAXParseException { |
|
|
|
public void characters(char[] buf, int start, int end) |
|
|
|
throws SAXParseException { |
|
|
|
try { |
|
|
|
addText(element, buf, start, end); |
|
|
|
} catch (BuildException exc) { |
|
|
@@ -568,7 +609,8 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void startElement(String name, AttributeList attrs) throws SAXParseException { |
|
|
|
public void startElement(String name, AttributeList attrs) |
|
|
|
throws SAXParseException { |
|
|
|
new NestedElementHandler(this, element, null).init(name, attrs); |
|
|
|
} |
|
|
|
} |
|
|
@@ -625,7 +667,8 @@ public class ProjectHelper { |
|
|
|
|
|
|
|
/** Replace ${NAME} with the property value |
|
|
|
*/ |
|
|
|
public static String replaceProperties(Project project, String value, Hashtable keys ) |
|
|
|
public static String replaceProperties(Project project, String value, |
|
|
|
Hashtable keys ) |
|
|
|
throws BuildException |
|
|
|
{ |
|
|
|
// XXX use Map instead of proj, it's too heavy |
|
|
@@ -655,10 +698,12 @@ public class ProjectHelper { |
|
|
|
} |
|
|
|
String n=value.substring( pos+2, endName ); |
|
|
|
if (!keys.containsKey(n)) { |
|
|
|
project.log("Property ${" + n + "} has not been set", Project.MSG_VERBOSE); |
|
|
|
project.log("Property ${" + n + "} has not been set", |
|
|
|
Project.MSG_VERBOSE); |
|
|
|
} |
|
|
|
|
|
|
|
String v = (keys.containsKey(n)) ? (String) keys.get(n) : "${"+n+"}"; |
|
|
|
String v = (keys.containsKey(n)) ? |
|
|
|
(String) keys.get(n) : "${"+n+"}"; |
|
|
|
|
|
|
|
//System.out.println("N: " + n + " " + " V:" + v); |
|
|
|
sb.append( v ); |
|
|
@@ -692,5 +737,4 @@ public class ProjectHelper { |
|
|
|
project.addReference(id, target); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |