Methods Summary |
---|
public void | addTask(org.apache.tools.ant.Task nestedTask)Add a unknownElement for the macro instances nested elements.
unknownElements.add(nestedTask);
|
public void | addText(java.lang.String text)Set the text contents for the macro.
this.text = text;
|
private org.apache.tools.ant.UnknownElement | copy(org.apache.tools.ant.UnknownElement ue)
UnknownElement ret = new UnknownElement(ue.getTag());
ret.setNamespace(ue.getNamespace());
ret.setProject(getProject());
ret.setQName(ue.getQName());
ret.setTaskType(ue.getTaskType());
ret.setTaskName(ue.getTaskName());
ret.setLocation(
macroDef.getBackTrace() ? ue.getLocation() : getLocation());
if (getOwningTarget() == null) {
Target t = new Target();
t.setProject(getProject());
ret.setOwningTarget(t);
} else {
ret.setOwningTarget(getOwningTarget());
}
RuntimeConfigurable rc = new RuntimeConfigurable(
ret, ue.getTaskName());
rc.setPolyType(ue.getWrapper().getPolyType());
Map m = ue.getWrapper().getAttributeMap();
for (Iterator i = m.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Map.Entry) i.next();
rc.setAttribute(
(String) entry.getKey(),
macroSubs((String) entry.getValue(), localAttributes));
}
rc.addText(macroSubs(ue.getWrapper().getText().toString(),
localAttributes));
Enumeration e = ue.getWrapper().getChildren();
while (e.hasMoreElements()) {
RuntimeConfigurable r = (RuntimeConfigurable) e.nextElement();
UnknownElement unknownElement = (UnknownElement) r.getProxy();
String tag = unknownElement.getTaskType();
if (tag != null) {
tag = tag.toLowerCase(Locale.US);
}
MacroDef.TemplateElement templateElement =
(MacroDef.TemplateElement) getNsElements().get(tag);
if (templateElement == null) {
UnknownElement child = copy(unknownElement);
rc.addChild(child.getWrapper());
ret.addChild(child);
} else if (templateElement.isImplicit()) {
if (unknownElements.size() == 0 && !templateElement.isOptional()) {
throw new BuildException(
"Missing nested elements for implicit element "
+ templateElement.getName());
}
for (Iterator i = unknownElements.iterator();
i.hasNext();) {
UnknownElement child = copy((UnknownElement) i.next());
rc.addChild(child.getWrapper());
ret.addChild(child);
}
} else {
UnknownElement presentElement =
(UnknownElement) presentElements.get(tag);
if (presentElement == null) {
if (!templateElement.isOptional()) {
throw new BuildException(
"Required nested element "
+ templateElement.getName() + " missing");
}
continue;
}
String presentText =
presentElement.getWrapper().getText().toString();
if (!"".equals(presentText)) {
rc.addText(macroSubs(presentText, localAttributes));
}
List list = presentElement.getChildren();
if (list != null) {
for (Iterator i = list.iterator();
i.hasNext();) {
UnknownElement child = copy((UnknownElement) i.next());
rc.addChild(child.getWrapper());
ret.addChild(child);
}
}
}
}
return ret;
|
public java.lang.Object | createDynamicElement(java.lang.String name)Method present for BC purposes.
throw new BuildException("Not implemented any more");
|
public void | execute()Execute the templates instance.
Copies the unknown element, substitutes the attributes,
and calls perform on the unknown element.
presentElements = new HashMap();
getNsElements();
processTasks();
localAttributes = new Hashtable();
Set copyKeys = new HashSet(map.keySet());
for (Iterator i = macroDef.getAttributes().iterator(); i.hasNext();) {
MacroDef.Attribute attribute = (MacroDef.Attribute) i.next();
String value = (String) map.get(attribute.getName());
if (value == null && "description".equals(attribute.getName())) {
value = getDescription();
}
if (value == null) {
value = attribute.getDefault();
value = macroSubs(value, localAttributes);
}
if (value == null) {
throw new BuildException(
"required attribute " + attribute.getName() + " not set");
}
localAttributes.put(attribute.getName(), value);
copyKeys.remove(attribute.getName());
}
if (copyKeys.contains("id")) {
copyKeys.remove("id");
}
if (macroDef.getText() != null) {
if (text == null) {
if (!macroDef.getText().getOptional()) {
throw new BuildException(
"required text missing");
}
text = "";
}
if (macroDef.getText().getTrim()) {
text = text.trim();
}
localAttributes.put(macroDef.getText().getName(), text);
} else {
if (text != null && !text.trim().equals("")) {
throw new BuildException(
"The \"" + getTaskName() + "\" macro does not support"
+ " nested text data.");
}
}
if (copyKeys.size() != 0) {
throw new BuildException(
"Unknown attribute" + (copyKeys.size() > 1 ? "s " : " ")
+ copyKeys);
}
// need to set the project on unknown element
UnknownElement c = copy(macroDef.getNestedTask());
c.init();
try {
c.perform();
} catch (BuildException ex) {
if (macroDef.getBackTrace()) {
throw ProjectHelper.addLocationToBuildException(
ex, getLocation());
} else {
ex.setLocation(getLocation());
throw ex;
}
} finally {
presentElements = null;
localAttributes = null;
}
|
public MacroDef | getMacroDef()
return macroDef;
|
private java.util.Map | getNsElements()
if (nsElements == null) {
nsElements = new HashMap();
for (Iterator i = macroDef.getElements().entrySet().iterator();
i.hasNext();) {
Map.Entry entry = (Map.Entry) i.next();
nsElements.put((String) entry.getKey(),
entry.getValue());
MacroDef.TemplateElement te = (MacroDef.TemplateElement)
entry.getValue();
if (te.isImplicit()) {
implicitTag = te.getName();
}
}
}
return nsElements;
|
private java.lang.String | macroSubs(java.lang.String s, java.util.Map macroMapping)
if (s == null) {
return null;
}
StringBuffer ret = new StringBuffer();
StringBuffer macroName = null;
int state = STATE_NORMAL;
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
switch (state) {
case STATE_NORMAL:
if (ch == '@") {
state = STATE_EXPECT_BRACKET;
} else {
ret.append(ch);
}
break;
case STATE_EXPECT_BRACKET:
if (ch == '{") {
state = STATE_EXPECT_NAME;
macroName = new StringBuffer();
} else if (ch == '@") {
state = STATE_NORMAL;
ret.append('@");
} else {
state = STATE_NORMAL;
ret.append('@");
ret.append(ch);
}
break;
case STATE_EXPECT_NAME:
if (ch == '}") {
state = STATE_NORMAL;
String name = macroName.toString().toLowerCase(Locale.US);
String value = (String) macroMapping.get(name);
if (value == null) {
ret.append("@{");
ret.append(name);
ret.append("}");
} else {
ret.append(value);
}
macroName = null;
} else {
macroName.append(ch);
}
break;
default:
break;
}
}
switch (state) {
case STATE_NORMAL:
break;
case STATE_EXPECT_BRACKET:
ret.append('@");
break;
case STATE_EXPECT_NAME:
ret.append("@{");
ret.append(macroName.toString());
break;
default:
break;
}
return ret.toString();
|
private void | processTasks()
if (implicitTag != null) {
return;
}
for (Iterator i = unknownElements.iterator(); i.hasNext();) {
UnknownElement ue = (UnknownElement) i.next();
String name = ProjectHelper.extractNameFromComponentName(
ue.getTag()).toLowerCase(Locale.US);
if (getNsElements().get(name) == null) {
throw new BuildException("unsupported element " + name);
}
if (presentElements.get(name) != null) {
throw new BuildException("Element " + name + " already present");
}
presentElements.put(name, ue);
}
|
public void | setDynamicAttribute(java.lang.String name, java.lang.String value)A parameter name value pair as a xml attribute.
map.put(name, value);
|
public void | setMacroDef(MacroDef macroDef)Called from MacroDef.MyAntTypeDefinition#create()
this.macroDef = macroDef;
|