Package org.geotools.xml.impl

Source Code of org.geotools.xml.impl.TypeWalker$Visitor

/*
*    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.xml.impl;

import org.eclipse.xsd.XSDTypeDefinition;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


/**
*
*
* @source $URL$
*/
public class TypeWalker {
    /**
     * Cached type hieracty
     */
    HashMap /*<XSDTypeDefinition,List>*/ cache = new HashMap();

    /**
     * Walks from the bottom of the type hierachy to the top.
     */
    public void walk(XSDTypeDefinition base, Visitor visitor) {
        List types = types(base);

        for (int i = 0; i < types.size(); i++) {
            XSDTypeDefinition type = (XSDTypeDefinition) types.get(i);

            //do the visit, if visitor returns false, break out
            if (!visitor.visit(type)) {
                break;
            }
        }
    }

    /**
     * Walks from the top of the type hierachy to the bottom.
     *
     */
    public void rwalk(XSDTypeDefinition base, Visitor visitor) {
        List types = types(base);

        for (int i = types.size() - 1; i > -1; i--) {
            XSDTypeDefinition type = (XSDTypeDefinition) types.get(i);

            //do the visit, if visitor returns false, break out
            if (!visitor.visit(type)) {
                break;
            }
        }
    }

    private List types(XSDTypeDefinition base) {
        List types = (List) cache.get(base);

        if (types == null) {
            types = new ArrayList();

            XSDTypeDefinition type = base;

            while (type != null) {
                types.add(type);

                //get the next type
                if (type.equals(type.getBaseType())) {
                    break;
                }

                type = type.getBaseType();
            }

            cache.put(base, types);
        }

        return types;
    }

    public static interface Visitor {
        /**
         * Supplies the current type to the visitor.
         *
         * @param type The current type.
         *
         * @return True to signal that the walk should continue, false to
         * signal the walk should stop.
         */
        boolean visit(XSDTypeDefinition type);
    }
}
TOP

Related Classes of org.geotools.xml.impl.TypeWalker$Visitor

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.