view flys-artifacts/src/main/java/de/intevation/flys/themes/DefaultTheme.java @ 2089:0da8874bd378

Added initial state to map artifact to be able to advance and step back. The map artifact overrides describe() to have the complete UI information in the describe response document. flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 06 Jan 2012 12:02:10 +0000
parents 6566c7868456
children fe29b0226faf
line wrap: on
line source
package de.intevation.flys.themes;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import de.intevation.artifacts.common.utils.XMLUtils;
import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;


/**
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class DefaultTheme implements Theme {

    /** The name of the theme.*/
    protected String name;

    /** The description of the theme.*/
    protected String description;

    protected String facet;

    protected int index;


    /** The map storing the fields of this theme.*/
    protected Map<String, ThemeField> fields;

    /** The map storing the attributes of this theme.*/
    protected Map<String, String> attr;


    /**
     * Initializes the components of this Theme.
     */
    public DefaultTheme(String name, String description) {
        this.name        = name;
        this.description = description;
        this.fields      = new HashMap<String, ThemeField>();
        this.attr        = new HashMap<String, String>();
    }


    public void init(Node config) {
    }


    public String getName() {
        return name;
    }


    public String getDescription() {
        return description;
    }


    public String getFacet() {
        return facet;
    }


    public void setFacet(String facet) {
        this.facet = facet;
    }


    public int getIndex() {
        return index;
    }


    public void setIndex(int index) {
        this.index = index;
    }


    public void addAttribute(String name, String value) {
        if (name != null && value != null) {
            attr.put(name, value);
        }
    }


    public String getAttribute(String name) {
        return attr.get(name);
    }


    public void addField(String name, ThemeField field) {
        if (name != null && field != null) {
            fields.put(name, field);
        }
    }


    public void setFieldValue(String name, Object value) {
        if (name != null && value != null) {
            ThemeField field = fields.get(name);

            if (field != null) {
                field.setValue(value);
            }
        }
    }


    public ThemeField getField(String name) {
        return fields.get(name);
    }


    public String getFieldType(String name) {
        ThemeField field = fields.get(name);

        return field != null ? field.getType() : null;
    }


    public Object getFieldValue(String name) {
        ThemeField field = fields.get(name);

        return field != null ? field.getValue() : null;
    }


    public Document toXML() {
        Document doc = XMLUtils.newDocument();

        ElementCreator cr = new ElementCreator(doc, null, null);

        Element theme = cr.create("theme");
        theme.setAttribute("facet", facet);
        theme.setAttribute("index", String.valueOf(index));

        appendAttributes(cr, theme);
        appendFields(cr, theme);

        doc.appendChild(theme);

        return doc;
    }


    /**
     * Appends the attributes configured for this theme.
     *
     * @param cr The ElementCreator.
     * @param theme The document root element.
     */
    protected void appendAttributes(ElementCreator cr, Element theme) {
        Iterator<String> iter = attr.keySet().iterator();

        while (iter.hasNext()) {
            String key = iter.next();
            String val = getAttribute(key);

            if (key == null || val == null) {
                continue;
            }

            cr.addAttr(theme, key, val);
        }
    }


    /**
     * Appends the fields configured for this theme.
     *
     * @param cr The ElementCreator.
     * @param theme The document root element.
     */
    protected void appendFields(ElementCreator cr, Element theme) {
        Iterator<String> iter = fields.keySet().iterator();

        while (iter.hasNext()) {
            String name = iter.next();

            ThemeField field = getField(name);

            Document doc = field.toXML();
            Node    root = doc.getFirstChild();

            theme.appendChild(theme.getOwnerDocument().importNode(root, true));
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org