OwsContextFactory.java

package de.turnertech.ows.common;

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

import jakarta.servlet.ServletException;

public abstract class OwsContextFactory {
    
    public final OwsContext createOwsContext() throws ServletException {
        DefaultOwsContext owsContext = new DefaultOwsContext();
        owsContext.setModelProvider(createModelProvider());
        if(owsContext.getModelProvider() == null) {
            throw new ServletException(OwsContextFactory.class.getSimpleName() + " returned null " + ModelProvider.class.getSimpleName());
        }

        owsContext.setWfsCapabilities(getWfsCapabilities());
        if(owsContext.getWfsCapabilities() == null) {
            throw new ServletException(OwsContextFactory.class.getSimpleName() + " returned null WfsCapabilities");
        }

        owsContext.setXmlNamespacePrefixMap(getNamespacePrefixMap());
        if(owsContext.getXmlNamespacePrefixMap() == null) {
            throw new ServletException(OwsContextFactory.class.getSimpleName() + " returned null Namespace Prefix Map");
        }

        owsContext.setXmlNamespaceSchemaMap(getNamespaceSchemaMap());
        if(owsContext.getXmlNamespaceSchemaMap() == null) {
            throw new ServletException(OwsContextFactory.class.getSimpleName() + " returned null Namespace Schema Map");
        }

        owsContext.setModelEncoderProvider(getModelEncoderProvider());
        if(owsContext.getXmlNamespaceSchemaMap() == null) {
            throw new ServletException(OwsContextFactory.class.getSimpleName() + " returned null Model Encoder Provider");
        }

        return owsContext;
    }

    public abstract ModelProvider createModelProvider();

    public ModelEncoderProvider getModelEncoderProvider() {
        return new DefaultModelEncoderProvider();
    }

    public abstract WfsCapabilities getWfsCapabilities();

    public Map<String, String> getNamespacePrefixMap() {
        Map<String, String> returnMap = new HashMap<>();
        returnMap.put("http://www.opengis.net/ows/1.1", "ows");
        returnMap.put("http://www.opengis.net/wfs/2.0", "wfs");
        returnMap.put("http://www.opengis.net/fes/2.0", "fes");
        returnMap.put("http://www.opengis.net/gml/3.2", "gml");
        returnMap.put("http://www.w3.org/2001/XMLSchema", "xsd");
        returnMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
        returnMap.put(OwsContext.XLINK_URI, "xlink");
        return returnMap;
    }

    public Map<String, String> getNamespaceSchemaMap() {
        Map<String, String> returnMap = new HashMap<>();
        returnMap.put("http://www.opengis.net/ows/1.1", "http://schemas.opengis.net/ows/1.1.0/owsAll.xsd");
        returnMap.put("http://www.opengis.net/wfs/2.0", "http://schemas.opengis.net/wfs/2.0/wfs.xsd");
        returnMap.put("http://www.opengis.net/fes/2.0", "http://schemas.opengis.net/filter/2.0/filterAll.xsd");
        returnMap.put("http://www.opengis.net/gml/3.2", "http://schemas.opengis.net/gml/3.2.1/gml.xsd");
        return returnMap;
    }

}