in maven-jdev-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/jdeveloper/JDeveloperMojo.java [1116:1271]
private void replaceTagLibraries(Xpp3Dom projectDOM)
throws XmlPullParserException
{
// This boolean is set by specifying the jdev.plugin.add.taglibs
// property at the top of a project's pom file. There are projects
// that don't need taglibs in their .jpr files to compile and this
// allows them to be excluded.
if (!_addTagLibs)
return;
// /jpr:project
// /hash[@n="oracle.jdevimpl.webapp.jsp.libraries.model.ProjectTagLibraries"]
// /list[@n="tag-libaries"]
Xpp3Dom projectTagsDOM =
findNamedChild(projectDOM, "hash", "oracle.jdevimpl.webapp.jsp.libraries.model.ProjectTagLibraries");
Xpp3Dom tagLibsDOM =
findNamedChild(projectTagsDOM, "list", "tag-libraries");
Xpp3Dom targetLibsDOM = new Xpp3Dom("list");
//
// tagLibraryDefinitions
//
//<hash>
// <hash n="baseLibrary">
// <value n="name" v="JSF HTML"></value>
// <value n="version" v="1.2"></value>
// </hash>
// <value n="jspVersion" v="2.1"></value>
// <value n="name" v="JSF HTML"></value>
//
// <value n="tldURL" v="@oracle.home@/jdeveloper/modules/oracle.jsf_1.2.9/glassfish.jsf_1.2.9.0.jar!/META-INF"></value>
// <value n="URI" v="http://java.sun.com/jsf/html"></value>
// <value n="version" v="1.2"></value>
//</hash>
//
// Parent "hash"
Xpp3Dom hashDOM = null;
// <value...
Xpp3Dom valueDOM = null;
if (distributedTagLibraries != null &&
distributedTagLibraries.length > 0)
{
// Process each distributed Tag Library
for (int i = 0; i < distributedTagLibraries.length; i++)
{
Properties disTagLib = distributedTagLibraries[i];
String nameName = null;
String nameValue = null;
String versionName = null;
String versionValue = null;
// Create parent hash for each taglib
hashDOM = new Xpp3Dom("hash");
// baseLibrary "hash" for each taglib
Xpp3Dom hashBaseDOM = new Xpp3Dom("hash");
hashBaseDOM.setAttribute("n", "baseLibrary");
// Add baseLibrary hash to parent hash
hashDOM.addChild(hashBaseDOM);
// Process each property of the taglib
for (Enumeration keys = disTagLib.propertyNames();
keys.hasMoreElements(); )
{
// Get the name value pair
String name = (String) keys.nextElement();
String value = (String) disTagLib.get(name);
// Put the name and version values
// inside the baseLibrary hash.
// This only happens once per taglib
if ("name".equals(name))
{
nameName = name;
nameValue = value;
// n="name, v=<name of taglib> in baseLibrary
valueDOM = new Xpp3Dom("value");
valueDOM.setAttribute("n", name);
valueDOM.setAttribute("v", value);
hashBaseDOM.addChild(valueDOM);
// Duplicate the "name" <value...
// outside of the baseLibrary
// n="name, v=<name of taglib> in parent hash
valueDOM = new Xpp3Dom("value");
valueDOM.setAttribute("n", nameName);
valueDOM.setAttribute("v", nameValue);
hashDOM.addChild(valueDOM);
}
else if ("version".equals(name))
{
versionName = name;
versionValue = value;
// n="version" v=<taglib version> in baseLibrary
valueDOM = new Xpp3Dom("value");
valueDOM.setAttribute("n", name);
valueDOM.setAttribute("v", value);
hashBaseDOM.addChild(valueDOM);
// Duplicate the "version" <value...
// outside of the baseLibrary
// n="version" v=<taglib version> in parent hash
valueDOM = new Xpp3Dom("value");
valueDOM.setAttribute("n", versionName);
valueDOM.setAttribute("v", versionValue);
hashDOM.addChild(valueDOM);
}
else
{
if ("tld".equals(name))
{
// Did not want to have a URL in the pom file.
// I just wanted the user to specify the name
// of the tld file. So we fix it for JDev
// here.
name += "URL";
value = tagLibDirectory + "/" + value;
}
valueDOM = new Xpp3Dom("value");
valueDOM.setAttribute("n", name);
valueDOM.setAttribute("v", value);
hashDOM.addChild(valueDOM);
}
} //endfor processing each property
// We are done with this disTagLib
// Add it to the targetLibsDOM
if (hashDOM != null)
targetLibsDOM.addChild(hashDOM);
} // endfor processing each distributed tag lib
} //endif
else
{
// Use Default tag library configuration. See comment before
// replaceTagLibraries.
replaceDefaultTagLibraries(projectDOM, targetLibsDOM);
}
// Generate .jpr entries from the .tld files in the project's
// src/main/webapp/WEB-INF directory.
replaceLocalTagLibraries(targetLibsDOM);
// First, add JSP Runtime dependency if src/main/webapp exists
// TODO: use a better merge algorithm
removeChildren(tagLibsDOM);
// make sure to pass Boolean.FALSE to allow
// multiple child elements with the same name
Xpp3Dom.mergeXpp3Dom(tagLibsDOM, targetLibsDOM, Boolean.FALSE);
}