Package org.geoserver.csw.response

Source Code of org.geoserver.csw.response.TemplatedSchemaComponentDelegate

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.csw.response;

import static org.geoserver.ows.util.ResponseUtils.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Writer;
import java.nio.charset.Charset;

import net.opengis.cat.csw20.DescribeRecordType;

import org.apache.commons.io.IOUtils;
import org.geoserver.config.GeoServer;
import org.geoserver.csw.CSWInfo;
import org.geotools.feature.NameImpl;
import org.opengis.feature.type.AttributeDescriptor;
import org.opengis.feature.type.Name;

/**
* An implementation of {@link SchemaComponentDelegate} using a fixed file in the classpath to build
* the SchemaComponent representation, with a simple templating mechanism for the root of the schema
* locations (local vs schemas.opengis.net)
*
* @author Andrea Aime - GeoSolutions
*
*/
public class TemplatedSchemaComponentDelegate implements SchemaComponentDelegate {

    Name typeName;

    String schemaPath;

    GeoServer gs;

    public TemplatedSchemaComponentDelegate(GeoServer gs, String namespaceURI, String name, String schemaPath) {
        this.gs = gs;
        this.typeName = new NameImpl(namespaceURI, name);
        this.schemaPath = schemaPath;
    }

    @Override
    public boolean canHandle(AttributeDescriptor descriptor) {
        return typeName.equals(descriptor.getName());
    }

    @Override
    public void writeSchemaComponent(DescribeRecordType request, Writer bw, AttributeDescriptor descriptor) throws IOException {
        if(!canHandle(descriptor)) {
            throw new IllegalArgumentException("Cannot handle schema " + descriptor.getName());
        }
       
        //FeatureType schema = (FeatureType) descriptor.getType();
       
        // find the root of the schema location
        CSWInfo csw = gs.getService(CSWInfo.class);
        String schemaLocationRoot;
        if(csw.isCanonicalSchemaLocation()) {
            schemaLocationRoot = "http://schemas.opengis.net";
        } else {
            schemaLocationRoot = buildSchemaURL(request.getBaseUrl(), "");
            // remove the trailing /
            schemaLocationRoot = schemaLocationRoot.substring(0, schemaLocationRoot.length() - 1);
        }

       
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(schemaPath), Charset.forName("UTF-8")));
            String line;
            while((line = reader.readLine()) != null) {
                line = line.replace("%SCHEMAS_ROOT%", schemaLocationRoot);
                bw.write(line);
                bw.write("\n");
            }
        } finally {
            IOUtils.closeQuietly(reader);
        }
    }

}
TOP

Related Classes of org.geoserver.csw.response.TemplatedSchemaComponentDelegate

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.