001    // $HeadURL:
002    // /cvsroot/deegree/src/org/deegree/ogcwebservices/getcapabilities/Contents.java,v
003    // 1.1 2004/06/23 11:55:40 mschneider Exp $
004    /*----------------------------------------------------------------------------
005     This file is part of deegree, http://deegree.org/
006     Copyright (C) 2001-2009 by:
007       Department of Geography, University of Bonn
008     and
009       lat/lon GmbH
010    
011     This library is free software; you can redistribute it and/or modify it under
012     the terms of the GNU Lesser General Public License as published by the Free
013     Software Foundation; either version 2.1 of the License, or (at your option)
014     any later version.
015     This library is distributed in the hope that it will be useful, but WITHOUT
016     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
017     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
018     details.
019     You should have received a copy of the GNU Lesser General Public License
020     along with this library; if not, write to the Free Software Foundation, Inc.,
021     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022    
023     Contact information:
024    
025     lat/lon GmbH
026     Aennchenstr. 19, 53177 Bonn
027     Germany
028     http://lat-lon.de/
029    
030     Department of Geography, University of Bonn
031     Prof. Dr. Klaus Greve
032     Postfach 1147, 53001 Bonn
033     Germany
034     http://www.geographie.uni-bonn.de/deegree/
035    
036     e-mail: info@deegree.org
037    ----------------------------------------------------------------------------*/
038    package org.deegree.model.filterencoding.capabilities;
039    
040    import java.util.HashMap;
041    import java.util.Map;
042    
043    /**
044     * ScalarCapabilitiesBean
045     *
046     * @author <a href="mailto:tfr@users.sourceforge.net">Torsten Friebe </a>
047     * @author <a href="mailto:mschneider@lat-lon.de">Markus Schneider </a>
048     * @author last edited by: $Author: mschneider $
049     *
050     * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
051     */
052    public class ScalarCapabilities {
053    
054        private boolean supportsLogicalOperators;
055    
056        /**
057         * keys are Strings (operator names), values are Operator-instances
058         */
059        private Map<String, Operator> comparisonOperators;
060    
061        /**
062         * keys are Strings (operator names), values are Operator-instances
063         */
064        private Map<String, Operator> arithmeticOperators;
065    
066        /**
067         * Creates a new <code>ScalarCapabilities</code> instance.
068         *
069         * @param supportsLogicalOperators
070         * @param comparisonOperators
071         *            may be null
072         * @param arithmeticOperators
073         *            may be null
074         */
075        public ScalarCapabilities( boolean supportsLogicalOperators, Operator[] comparisonOperators,
076                                   Operator[] arithmeticOperators ) {
077            this.supportsLogicalOperators = supportsLogicalOperators;
078            setComparisonOperators( comparisonOperators );
079            setArithmeticOperators( arithmeticOperators );
080        }
081    
082        /**
083         *
084         * @return true, if it supports them
085         */
086        public boolean hasLogicalOperatorsSupport() {
087            return supportsLogicalOperators;
088        }
089    
090        /**
091         *
092         * @param supportsLogicalOperators
093         */
094        public void setLogicalOperatorsSupport( boolean supportsLogicalOperators ) {
095            this.supportsLogicalOperators = supportsLogicalOperators;
096        }
097    
098        /**
099         *
100         * @param comparisonOperators
101         */
102        public void setComparisonOperators( Operator[] comparisonOperators ) {
103            this.comparisonOperators = new HashMap<String, Operator>();
104            if ( comparisonOperators != null ) {
105                for ( int i = 0; i < comparisonOperators.length; i++ ) {
106                    this.comparisonOperators.put( comparisonOperators[i].getName(), comparisonOperators[i] );
107                }
108            }
109        }
110    
111        /**
112         *
113         * @return Comparison Operators
114         */
115        public Operator[] getComparisonOperators() {
116            return comparisonOperators.values().toArray( new Operator[comparisonOperators.values().size()] );
117        }
118    
119        /**
120         *
121         * @param arithmeticOperators
122         *            may be null
123         */
124        public void setArithmeticOperators( Operator[] arithmeticOperators ) {
125            this.arithmeticOperators = new HashMap<String, Operator>();
126            if ( arithmeticOperators != null ) {
127                for ( int i = 0; i < arithmeticOperators.length; i++ ) {
128                    this.arithmeticOperators.put( arithmeticOperators[i].getName(), arithmeticOperators[i] );
129                }
130            }
131        }
132    
133        /**
134         *
135         * @return Arithmetic Operators
136         */
137        public Operator[] getArithmeticOperators() {
138            return arithmeticOperators.values().toArray( new Operator[arithmeticOperators.values().size()] );
139        }
140    
141        /**
142         * Returns if the given operator is supported.
143         *
144         * @param operatorName
145         * @return if the given operator is supported.
146         */
147        public boolean hasComparisonOperator( String operatorName ) {
148    
149            // hack to cope with 1.0.0 simple comparisons (type doesn't map to a unique 1.1.0 operator)
150            if (OperatorFactory100.OPERATOR_SIMPLE_COMPARISONS.equals( operatorName )) {
151                // assume simple comparison operations are supported when equal to is supported
152                operatorName = OperatorFactory110.EQUAL_TO;
153            }
154    
155            return comparisonOperators.get( operatorName ) != null ? true : false;
156        }
157    
158        /**
159         * Returns if the given operator is supported.
160         *
161         * @param operatorName
162         * @return if the given operator is supported.
163         */
164        public boolean hasArithmeticOperator( String operatorName ) {
165            return arithmeticOperators.get( operatorName ) != null ? true : false;
166        }
167    }