Package org.geoserver.wfsv.xml.v1_1_0

Source Code of org.geoserver.wfsv.xml.v1_1_0.VersionedFeaturePropertyExtractor

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.wfsv.xml.v1_1_0;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDParticle;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDTypeDefinition;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geotools.data.VersioningFeatureSource;
import org.geotools.feature.FeatureCollection;
import org.geotools.util.logging.Logging;
import org.geotools.xml.PropertyExtractor;
import org.geotools.xs.XSConfiguration;
import org.opengis.feature.simple.SimpleFeature;

/**
* Extracts the extra four properties out of a versioned data type. To be used
* for encoding GetVersionedFeature output
* @author Andrea Aime
*
*/
public class VersionedFeaturePropertyExtractor implements PropertyExtractor {
    private static final String XSD_SCHEMA = "http://www.w3.org/2001/XMLSchema";

    private static final Logger LOGGER = Logging
            .getLogger("org.geoserver.wfsv.xml.v1_1_0");

    private static final XSDParticle CR_VERSION;

    private static final XSDParticle CR_AUTHOR;

    private static final XSDParticle CR_DATE;

    private static final XSDParticle CR_MESSAGE;
   
    private static final XSDParticle LU_VERSION;

    private static final XSDParticle LU_AUTHOR;

    private static final XSDParticle LU_DATE;

    private static final XSDParticle LU_MESSAGE;

    static {
        XSDSchema schema = new XSConfiguration().schema();
        CR_VERSION = particle(schema, "creationVersion", XSD_SCHEMA, "string", true, 0, 1);
        CR_AUTHOR = particle(schema, "createdBy", XSD_SCHEMA, "string", true, 0, 1);
        CR_DATE = particle(schema, "creationDate", XSD_SCHEMA, "dateTime", true, 0, 1);
        CR_MESSAGE = particle(schema, "creationMessage", XSD_SCHEMA, "string", true, 0, 1);
        LU_VERSION = particle(schema, "lastUpdateVersion", XSD_SCHEMA, "string", true, 0, 1);
        LU_AUTHOR = particle(schema, "lastUpdatedBy", XSD_SCHEMA, "string", true, 0, 1);
        LU_DATE = particle(schema, "lastUpdateDate", XSD_SCHEMA, "dateTime", true, 0, 1);
        LU_MESSAGE = particle(schema, "lastUpdateMessage", XSD_SCHEMA, "string", true, 0, 1);
    }

    static XSDParticle particle(XSDSchema schema, String elementName,
            String typeNS, String typeName, boolean nillable, int minOccurs,
            int maxOccurs) {
        XSDFactory factory = XSDFactory.eINSTANCE;
        XSDElementDeclaration element = factory.createXSDElementDeclaration();
        element.setName(elementName);
        element.setNillable(nillable);

        XSDTypeDefinition type = schema.resolveTypeDefinition(typeNS, typeName);
        element.setTypeDefinition(type);

        XSDParticle particle = factory.createXSDParticle();
        particle.setMinOccurs(minOccurs);
        particle.setMaxOccurs(maxOccurs);
        particle.setContent(element);
        return particle;
    }

    Catalog catalog;

    public VersionedFeaturePropertyExtractor(Catalog catalog) {
        this.catalog = catalog;
    }

    public boolean canHandle(Object object) {
        try {
            if (!(object instanceof SimpleFeature)
                    || object instanceof FeatureCollection)
                return false;

            SimpleFeature f = (SimpleFeature) object;
            FeatureTypeInfo info = catalog.getFeatureTypeByName(
                f.getFeatureType().getName().getNamespaceURI(),
                f.getFeatureType().getTypeName()
            );
            return info != null
                    && info.getFeatureSource(null,null) instanceof VersioningFeatureSource;
        } catch (Exception e) {
            LOGGER
                    .log(
                            Level.FINE,
                            "Error occurred trying to determine versioning status of a feature type",
                            e);
            return false;
        }
    }

    public List properties(Object object, XSDElementDeclaration elem) {
        SimpleFeature f = (SimpleFeature) object;
        List particles = new ArrayList();
        particles.add(particleValue(f, CR_VERSION));
        particles.add(particleValue(f, CR_AUTHOR));
        particles.add(particleValue(f, CR_DATE));
        particles.add(particleValue(f, CR_MESSAGE));
        particles.add(particleValue(f, LU_VERSION));
        particles.add(particleValue(f, LU_AUTHOR));
        particles.add(particleValue(f, LU_DATE));
        particles.add(particleValue(f, LU_MESSAGE));
        return particles;
    }

    private Object[] particleValue(SimpleFeature f, XSDParticle particle) {
        return new Object[] { particle, f.getAttribute(((XSDElementDeclaration) particle.getContent()).getName()) };
    }

}
TOP

Related Classes of org.geoserver.wfsv.xml.v1_1_0.VersionedFeaturePropertyExtractor

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.