Package org.geoserver.flow.config

Source Code of org.geoserver.flow.config.DefaultControlFlowConfigurator

/* Copyright (c) 2001 - 2008 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.flow.config;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.logging.Logger;

import org.geoserver.flow.ControlFlowConfigurator;
import org.geoserver.flow.FlowController;
import org.geoserver.flow.controller.BasicOWSController;
import org.geoserver.flow.controller.GlobalFlowController;
import org.geoserver.flow.controller.UserFlowController;
import org.geoserver.security.PropertyFileWatcher;
import org.geotools.util.logging.Logging;
import org.vfny.geoserver.global.GeoserverDataDirectory;

/**
* Basic property file based {@link ControlFlowConfigurator} implementation
*
* @author Andrea Aime - OpenGeo
*
*/
public class DefaultControlFlowConfigurator implements ControlFlowConfigurator {
    static final Logger LOGGER = Logging.getLogger(DefaultControlFlowConfigurator.class);

    PropertyFileWatcher configFile;

    long timeout = -1;

    public DefaultControlFlowConfigurator() {
        configFile = new PropertyFileWatcher(new File(GeoserverDataDirectory
                .getGeoserverDataDirectory(), "controlflow.properties"));
    }
   
    /**
     * Constructor used for testing purposes
     * @param watcher
     */
    DefaultControlFlowConfigurator(PropertyFileWatcher watcher) {
        this.configFile = watcher;
    }

    public List<FlowController> buildFlowControllers() throws Exception {
        timeout = -1;

        Properties p = configFile.getProperties();
        List<FlowController> newControllers = new ArrayList<FlowController>();
        for (Object okey : p.keySet()) {
            String key = ((String) okey).trim();
            String value = (String) p.get(okey);
            String[] keys = key.trim().split("\\s*\\.\\s*");

            int queueSize = 0;
            try {
                queueSize = Integer.parseInt(value);
            } catch (NumberFormatException e) {
                LOGGER.severe("Rules should be assigned just a queue size, instead " + okey
                        + " is associated to " + value);
                continue;
            }

            FlowController controller = null;
            if ("timeout".equalsIgnoreCase(key)) {
                timeout = queueSize * 1000;
                continue;
            }
            if ("ows.global".equalsIgnoreCase(key)) {
                controller = new GlobalFlowController(queueSize);
            } else if ("ows".equals(keys[0])) {
                // todo: check, if possible, if the service, method and output format actually exist
                if (keys.length >= 4) {
                    controller = new BasicOWSController(keys[1], keys[2], keys[3], queueSize);
                } else if (keys.length == 3) {
                    controller = new BasicOWSController(keys[1], keys[2], queueSize);
                } else if (keys.length == 2) {
                    controller = new BasicOWSController(keys[1], queueSize);
                }
            } else if ("user".equals(keys[0])) {
                controller = new UserFlowController(queueSize);
            }

            if (controller == null) {
                LOGGER.severe("Could not parse rule '" + okey + "=" + value);
            } else {
                newControllers.add(controller);
            }
        }

        return newControllers;
    }

    public boolean isStale() {
        return configFile.isStale();
    }

    public long getTimeout() {
        return timeout;
    }

}
TOP

Related Classes of org.geoserver.flow.config.DefaultControlFlowConfigurator

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.