in netbeansintegration/tags/3.0.2/src/org/openoffice/extensions/projecttemplates/actions/panel/DescriptionXmlHandler.java [308:471]
private void buildDomTree() throws ParserConfigurationException {
// Build the request document
if (m_DescriptionDocument == null) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
m_DescriptionDocument = builder.newDocument();
}
// comment for identifying the extension
setOrCreateComment(NB_PLUGIN_STAMP.concat(ProjectVersion.getProjectVersion()));
// root node
Element descriptionNode = getOrCreateElement(DESCRIPTION_TAG_NAME, m_DescriptionDocument);
descriptionNode.setAttribute("xmlns", NODE_NAMESPACE); // NOI18N
descriptionNode.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); // NOI18N
// version
Element versionNode = getOrCreateElement(VERSION_TAG_NAME, descriptionNode);
versionNode.setAttribute(VALUE_ATTRIBUTE_NAME, m_Version);
// identifier
Element idNode = getOrCreateElement(IDENTIFIER_TAG_NAME, descriptionNode);
idNode.setAttribute(VALUE_ATTRIBUTE_NAME, m_Identifier);
// icon
if (m_IconNames[DEFAULT_ICON] != null || m_IconNames[HIGH_DEFINITION_ICON] != null) { // at least one icon should be there
Element iconNode = getOrCreateElement(ICON_TAG_NAME, descriptionNode);
if (m_IconNames[DEFAULT_ICON] != null && m_IconNames[DEFAULT_ICON].length() > 0) {
Element defaultNode = getOrCreateElement(DEFAULT_ICON_TAG_NAME, iconNode);
defaultNode.setAttribute(URL_HREF_ATTRIBUTE_NAME, m_IconNames[DEFAULT_ICON]);
}
else {
deleteElements(DEFAULT_ICON_TAG_NAME);
}
if (m_IconNames[HIGH_DEFINITION_ICON] != null && m_IconNames[HIGH_DEFINITION_ICON].length() > 0) {
Element highContrastNode = getOrCreateElement(HIGH_CONTRAST_ICON_TAG_NAME, iconNode);
highContrastNode.setAttribute(URL_HREF_ATTRIBUTE_NAME, m_IconNames[HIGH_DEFINITION_ICON]);
}
else {
deleteElements(HIGH_CONTRAST_ICON_TAG_NAME);
}
}
else {
deleteElements(ICON_TAG_NAME);
}
// display name
// do not write out if nothing's set
if (m_DisplayName != null && m_DisplayName.getSize() > 0) {
Element updateNode = getOrCreateElement(DISPLAY_NAME_TAG_NAME, descriptionNode);
deleteElements(NAME_TAG_NAME, updateNode);
for (int i = 0; i < m_DisplayName.getSize(); i++) {
String locale = m_DisplayName.getShortLocale(i);
Element srcNode = getOrCreateElementWithAttribute(NAME_TAG_NAME, LANGUAGE_ATTRIBUTE_NAME, locale, updateNode);
// srcNode.setAttribute(LANGUAGE_ATTRIBUTE_NAME, locale);
String object = m_DisplayName.getProperty(i);
srcNode.setTextContent(object);
}
}
else {
deleteElements(DISPLAY_NAME_TAG_NAME);
}
// publisher name and link
// do not write out if nothing's set
if (m_PublisherData != null && m_PublisherData.getSize() > 0) {
Element publisherNode = getOrCreateElement(PUBLISHER_TAG_NAME, descriptionNode);
deleteElements(NAME_TAG_NAME, publisherNode);
for (int i = 0; i < m_PublisherData.getSize(); i++) {
String locale = m_PublisherData.getShortLocale(i);
Element nameNode = getOrCreateElementWithAttribute(NAME_TAG_NAME, LANGUAGE_ATTRIBUTE_NAME, locale, publisherNode);
String[] nameAndLink = m_PublisherData.getProperty(i);
nameNode.setAttribute(URL_HREF_ATTRIBUTE_NAME, nameAndLink[1]);
nameNode.setTextContent(nameAndLink[0]);
}
}
else {
deleteElements(PUBLISHER_TAG_NAME);
}
// update Urls
// do not write out if nothing's set
if (m_UpdateURLs != null && m_UpdateURLs.length != 0) {
Element updateNode = getOrCreateElement(URL_TAG_NAME, descriptionNode);
for (int i = 0; i < m_UpdateURLs.length; i++) {
Element srcNode = getOrCreateElementWithAttribute(URL_SRC_TAG_NAME, URL_HREF_ATTRIBUTE_NAME, m_UpdateURLs[i], updateNode);
// srcNode.setAttribute(URL_HREF_ATTRIBUTE_NAME, m_UpdateURLs[i]);
}
}
else {
deleteElements(URL_TAG_NAME);
}
// extension description
// do not write out if nothing's set
if (m_DescriptionData != null && m_DescriptionData.getSize() != 0) {
Element updateNode = getOrCreateElement(EXTENSION_DESCRIPTION_TAG_NAME, descriptionNode);
deleteElements(URL_SRC_TAG_NAME, updateNode);
for (int i = 0; i < m_DescriptionData.getSize(); i++) {
String descriptionFileReference = m_DescriptionData.getProperty(i);
String locale = m_DescriptionData.getShortLocale(i);
Element srcNode = getOrCreateElementWithAttribute(URL_SRC_TAG_NAME, LANGUAGE_ATTRIBUTE_NAME, locale, updateNode);
// srcNode.setAttribute(LANGUAGE_ATTRIBUTE_NAME, locale);
srcNode.setAttribute(URL_HREF_ATTRIBUTE_NAME, descriptionFileReference);
}
}
else {
deleteElements(URL_TAG_NAME);
}
// License Files
// do not write out if nothing's set
if (m_Licenses != null && m_Licenses.getSize() > 0) {
// String licenseDir = (String)ProjectTypeHelper.getObjectFromUnoProperties(m_ProjectDir, "licenses.dir"); // NOI18N
// if (licenseDir == null) {
// licenseDir = "licenses"; // NOI18N
// }
Element registrationNode = getOrCreateElement(REGISTRATION_TAG_NAME, descriptionNode);
Element depNode = getOrCreateElement(LICENSE_TAG_NAME, registrationNode);
depNode.setAttribute(ACCEPT_BY_ATTRIBUTE_NAME, m_acceptBy);
depNode.setAttribute(DEFAULT_LICENSE_ATTRIBUTE_NAME, m_Licenses.getDefaultShortLocale());
// remove existing elements: are created new anyway
deleteElements(LICENSE_TEXT_TAG_NAME);
for (int i = 0; i < m_Licenses.getSize(); i++) {
String locale = m_Licenses.getShortLocale(i);
// avoid getting an lement we just created: locle must be unique
Element srcNode = getOrCreateElementWithAttribute(LICENSE_TEXT_TAG_NAME,
LANGUAGE_ATTRIBUTE_NAME, locale, depNode);
String prop = m_Licenses.getProperty(i);
srcNode.setAttribute(URL_HREF_ATTRIBUTE_NAME, prop); // NOI18N
// srcNode.setAttribute(LANGUAGE_ATTRIBUTE_NAME, locale);
if (i == 0) { // double effort for default: now the first one is it, not the one with the right id.
srcNode.setAttribute(LICENSE_ID_ATTRIBUTE_NAME, m_Licenses.getDefaultShortLocale());
}
}
}
else {
deleteElements(REGISTRATION_TAG_NAME);
}
// dependencies
// do not write out if nothing's set
if ((m_DependencyValue != null && m_DependencyValue.length() != 0)
&& (m_DependencyName != null && m_DependencyName.length() != 0)) {
Element depNode = getOrCreateElement(DEPENDENCY_TAG_NAME, descriptionNode);
Element oooNode = getOrCreateElement(OOO_VERSION_TAG_NAME, depNode);
oooNode.setAttribute(VALUE_ATTRIBUTE_NAME, m_DependencyValue);
Attr attribute = oooNode.getAttributeNode(OOO_VERSION_ATTRIBUTE_NAME);
if (attribute == null) {
Attr newAttribute = m_DescriptionDocument.createAttributeNS(
NODE_NAMESPACE,
OOO_VERSION_ATTRIBUTE_NAME);
newAttribute.setValue(m_DependencyName);
oooNode.setAttributeNodeNS(newAttribute);
}
else {
attribute.setValue(m_DependencyName);
}
}
else {
deleteElements(DEPENDENCY_TAG_NAME);
}
}