Package org.jboss.dashboard.displayer

Source Code of org.jboss.dashboard.displayer.AbstractDataDisplayerXMLFormat

/**
* Copyright (C) 2012 JBoss Inc
*
* 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 org.jboss.dashboard.displayer;

import org.jboss.dashboard.DataDisplayerServices;
import org.jboss.dashboard.domain.Domain;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.StringReader;
import java.util.Iterator;
import java.util.Map;
import java.util.Locale;

import org.jboss.dashboard.domain.DomainConfiguration;
import org.jboss.dashboard.domain.RangeConfiguration;
import org.jboss.dashboard.domain.date.DateDomain;
import org.jboss.dashboard.domain.label.LabelDomain;
import org.jboss.dashboard.domain.numeric.NumericDomain;
import org.jboss.dashboard.export.DataDisplayerXMLFormat;
import org.jboss.dashboard.export.ImportResults;
import org.jboss.dashboard.LocaleManager;
import org.apache.commons.lang.StringEscapeUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

/**
* Base class for the implementation of custom data displayer XML formatters.
*/
public abstract class AbstractDataDisplayerXMLFormat implements DataDisplayerXMLFormat {

    protected abstract void parseDisplayer(DataDisplayer displayer, NodeList xmlNodes, ImportResults results) throws Exception;
    protected abstract void formatDisplayer(DataDisplayer displayer, PrintWriter out, int indent) throws Exception;

    public void printIndent(PrintWriter out, int indent) {
        for (int i = 0; i < indent; i++) {
            out.print("  ");
        }
    }

    public DataDisplayer parse(String xml, ImportResults results) throws Exception {
        DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
        dFactory.setIgnoringComments(true);
        StringReader isr = new StringReader(xml);
        Document doc = dBuilder.parse(new InputSource(isr));
        isr.close();
        return parse(doc.getChildNodes(), results);
    }

    public DataDisplayer parse(NodeList xmlNodes, ImportResults results) throws Exception {
        for (int i = 0; i < xmlNodes.getLength(); i++) {
            Node item = xmlNodes.item(i);
            if (item.getNodeName().equals("displayer") && item.hasAttributes() && item.hasChildNodes()) {
                String typeUid = item.getAttributes().getNamedItem("type").getNodeValue();
                DataDisplayerType type = DataDisplayerServices.lookup().getDataDisplayerManager().getDisplayerTypeByUid(typeUid);
                DataDisplayerRenderer renderer = null;

                Node rendererNode = item.getAttributes().getNamedItem("renderer");
                if (rendererNode != null) {
                    String rendUid = rendererNode.getNodeValue();
                    renderer = DataDisplayerServices.lookup().getDataDisplayerManager().getDisplayerRendererByUid(rendUid);
                }
               
                DataDisplayer displayer = type.createDataDisplayer();
                displayer.setDataDisplayerRenderer(renderer);
                parseDisplayer(displayer, item.getChildNodes(), results);
                return displayer;
            }
        }
        throw new IllegalArgumentException("Missing <displayer> tag.");
    }

    protected DomainConfiguration parseDomain(NodeList domainNodes) {
        DomainConfiguration domainConfig = new DomainConfiguration();
        for (int k = 0; k < domainNodes.getLength(); k++) {
            Node item = domainNodes.item(k);
            if (item.getNodeName().equals("propertyid") && item.hasChildNodes()) {
                domainConfig.setPropertyId(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("name") && item.hasChildNodes()) {
                String name = item.getFirstChild().getNodeValue();
                Locale locale = LocaleManager.currentLocale();
                Node languageNode = item.getAttributes().getNamedItem("language");
                if (languageNode != null) locale = new Locale(languageNode.getNodeValue());
                domainConfig.setPropertyName(StringEscapeUtils.unescapeXml(name), locale);
            }
            if (item.getNodeName().equals("maxnumberofintervals") && item.hasChildNodes()) {
                domainConfig.setMaxNumberOfIntervals(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            // Label domain.
            if (item.getNodeName().equals("intervalstohide") && item.hasChildNodes()) {
                String interval = item.getFirstChild().getNodeValue();
                Locale locale = LocaleManager.currentLocale();
                Node languageNode = item.getAttributes().getNamedItem("language");
                if (languageNode != null) locale = new Locale(languageNode.getNodeValue());
                domainConfig.setLabelIntervalsToHide(StringEscapeUtils.unescapeXml(interval), locale);
            }
            // Date domain.
            if (item.getNodeName().equals("taminterval") && item.hasChildNodes()) {
                domainConfig.setDateTamInterval(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("mindate") && item.hasChildNodes()) {
                domainConfig.setDateMinDate(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("maxdate") && item.hasChildNodes()) {
                domainConfig.setDateMaxDate(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            // Numeric domain.
            if (item.getNodeName().equals("taminterval") && item.hasChildNodes()) {
                domainConfig.setNumericTamInterval(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("minvalue") && item.hasChildNodes()) {
                domainConfig.setNumericMinValue(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("maxvalue") && item.hasChildNodes()) {
                domainConfig.setNumericMaxValue(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
        }
        return domainConfig;
    }

    public String format(DataDisplayer displayer) throws Exception {
        if (!displayer.getDataProvider().isReady()) return "";
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        format(displayer, pw, 0);
        return sw.toString();
    }

    public void format(DataDisplayer displayer, PrintWriter out, int indent) throws Exception {
        DataDisplayerType displayerType = displayer.getDataDisplayerType();
        DataDisplayerRenderer displayerRenderer  = displayer.getDataDisplayerRenderer();

        printIndent(out, indent++);
        out.println("<displayer type=\"" + StringEscapeUtils.escapeXml(displayerType.getUid()) +"\" renderer=\"" + StringEscapeUtils.escapeXml(displayerRenderer.getUid()) + "\">");

        formatDisplayer(displayer, out, indent);

        printIndent(out, --indent);
        out.println("</displayer>");
    }

    protected void formatDomain(DomainConfiguration config, PrintWriter out, int indent) {
        printIndent(out, indent);
        out.print("<propertyid>");
        out.print(StringEscapeUtils.escapeXml(config.getPropertyId()));
        out.println("</propertyid>");

        Map domainNames = config.getPropertyNameI18nMap();
        Iterator domainKeys = domainNames.keySet().iterator();
        while (domainKeys.hasNext()) {
            Locale locale = (Locale) domainKeys.next();
            printIndent(out, indent);
            out.print("<name language");
            out.print("=\"" + StringEscapeUtils.escapeXml(locale.toString()) + "\">");
            out.print(StringEscapeUtils.escapeXml((String) domainNames.get(locale)));
            out.println("</name>");
        }

        printIndent(out, indent);
        out.print("<maxnumberofintervals>");
        out.print(StringEscapeUtils.escapeXml(String.valueOf(config.getMaxNumberOfIntervals())));
        out.println("</maxnumberofintervals>");

        // Label domain specifics.
        Domain domain = config.getDomainProperty().getDomain();
        if (domain instanceof LabelDomain) {
            Map intervalsToHide = config.getLabelIntervalsToHideI18nMap();
            Iterator intervalsIt = intervalsToHide.keySet().iterator();
            while (intervalsIt.hasNext()) {
                Locale locale = (Locale) intervalsIt.next();
                printIndent(out, indent);
                out.print("<intervalstohide language");
                out.print("=\"" + StringEscapeUtils.escapeXml(locale.toString()) + "\">");
                out.print(StringEscapeUtils.escapeXml((String) intervalsToHide.get(locale)));
                out.println("</intervalstohide>");
            }
        }
        // Date domain specifics.
        else if (domain instanceof DateDomain) {

            if (config.getDateTamInterval() != null) {
                printIndent(out, indent);
                out.print("<taminterval>");
                out.print(StringEscapeUtils.escapeXml(String.valueOf(config.getDateTamInterval())));
                out.println("</taminterval>");
            }
            if (config.getDateMinDate() != null) {
                printIndent(out, indent);
                out.print("<mindate>");
                out.print(StringEscapeUtils.escapeXml(config.getDateMinDate()));
                out.println("</mindate>");
            }
            if (config.getDateMaxDate() != null) {
                printIndent(out, indent);
                out.print("<maxdate>");
                out.print(StringEscapeUtils.escapeXml(config.getDateMaxDate()));
                out.println("</maxdate>");
            }
        }
        // Numeric domain specifics.
        else if (domain instanceof NumericDomain) {
            if (config.getNumericTamInterval() != null) {
                printIndent(out, indent);
                out.print("<taminterval>");
                out.print(StringEscapeUtils.escapeXml(String.valueOf(config.getNumericTamInterval())));
                out.println("</taminterval>");
            }
            if (config.getNumericMinValue() != null) {
                printIndent(out, indent);
                out.print("<minvalue>");
                out.print(StringEscapeUtils.escapeXml(String.valueOf(config.getNumericMinValue())));
                out.println("</minvalue>");
            }
            if (config.getNumericMaxValue() != null) {
                printIndent(out, indent);
                out.print("<maxvalue>");
                out.print(StringEscapeUtils.escapeXml(String.valueOf(config.getNumericMaxValue())));
                out.println("</maxvalue>");
            }
        }
    }

    protected RangeConfiguration parseRange(NodeList rangeNodes) {
        RangeConfiguration rangeConfig = new RangeConfiguration();
        for (int k = 0; k < rangeNodes.getLength(); k++) {
            Node item = rangeNodes.item(k);
            if (item.getNodeName().equals("propertyid") && item.hasChildNodes()) {
                rangeConfig.setPropertyId(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("name") && item.hasChildNodes()) {
                String name = item.getFirstChild().getNodeValue();
                Locale locale = LocaleManager.currentLocale();
                Node languageNode = item.getAttributes().getNamedItem("language");
                if (languageNode != null) locale = new Locale(languageNode.getNodeValue());
                rangeConfig.setName(StringEscapeUtils.unescapeXml(name), locale);
            }
            if (item.getNodeName().equals("scalarfunction") && item.hasChildNodes()) {
                rangeConfig.setScalarFunctionCode(StringEscapeUtils.unescapeXml(item.getFirstChild().getNodeValue()));
            }
            if (item.getNodeName().equals("unit") && item.hasChildNodes()) {
                String unit = item.getFirstChild().getNodeValue();
                Locale locale = LocaleManager.currentLocale();
                Node languageNode = item.getAttributes().getNamedItem("language");
                if (languageNode != null) locale = new Locale(languageNode.getNodeValue());
                rangeConfig.setUnit(StringEscapeUtils.unescapeXml(unit), locale);
            }
        }
        return rangeConfig;
    }

    protected void formatRange(RangeConfiguration config, PrintWriter out, int indent) {
        printIndent(out, indent);
        out.print("<propertyid>");
        out.print(StringEscapeUtils.escapeXml(config.getPropertyId()));
        out.println("</propertyid>");

        // Range properties.
        Map rangeDescriptions = config.getNameI18nMap();
        if (rangeDescriptions != null) {
            Iterator rangeKeys = rangeDescriptions.keySet().iterator();
            while (rangeKeys.hasNext()) {
                Locale rangeKey = (Locale) rangeKeys.next();
                printIndent(out, indent);
                out.print("<name language");
                out.print("=\"" + StringEscapeUtils.escapeXml(rangeKey.toString()) + "\">");
                out.print(StringEscapeUtils.escapeXml((String) rangeDescriptions.get(rangeKey)));
                out.println("</name>");
            }
        }
        String scalarFunctionCode = config.getScalarFunctionCode();
        if (scalarFunctionCode != null) {
            printIndent(out, indent);
            out.print("<scalarfunction>");
            out.print(StringEscapeUtils.escapeXml(String.valueOf(scalarFunctionCode)));
            out.println("</scalarfunction>");
        }

        // Unit
        Map unitDescriptions = config.getUnitI18nMap();
        if (unitDescriptions != null) {
            Iterator unitKeys = unitDescriptions.keySet().iterator();
            while (unitKeys.hasNext()) {
                Locale unitKey = (Locale) unitKeys.next();
                printIndent(out, indent);
                out.print("<unit language");
                out.print("=\"" + StringEscapeUtils.escapeXml(unitKey.toString()) + "\">");
                out.print(StringEscapeUtils.escapeXml((String) unitDescriptions.get(unitKey)));
                out.println("</unit>");
            }
        }
    }
}
TOP

Related Classes of org.jboss.dashboard.displayer.AbstractDataDisplayerXMLFormat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.