001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/model/filterencoding/OperationDefines.java $
002    /*----------------------------------------------------------------------------
003     This file is part of deegree, http://deegree.org/
004     Copyright (C) 2001-2009 by:
005       Department of Geography, University of Bonn
006     and
007       lat/lon GmbH
008    
009     This library is free software; you can redistribute it and/or modify it under
010     the terms of the GNU Lesser General Public License as published by the Free
011     Software Foundation; either version 2.1 of the License, or (at your option)
012     any later version.
013     This library is distributed in the hope that it will be useful, but WITHOUT
014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016     details.
017     You should have received a copy of the GNU Lesser General Public License
018     along with this library; if not, write to the Free Software Foundation, Inc.,
019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020    
021     Contact information:
022    
023     lat/lon GmbH
024     Aennchenstr. 19, 53177 Bonn
025     Germany
026     http://lat-lon.de/
027    
028     Department of Geography, University of Bonn
029     Prof. Dr. Klaus Greve
030     Postfach 1147, 53001 Bonn
031     Germany
032     http://www.geographie.uni-bonn.de/deegree/
033    
034     e-mail: info@deegree.org
035    ----------------------------------------------------------------------------*/
036    package org.deegree.model.filterencoding;
037    
038    import java.util.HashMap;
039    import java.util.Map;
040    
041    /**
042     * Defines codes and constants for easy coping with the different kinds of OperationsMetadata (both XML-Entities &
043     * JavaObjects).
044     *
045     * @author Markus Schneider
046     * @version 06.08.2002
047     */
048    public class OperationDefines {
049    
050        // used to associate names with the OperationInfos
051        private static Map<String, OperationInfo> names = null;
052    
053        // used to associate ids (Integers) with the OperationInfos
054        private static Map<Integer, OperationInfo> ids = null;
055    
056        // different types of operations
057        /**
058         *
059         */
060        public static final int TYPE_SPATIAL = 0;
061    
062        /**
063         *
064         */
065        public static final int TYPE_COMPARISON = 1;
066    
067        /**
068         *
069         */
070        public static final int TYPE_LOGICAL = 2;
071    
072        /**
073         *
074         */
075        public static final int TYPE_UNKNOWN = -1;
076    
077        // spatial operations
078        /**
079         *
080         */
081        public static final int EQUALS = 0;
082    
083        /**
084         *
085         */
086        public static final int DISJOINT = 1;
087    
088        /**
089         *
090         */
091        public static final int INTERSECTS = 2;
092    
093        /**
094         *
095         */
096        public static final int TOUCHES = 3;
097    
098        /**
099         *
100         */
101        public static final int CROSSES = 4;
102    
103        /**
104         *
105         */
106        public static final int WITHIN = 5;
107    
108        /**
109         *
110         */
111        public static final int CONTAINS = 6;
112    
113        /**
114         *
115         */
116        public static final int OVERLAPS = 7;
117    
118        /**
119         *
120         */
121        public static final int BEYOND = 8;
122    
123        /**
124         *
125         */
126        public static final int BBOX = 9;
127    
128        // calvin added on 10/21/2003
129        /**
130         *
131         */
132        public static final int DWITHIN = 10;
133    
134        // comparison operations
135        /**
136         *
137         */
138        public static final int PROPERTYISEQUALTO = 100;
139    
140        /**
141         *
142         */
143        public static final int PROPERTYISNOTEQUALTO = 108;
144    
145        /**
146         *
147         */
148        public static final int PROPERTYISLESSTHAN = 101;
149    
150        /**
151         *
152         */
153        public static final int PROPERTYISGREATERTHAN = 102;
154    
155        /**
156         *
157         */
158        public static final int PROPERTYISLESSTHANOREQUALTO = 103;
159    
160        /**
161         *
162         */
163        public static final int PROPERTYISGREATERTHANOREQUALTO = 104;
164    
165        /**
166         *
167         */
168        public static final int PROPERTYISLIKE = 105;
169    
170        /**
171         *
172         */
173        public static final int PROPERTYISNULL = 106;
174    
175        /**
176         *
177         */
178        public static final int PROPERTYISBETWEEN = 107;
179    
180        /**
181         *
182         */
183        public static final int PROPERTYISINSTANCEOF = 150;
184    
185        // logical operations
186        /**
187         *
188         */
189        public static final int AND = 200;
190    
191        /**
192         *
193         */
194        public static final int OR = 201;
195    
196        /**
197         *
198         */
199        public static final int NOT = 202;
200    
201        /**
202         *
203         */
204        public static final int UNKNOWN = -1;
205    
206        static {
207            if ( names == null )
208                buildHashMaps();
209        }
210    
211        /**
212         * Returns the type of an operation for a given name.
213         *
214         * @param name
215         *
216         * @return TYPE_SPATIAL / TYPE_COMPARISON / TYPE_LOGICAL / TYPE_UNKNOWN
217         */
218        public static int getTypeByName( String name ) {
219            OperationInfo operationInfo = names.get( name );
220            if ( operationInfo == null )
221                return TYPE_UNKNOWN;
222            return operationInfo.type;
223        }
224    
225        /**
226         * Returns the id of an operation for a given name.
227         *
228         * @param name
229         *
230         * @return BBOX / PROPERTYISEQUAL / AND / ...
231         */
232        public static int getIdByName( String name ) {
233            OperationInfo operationInfo = names.get( name.toLowerCase() );
234            if ( operationInfo == null )
235                return UNKNOWN;
236            return operationInfo.id;
237        }
238    
239        /**
240         * Returns the type of an operation for a given id.
241         *
242         * @param id
243         *
244         * @return TYPE_SPATIAL / TYPE_COMPARISON / TYPE_LOGICAL / TYPE_UNKNOWN
245         */
246        public static int getTypeById( int id ) {
247            OperationInfo operationInfo = ids.get( new Integer( id ) );
248            if ( operationInfo == null )
249                return TYPE_UNKNOWN;
250            return operationInfo.type;
251        }
252    
253        /**
254         * Returns the name of an operation for a given id.
255         *
256         * @param id
257         *
258         * @return null / Name of operation
259         */
260        public static String getNameById( int id ) {
261    
262            OperationInfo operationInfo = ids.get( new Integer( id ) );
263            if ( operationInfo == null )
264                return null;
265            return operationInfo.name;
266        }
267    
268        private static void addOperationInfo( int id, String name, int type ) {
269            OperationInfo operationInfo = new OperationInfo( id, type, name );
270            names.put( name, operationInfo );
271            names.put( name.toLowerCase(), operationInfo );
272            names.put( name.toUpperCase(), operationInfo );
273            ids.put( new Integer( id ), operationInfo );
274        }
275    
276        private static void buildHashMaps() {
277            names = new HashMap<String, OperationInfo>( 25 );
278            ids = new HashMap<Integer, OperationInfo>( 25 );
279    
280            addOperationInfo( BBOX, "BBOX", TYPE_SPATIAL );
281            addOperationInfo( EQUALS, "Equals", TYPE_SPATIAL );
282            addOperationInfo( DISJOINT, "Disjoint", TYPE_SPATIAL );
283            addOperationInfo( INTERSECTS, "Intersects", TYPE_SPATIAL );
284            addOperationInfo( TOUCHES, "Touches", TYPE_SPATIAL );
285            addOperationInfo( CROSSES, "Crosses", TYPE_SPATIAL );
286            addOperationInfo( WITHIN, "Within", TYPE_SPATIAL );
287            addOperationInfo( CONTAINS, "Contains", TYPE_SPATIAL );
288            addOperationInfo( OVERLAPS, "Overlaps", TYPE_SPATIAL );
289            addOperationInfo( BEYOND, "Beyond", TYPE_SPATIAL );
290            addOperationInfo( DWITHIN, "DWithin", TYPE_SPATIAL );
291    
292            addOperationInfo( PROPERTYISEQUALTO, "PropertyIsEqualTo", TYPE_COMPARISON );
293            addOperationInfo( PROPERTYISNOTEQUALTO, "PropertyIsNotEqualTo", TYPE_COMPARISON );
294            addOperationInfo( PROPERTYISLESSTHAN, "PropertyIsLessThan", TYPE_COMPARISON );
295            addOperationInfo( PROPERTYISGREATERTHAN, "PropertyIsGreaterThan", TYPE_COMPARISON );
296            addOperationInfo( PROPERTYISLESSTHANOREQUALTO, "PropertyIsLessThanOrEqualTo", TYPE_COMPARISON );
297            addOperationInfo( PROPERTYISGREATERTHANOREQUALTO, "PropertyIsGreaterThanOrEqualTo", TYPE_COMPARISON );
298            addOperationInfo( PROPERTYISLIKE, "PropertyIsLike", TYPE_COMPARISON );
299            addOperationInfo( PROPERTYISNULL, "PropertyIsNull", TYPE_COMPARISON );
300            addOperationInfo( PROPERTYISBETWEEN, "PropertyIsBetween", TYPE_COMPARISON );
301            addOperationInfo( PROPERTYISINSTANCEOF, "PropertyIsInstanceOf", TYPE_COMPARISON );
302    
303            addOperationInfo( AND, "And", TYPE_LOGICAL );
304            addOperationInfo( OR, "Or", TYPE_LOGICAL );
305            addOperationInfo( NOT, "Not", TYPE_LOGICAL );
306        }
307    }
308    
309    class OperationInfo {
310        int id;
311    
312        int type;
313    
314        String name;
315    
316        OperationInfo( int id, int type, String name ) {
317            this.id = id;
318            this.type = type;
319            this.name = name;
320        }
321    }