Package org.openstreetmap.osmosis.tagfilter.v0_6

Source Code of org.openstreetmap.osmosis.tagfilter.v0_6.TagFilterFactory

// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.tagfilter.v0_6;

import org.openstreetmap.osmosis.core.pipeline.common.TaskConfiguration;
import org.openstreetmap.osmosis.core.pipeline.common.TaskManager;
import org.openstreetmap.osmosis.core.pipeline.common.TaskManagerFactory;
import org.openstreetmap.osmosis.core.pipeline.v0_6.SinkSourceManager;

import java.util.Map;
import java.util.Set;
import java.util.HashMap;
import java.util.HashSet;

/**
* Extends the basic task manager factory functionality with TagFilter task
* specific common methods.
*
* @author Andrew Byrd
*/
public class TagFilterFactory extends TaskManagerFactory {
   
   
    /**
     * Decodes escaped wildcard, separator, equals, and space characters.
     *
     * @param s
     *      the String to decode.
     */
    private String unEscape(String s) {
        StringBuilder sb = new StringBuilder();
        boolean escaped = false;
        for (char c : s.toCharArray()) {
            if (escaped) {
                switch (c) {               
                    case '%': sb.append('%'); break;
                    case 'a': sb.append('*'); break;
                    case 'c': sb.append(','); break;
                    case 'e': sb.append('='); break;
                    case 's': sb.append(' '); break;
                    default : break;
                }
                escaped = false;
            } else {
                if (c == '%') {
                    escaped = true;
                } else {
                    sb.append(c);
                }
            }
        }
        return sb.toString();
    }
   
   
    /**
     * {@inheritDoc}
     */
    @Override
    protected TaskManager createTaskManagerImpl(TaskConfiguration taskConfig) {
        // Iterate over keyword arguments and fetch them through the appropriate TaskManagerFactory utility method
        // to avoid 'Argument was not recognized' exceptions from Osmosis
        Set<String> keys = new HashSet<String>();
        Map<String, Set<String>> keyValues = new HashMap<String, Set<String>>();
        for (String key : taskConfig.getConfigArgs().keySet()) {
            String value = getStringArgument(taskConfig, key);
            if (value.equals("*")) {
                keys.add(unEscape(key));
            } else {
                Set<String> values = new HashSet<String>();
                for (String v : value.split(",")) {
                    values.add(unEscape(v));
                }
                keyValues.put(unEscape(key), values);
            }
        }
        return new SinkSourceManager(
            taskConfig.getId(),
            new TagFilter(getDefaultStringArgument(taskConfig, ""), keys, keyValues),
            taskConfig.getPipeArgs()
        );
    }

}
TOP

Related Classes of org.openstreetmap.osmosis.tagfilter.v0_6.TagFilterFactory

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.