package org.geotools.gml4wcs;
import java.util.Map;
import javax.xml.namespace.QName;
import net.opengis.gml.Gml4wcsFactory;
import org.eclipse.emf.ecore.EFactory;
import org.geotools.feature.DefaultFeatureCollections;
import org.geotools.gml2.FeaturePropertyExtractor;
import org.geotools.gml2.FeatureTypeCache;
import org.geotools.gml4wcs.bindings.AbstractGeometricPrimitiveTypeBinding;
import org.geotools.gml4wcs.bindings.AbstractGeometryBaseTypeBinding;
import org.geotools.gml4wcs.bindings.AbstractGeometryTypeBinding;
import org.geotools.gml4wcs.bindings.DirectPositionTypeBinding;
import org.geotools.gml4wcs.bindings.DoubleListBinding;
import org.geotools.gml4wcs.bindings.EnvelopeTypeBinding;
import org.geotools.gml4wcs.bindings.EnvelopeWithTimePeriodTypeBinding;
import org.geotools.gml4wcs.bindings.GridEnvelopeTypeBinding;
import org.geotools.gml4wcs.bindings.GridLimitsTypeBinding;
import org.geotools.gml4wcs.bindings.GridTypeBinding;
import org.geotools.gml4wcs.bindings.IntegerListBinding;
import org.geotools.gml4wcs.bindings.NameListBinding;
import org.geotools.gml4wcs.bindings.TemporalPositionTypeBinding;
import org.geotools.gml4wcs.bindings.TimeDurationTypeBinding;
import org.geotools.gml4wcs.bindings.TimePositionTypeBinding;
import org.geotools.xlink.XLINKConfiguration;
import org.geotools.xml.ComplexEMFBinding;
import org.geotools.xml.Configuration;
import org.picocontainer.MutablePicoContainer;
import com.vividsolutions.jts.geom.CoordinateSequenceFactory;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory;
/**
* Parser configuration for the http://www.opengis.net/gml schema.
*
* @generated
*
* @source $URL: http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-wcs/src/main/java/org/geotools/gml4wcs/GMLConfiguration.java $
*/
public class GMLConfiguration extends Configuration {
/**
* Creates a new configuration.
*
* @generated
*/
public GMLConfiguration() {
super(GML.getInstance());
addDependency(new XLINKConfiguration());
}
@Override
protected void registerBindings(Map bindings) {
super.registerBindings(bindings);
final EFactory gmlFactory = Gml4wcsFactory.eINSTANCE;
register(bindings, gmlFactory, GML._GeometricPrimitive);
register(bindings, gmlFactory, GML._Geometry);
register(bindings, gmlFactory, GML._GML);
register(bindings, gmlFactory, GML._MetaData);
register(bindings, gmlFactory, GML._Object);
register(bindings, gmlFactory, GML._Ring);
register(bindings, gmlFactory, GML._Surface);
bindings.put(GML.AbstractGeometricPrimitiveType, new AbstractGeometricPrimitiveTypeBinding());
bindings.put(GML.AbstractGeometryBaseType, new AbstractGeometryBaseTypeBinding());
bindings.put(GML.AbstractGeometryType, new AbstractGeometryTypeBinding());
bindings.put(GML.integerList, new IntegerListBinding());
bindings.put(GML.doubleList, new DoubleListBinding());
bindings.put(GML.NameList, new NameListBinding());
// temporal
bindings.put(GML.TimeDurationType, new TimeDurationTypeBinding());
bindings.put(GML.TimePositionType, new TimePositionTypeBinding());
bindings.put(GML.TemporalPositionType, new TemporalPositionTypeBinding());
// gml:pos
bindings.put(GML.DirectPositionType, new DirectPositionTypeBinding());
// CRS
register(bindings, gmlFactory, GML.CodeType);
register(bindings, gmlFactory, GML.CodeListType);
// Envelope
bindings.put(GML.EnvelopeType, new EnvelopeTypeBinding());
bindings.put(GML.EnvelopeWithTimePeriodType, new EnvelopeWithTimePeriodTypeBinding());
// Grid
bindings.put(GML.GridEnvelopeType, new GridEnvelopeTypeBinding());
bindings.put(GML.GridLimitsType, new GridLimitsTypeBinding());
bindings.put(GML.GridType, new GridTypeBinding());
//register(bindings, gmlFactory, GML.RectifiedGridType);
//register(bindings, gmlFactory, GML.GridType);
}
private void register(Map bindings, EFactory factory, QName qname) {
bindings.put(qname, new ComplexEMFBinding(factory, qname));
}
// /**
// * Registers the bindings for the configuration.
// *
// * @generated
// */
// protected final void registerBindings( MutablePicoContainer container ) {
// //Types
// container.registerComponentImplementation(GML.AbstractGeometricPrimitiveType,AbstractGeometricPrimitiveTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractGeometryBaseType,AbstractGeometryBaseTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractGeometryType,AbstractGeometryTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractGMLType,AbstractGMLTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractMetaDataType,AbstractMetaDataTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractRingPropertyType,AbstractRingPropertyTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractRingType,AbstractRingTypeBinding.class);
// container.registerComponentImplementation(GML.AbstractSurfaceType,AbstractSurfaceTypeBinding.class);
// container.registerComponentImplementation(GML.BoundingShapeType,BoundingShapeTypeBinding.class);
// container.registerComponentImplementation(GML.CodeListType,CodeListTypeBinding.class);
// container.registerComponentImplementation(GML.CodeType,CodeTypeBinding.class);
// container.registerComponentImplementation(GML.DirectPositionType,DirectPositionTypeBinding.class);
// container.registerComponentImplementation(GML.doubleList,DoubleListBinding.class);
// container.registerComponentImplementation(GML.EnvelopeType,EnvelopeTypeBinding.class);
// container.registerComponentImplementation(GML.EnvelopeWithTimePeriodType,EnvelopeWithTimePeriodTypeBinding.class);
// container.registerComponentImplementation(GML.GridEnvelopeType,GridEnvelopeTypeBinding.class);
// container.registerComponentImplementation(GML.GridLimitsType,GridLimitsTypeBinding.class);
// container.registerComponentImplementation(GML.GridType,GridTypeBinding.class);
// container.registerComponentImplementation(GML.integerList,IntegerListBinding.class);
// container.registerComponentImplementation(GML.LinearRingType,LinearRingTypeBinding.class);
// container.registerComponentImplementation(GML.MetaDataPropertyType,MetaDataPropertyTypeBinding.class);
// container.registerComponentImplementation(GML.NameList,NameListBinding.class);
// container.registerComponentImplementation(GML.PointType,PointTypeBinding.class);
// container.registerComponentImplementation(GML.PolygonType,PolygonTypeBinding.class);
// container.registerComponentImplementation(GML.RectifiedGridType,RectifiedGridTypeBinding.class);
// container.registerComponentImplementation(GML.ReferenceType,ReferenceTypeBinding.class);
// container.registerComponentImplementation(GML.StringOrRefType,StringOrRefTypeBinding.class);
// container.registerComponentImplementation(GML.TemporalPositionType,TemporalPositionTypeBinding.class);
// container.registerComponentImplementation(GML.TimeDurationType,TimeDurationTypeBinding.class);
// container.registerComponentImplementation(GML.TimeIndeterminateValueType,TimeIndeterminateValueTypeBinding.class);
// container.registerComponentImplementation(GML.TimePositionType,TimePositionTypeBinding.class);
// container.registerComponentImplementation(GML.VectorType,VectorTypeBinding.class);
// }
/**
* Configures the gml3 context.
* <p>
* The following factories are registered:
* <ul>
* <li>{@link CoordinateArraySequenceFactory} under {@link CoordinateSequenceFactory}
* <li>{@link GeometryFactory}
* </ul>
* </p>
*/
public void configureContext(MutablePicoContainer container) {
container.registerComponentInstance(Gml4wcsFactory.eINSTANCE);
container.registerComponentInstance(new FeatureTypeCache());
container.registerComponentImplementation(FeaturePropertyExtractor.class);
//factories
container.registerComponentInstance(CoordinateSequenceFactory.class, CoordinateArraySequenceFactory.instance());
container.registerComponentImplementation(GeometryFactory.class);
container.registerComponentImplementation(DefaultFeatureCollections.class);
}
}