private void buildDomTree()

in netbeansintegration/tags/4.1.0/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);
        }
    }