Package org.geoserver.csw.response

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

/* (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.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.List;

import net.opengis.cat.csw20.DescribeRecordType;

import org.geoserver.config.GeoServer;
import org.geoserver.csw.CSWInfo;
import org.geoserver.ows.Response;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.platform.Operation;
import org.geoserver.platform.ServiceException;
import org.opengis.feature.type.AttributeDescriptor;

/**
* Encodes the DescribeRecord response
*
* @author Andrea Aime - GeoSolutions
*/
public class DescribeRecordResponse extends Response {

    private GeoServer gs;

    public DescribeRecordResponse(GeoServer gs) {
        super(AttributeDescriptor[].class, "application/xml");
        this.gs = gs;
    }

    @Override
    public String getMimeType(Object value, Operation operation) throws ServiceException {
        return "application/xml";
    }

    @Override
    public void write(Object value, OutputStream output, Operation operation) throws IOException,
            ServiceException {
        AttributeDescriptor[] descriptors = (AttributeDescriptor[]) value;

        Writer writer = new OutputStreamWriter(output, Charset.forName("UTF-8"));

        // find the root of the schema location
        DescribeRecordType request = (DescribeRecordType) operation.getParameters()[0];
        CSWInfo csw = gs.getService(CSWInfo.class);
        String schemaLocationRoot;
        if (csw.isCanonicalSchemaLocation()) {
            schemaLocationRoot = "http://schemas.opengis.net/csw/2.0.2";
        } else {
            schemaLocationRoot = buildSchemaURL(request.getBaseUrl(), "csw/2.0.2");
        }

        // write out the container
        writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                + "<csw:DescribeRecordResponse xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" "
                + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
                + "xsi:schemaLocation=\"http://www.opengis.net/cat/csw/2.0.2 " + schemaLocationRoot
                + "/CSW-discovery.xsd\">\n");

        List<SchemaComponentDelegate> delegates = GeoServerExtensions
                .extensions(SchemaComponentDelegate.class);

        // write out all the schemas
        for (AttributeDescriptor descriptor : descriptors) {
            for (SchemaComponentDelegate delegate : delegates) {
                if (delegate.canHandle(descriptor)) {
                    delegate.writeSchemaComponent(request, writer, descriptor);
                    break;
                }
            }
        }

        // write out the container close up
        writer.write("</csw:DescribeRecordResponse>");
        writer.flush();
    }

}
TOP

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

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.