Package org.geotools.gml2.bindings

Source Code of org.geotools.gml2.bindings.AbstractGMLBindingTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.gml2.bindings;

import java.util.Iterator;
import java.util.List;

import javax.xml.namespace.QName;

import junit.framework.TestCase;

import org.eclipse.xsd.XSDAttributeDeclaration;
import org.eclipse.xsd.XSDElementDeclaration;
import org.eclipse.xsd.XSDFactory;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSimpleTypeDefinition;
import org.eclipse.xsd.XSDTypeDefinition;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.gml2.GMLConfiguration;
import org.geotools.xml.AttributeInstance;
import org.geotools.xml.Binding;
import org.geotools.xml.ElementInstance;
import org.geotools.xml.InstanceComponent;
import org.geotools.xml.Node;
import org.geotools.xml.impl.AttributeImpl;
import org.geotools.xml.impl.ElementImpl;
import org.geotools.xml.impl.NodeImpl;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.picocontainer.MutablePicoContainer;
import org.picocontainer.defaults.DefaultPicoContainer;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.CoordinateSequenceFactory;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory;


/**
*
*
* @source $URL$
*/
public class AbstractGMLBindingTest extends TestCase {
    XSDSchema schema;
    MutablePicoContainer container;
    SimpleFeatureTypeBuilder ftBuilder;

    protected void setUp() throws Exception {
        String loc = GMLConfiguration.class.getResource("feature.xsd").toString();

        GMLConfiguration configuration = new GMLConfiguration();
        schema = configuration.schema();
        container = new DefaultPicoContainer();

        configuration.registerBindings(container);

        ftBuilder = new SimpleFeatureTypeBuilder();
    }

    protected void tearDown() throws Exception {
        container.dispose();
    }

    Binding getBinding(QName type) {
        return (Binding) container.getComponentInstance(type);
    }

    Node createNode(InstanceComponent instance, ElementInstance[] elements, Object[] elementValues,
        AttributeInstance[] attributes, Object[] attValues) {
        NodeImpl node = new NodeImpl(instance);

        if ((elements != null) && (elements.length > 0)) {
            for (int i = 0; i < elements.length; i++) {
                node.addChild(new NodeImpl(elements[i], elementValues[i]));
            }
        }

        if ((attributes != null) && (attributes.length > 0)) {
            for (int i = 0; i < attributes.length; i++) {
                node.addAttribute(new NodeImpl(attributes[i], attValues[i]));
            }
        }

        return node;
    }

    AttributeInstance createAtribute(String namespace, String name, QName type, String text) {
        XSDAttributeDeclaration declaration = XSDFactory.eINSTANCE.createXSDAttributeDeclaration();
        declaration.setName(name);
        declaration.setTargetNamespace(namespace);
        declaration.setTypeDefinition((XSDSimpleTypeDefinition) findTypeDefinition(schema, type));

        AttributeInstance attribute = new AttributeImpl(declaration);
        attribute.setName(name);
        attribute.setNamespace(namespace);
        attribute.setText(text);

        return attribute;
    }

    ElementInstance createElement(String namespace, String name, QName type, String text) {
        XSDElementDeclaration declaration = XSDFactory.eINSTANCE.createXSDElementDeclaration();
        declaration.setName(name);
        declaration.setTargetNamespace(namespace);
        declaration.setTypeDefinition(findTypeDefinition(schema, type));

        ElementInstance element = new ElementImpl(declaration);

        element.setName(name);
        element.setNamespace(namespace);
        element.setText(text);

        return element;
    }

    public CoordinateSequence createCoordinateSequence(Coordinate c) {
        return createCoordinateSequence(new Coordinate[] { c });
    }

    public CoordinateSequence createCoordinateSequence(Coordinate[] c) {
        CoordinateSequenceFactory csFactory = CoordinateArraySequenceFactory.instance();

        return csFactory.create(c);
    }

    public SimpleFeature createFeature(String[] names, Class[] types, Object[] values) {
        ftBuilder.setName("test");

        for (int i = 0; i < names.length; i++) {
            ftBuilder.add(names[i], values[i].getClass());
        }

        try {
            SimpleFeatureType fType = ftBuilder.buildFeatureType();

            return SimpleFeatureBuilder.build(fType, values, null);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    XSDTypeDefinition findTypeDefinition(XSDSchema schema, QName type) {
        List types = schema.getTypeDefinitions();

        for (Iterator itr = types.iterator(); itr.hasNext();) {
            XSDTypeDefinition typeDef = (XSDTypeDefinition) itr.next();

            if (type.getNamespaceURI().equals(typeDef.getTargetNamespace())
                    && type.getLocalPart().equals(typeDef.getName())) {
                return typeDef;
            }
        }

        return null;
    }
}
TOP

Related Classes of org.geotools.gml2.bindings.AbstractGMLBindingTest

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.