Package org.geotools.filter.text.commons

Source Code of org.geotools.filter.text.commons.BuildResultStack

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2006-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.filter.text.commons;

import java.util.Date;
import java.util.EmptyStackException;
import java.util.Stack;

import org.geotools.filter.text.cql2.CQLException;
import org.geotools.temporal.object.DefaultInstant;
import org.geotools.temporal.object.DefaultPeriod;
import org.geotools.temporal.object.DefaultPosition;
import org.opengis.filter.Filter;
import org.opengis.filter.expression.Literal;
import org.opengis.filter.expression.PropertyName;
import org.opengis.temporal.Period;
import org.opengis.temporal.Position;

import com.vividsolutions.jts.geom.Geometry;


/**
* Holds the results of the building process in a stack
* <p>
* Warning: This component is not published. It is part of module implementation.
* Client module should not use this feature.
* </p>
* @author Mauricio Pazos - Axios Engineering
* @author Gabriel Roldan - Axios Engineering
*
*
*
* @source $URL$
* @version $Id$
* @since 2.4
*/
public final class BuildResultStack {

    private final Stack<Result> stack = new Stack<Result>();

    private final String cqlSource;

    public BuildResultStack(final String cqlSource) {
        assert cqlSource != null;
       
        this.cqlSource  = cqlSource;
    }


    public Result peek() {
        return stack.peek();
    }

    public boolean empty() {
        return stack.empty();
    }

    public Result popResult() throws CQLException {
        return stack.pop();
    }

    public org.opengis.filter.expression.Expression popExpression()
        throws CQLException {
        Result item = null;

        try {
            item = stack.pop();

            return (org.opengis.filter.expression.Expression) item.getBuilt();
        } catch (ClassCastException cce) {
            throw new CQLException("Expecting Expression",
                item.getToken(), cce, this.cqlSource);
        } catch (EmptyStackException ese) {
            throw new CQLException("No items on stack");
        }
    }
    public Literal popLiteral() throws CQLException {
        Result item = null;

        try {
            item =  stack.pop();

            return (Literal) item.getBuilt();
        } catch (ClassCastException cce) {
            throw new CQLException("Expecting Literal",
                item.getToken(), cce, this.cqlSource);
        } catch (EmptyStackException ese) {
            throw new CQLException("No items on stack");
        }
    }

    public PropertyName popPropertyName() throws CQLException {
        Result item = null;

        try {
            item = stack.pop();

            return (PropertyName) item.getBuilt();
        } catch (ClassCastException cce) {
            throw new CQLException("Expecting Property",
                item.getToken(), cce, this.cqlSource);
        } catch (EmptyStackException ese) {
            throw new CQLException("No items on stack");
        }
    }

    public Filter popFilter() throws CQLException {
        Result item = null;

        try {
            item = stack.pop();

            return (Filter) item.getBuilt();
        } catch (ClassCastException cce) {
            throw new CQLException("Expecting Filter",
                item.getToken(), cce, this.cqlSource);
        } catch (EmptyStackException ese) {
            throw new CQLException("No items on stack");
        }
    }

    public PeriodNode popPeriodNode() throws CQLException {
        Result item = null;

        try {
            item = stack.pop();

            return (PeriodNode) item.getBuilt();
        } catch (ClassCastException cce) {
            throw new CQLException("Expecting Period",
                item.getToken(), cce, this.cqlSource);
        } catch (EmptyStackException ese) {
            throw new CQLException("No items on stack");
        }
    }
    public Period popPeriod() throws CQLException {
        Result item = null;

        try {
            item = stack.pop();

            PeriodNode periodNode = (PeriodNode) item.getBuilt();
            Literal begin = periodNode.getBeginning();
            Literal end = periodNode.getEnding();
           
        Position ip1 = new DefaultPosition((Date) begin.getValue());
        Position ip2 = new DefaultPosition((Date) end.getValue());
        Period period = new DefaultPeriod(new DefaultInstant(ip1),new DefaultInstant(ip2 ));
           
            return period;
           
        } catch (ClassCastException cce) {
            throw new CQLException("Expecting Period",
                item.getToken(), cce, this.cqlSource);
        } catch (EmptyStackException ese) {
            throw new CQLException("No items on stack");
        }
    }

    public double popDoubleValue() throws CQLException {
        try {
            Literal expr = this.popLiteral();
            Double number = new Double(expr.getValue().toString());

            return number.doubleValue();
        } catch (ClassCastException cce) {
            throw new CQLException("Expected double");
        }
    }

    public int popIntegerValue() throws CQLException {
        try {
            Literal expr = this.popLiteral();
            Integer number = (Integer) expr.getValue();

            return number.intValue();
        } catch (ClassCastException cce) {
            throw new CQLException("Expected double");
        }
    }

    public String popStringValue() throws CQLException {
        Literal literal = this.popLiteral();

        return literal.toString();
    }

    public String popIdentifierPart() throws CQLException {
        try {
            Result resultPart = stack.pop();
            IToken token = resultPart.getToken();

            return token.toString();
        } catch (ClassCastException e) {
            throw new CQLException("identifier part is expected");
        }
    }

    public String popIdentifier() throws CQLException {
        try {
            Result result = (Result) stack.pop();
            String identifier = (String) result.getBuilt();

            return identifier;
        } catch (ClassCastException e) {
            throw new CQLException("fail in identifier parsing");
        }
    }

    public Geometry popGeometry() throws CQLException {
        try {
            Result result = (Result) stack.pop();
            Geometry g = (Geometry) result.getBuilt();

            return g;
           
        } catch (ClassCastException e) {
            throw new CQLException("fail in geometry parsing");
        }
    }
   
    public void push(Result item) {
        stack.push(item);
    }

    public int size() {
        return stack.size();
    }


}
TOP

Related Classes of org.geotools.filter.text.commons.BuildResultStack

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.