view artifacts/src/main/java/org/dive4elements/river/artifacts/services/ThemeListingService.java @ 5866:9a6741ccf6d4

FLYS artifacts: Renamed FLYSContext(Factory) to RiverContext(Factory).
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2013 15:14:30 +0200
parents 4897a58c8746
children 35b2d86c3fb5
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3) 
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details. 
 */

package org.dive4elements.river.artifacts.services;

import java.util.List;

import org.apache.log4j.Logger;

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

import org.dive4elements.artifacts.CallMeta;
import org.dive4elements.artifacts.GlobalContext;

import org.dive4elements.artifacts.common.utils.XMLUtils;

import org.dive4elements.river.themes.Theme;
import org.dive4elements.river.themes.ThemeGroup;

import org.dive4elements.river.themes.ThemeFactory;
import org.dive4elements.river.artifacts.context.RiverContext;

/**
 * This service provides a list of themes filtered by the theme name.
 *
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class ThemeListingService extends FLYSService {

    /** The logger used in this service.*/
    private static Logger logger = Logger.getLogger(ThemeListingService.class);

    private static final String XPATH_THEME_NAME = "/theme/@name";

    protected Document doProcess(
        Document      data,
        GlobalContext context,
        CallMeta      callMeta
    ) {
        logger.debug("ThemeListingService.process");
        String name = XMLUtils.xpathString(data, XPATH_THEME_NAME, null);

        if (name == null) {
            logger.warn("No theme name provided.");
        }
        Document result = XMLUtils.newDocument();

        XMLUtils.ElementCreator ec = new XMLUtils.ElementCreator(
            result,
            null,
            null);

        List<ThemeGroup> tgs =
            ThemeFactory.getThemeGroups((RiverContext) context);

        Element te = ec.create("themes");

        for (ThemeGroup tg: tgs) {
            Element elem = ec.create("themegroup");
            if (tg.getName().equals("virtual")) {
                continue;
            }
            ec.addAttr(elem, "name", tg.getName());
            Theme theme = tg.getThemeByName(name);
            Document d = theme.toXML();
            Node imported = result.importNode(d.getDocumentElement(), true);
            elem.appendChild(imported);
            te.appendChild(elem);
        }

        result.appendChild(te);
        return result;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org