eu.scape_project.planning.criteria.xml.CriteriaHierarchyExporter.java Source code

Java tutorial

Introduction

Here is the source code for eu.scape_project.planning.criteria.xml.CriteriaHierarchyExporter.java

Source

/*******************************************************************************
 * Copyright 2006 - 2012 Vienna University of Technology,
 * Department of Software Technology and Interactive Systems, IFS
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package eu.scape_project.planning.criteria.xml;

import java.io.Serializable;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Namespace;

import eu.scape_project.planning.model.kbrowser.CriteriaHierarchy;
import eu.scape_project.planning.model.kbrowser.CriteriaLeaf;
import eu.scape_project.planning.model.kbrowser.CriteriaNode;
import eu.scape_project.planning.model.kbrowser.CriteriaTreeNode;

/**
 * Method responsible for exporting CriteriaHierarchies.
 * 
 * @author Markus Hamm
 */
public class CriteriaHierarchyExporter implements Serializable {
    private static final long serialVersionUID = -2563221795308771643L;

    /**
     * Method responsible for exporting a CriteriaHierarchy to freemind-xml format.
     * 
     * @param criteriaHierarchy CriteriaHierarchy to export.
     * @return freemind-xml String.
     */
    public String exportToFreemindXml(CriteriaHierarchy criteriaHierarchy) {
        return exportToFreemindXml(criteriaHierarchy.getCriteriaTreeRoot());
    }

    /**
     * Method responsible for exporting a CriteriaHierarchy-TreeNode to freemind-xml format.
     * 
     * @param criteriaTreeNode CriteriaHierarchy-Treenode to export
     * @return freemind-xml String.
     */
    private String exportToFreemindXml(CriteriaTreeNode criteriaTreeNode) {
        Document doc = DocumentHelper.createDocument();
        doc.setXMLEncoding("UTF-8");

        Element root = doc.addElement("map");
        Namespace xsi = new Namespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");

        root.add(xsi);
        root.addAttribute("version", "0.8.1");

        root.addComment(
                "To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net");
        addSubTreeFreemind(root, criteriaTreeNode);

        String xml = doc.asXML();

        return xml;
    }

    /**
     * Method responsible for attaching the freemind-xml representation of the given CriteriaHierarchy-TreeNode to the given xml-element.
     * @param xmlElement Xml-element to attach freemind-xml to
     * @param criteriaTreeNode CriteriaHierarchy-TreeNode to convert and attach.
     */
    private void addSubTreeFreemind(Element xmlElement, CriteriaTreeNode criteriaTreeNode) {
        Element element = xmlElement.addElement("node");

        // LEAF
        if (criteriaTreeNode.isLeaf()) {
            CriteriaLeaf leaf = (CriteriaLeaf) criteriaTreeNode;
            String leafText = "";

            // mapped leaf
            if (leaf.getMapped() && leaf.getMeasure() != null) {
                leafText = leaf.getName() + "|" + leaf.getMeasure().getUri();
            }
            // unmapped leaf
            else {
                leafText = leaf.getName();
            }

            element.addAttribute("TEXT", leafText);
        }
        // NODE
        else {
            CriteriaNode node = (CriteriaNode) criteriaTreeNode;
            element.addAttribute("TEXT", node.getName());

            // add children
            for (CriteriaTreeNode child : node.getChildren()) {
                addSubTreeFreemind(element, child);
            }
        }
    }
}