001    /**
002     * Copyright 2010 The Kuali Foundation Licensed under the
003     * Educational Community License, Version 2.0 (the "License"); you may
004     * not use this file except in compliance with the License. You may
005     * obtain a copy of the License at
006     *
007     * http://www.osedu.org/licenses/ECL-2.0
008     *
009     * Unless required by applicable law or agreed to in writing,
010     * software distributed under the License is distributed on an "AS IS"
011     * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012     * or implied. See the License for the specific language governing
013     * permissions and limitations under the License.
014     */
015    
016    package org.kuali.rice.krms.util;
017    
018    public class ExpressionToken implements Cloneable {
019    
020        public static int And = 1;        //TODO use AndOrButton class int instead?
021        public static int Or = 2;
022        public static int StartParenthesis = 3;
023        public static int EndParenthesis = 4;
024        public static int Condition = 5;
025        public String value;
026        public int type;
027        private String tokenID = "";
028    
029        public String getTokenID() {
030            return tokenID;
031        }
032    
033        public void setTokenID(String tokenID) {
034            this.tokenID = tokenID;
035        }
036    
037        public int getType() {
038            return type;
039        }
040    
041        public void setType(int type) {
042            this.type = type;
043        }
044    
045        public static ExpressionToken createAndToken(){
046            ExpressionToken t = new ExpressionToken();
047            t.type = And;
048            t.value = "and";
049            return t;
050        }
051    
052        public static ExpressionToken createOrToken(){
053            ExpressionToken t = new ExpressionToken();
054            t.type = Or;
055            t.value = "or";
056            return t;
057        }
058    
059        public ExpressionToken toggleAndOr(){
060            ExpressionToken t = new ExpressionToken ();
061            if(type == And){
062                t.type = Or;
063                t.value = "Or";
064    
065            }else if(type == Or){
066                t.type = And;
067                t.value = "And";
068            }
069            return t;
070        }
071        
072        public boolean equals(Object obj){
073            if(obj instanceof ExpressionToken == false){
074                return false;
075            }
076            ExpressionToken t = (ExpressionToken)obj;
077            if(t.value == null){
078                return false;
079            }
080            if(t.value.equals(value) && t.type == type){
081                return true;
082            }
083            return false;
084        }
085        
086        public int hashCode(){
087            int hash =1;
088            hash = hash * 31 + new Integer(type).hashCode();
089            hash = hash * 31 + (value == null ? 0 : value.hashCode());
090            return hash;
091        }
092        
093        public ExpressionToken clone(){
094            ExpressionToken t = new ExpressionToken();
095            t.type = type;
096            t.value = value;
097            return t;
098        }
099    
100        public String toString() {
101            if (type == And) {
102                return "and";
103            } else if (type == Or) {
104                return "or";
105            } else if (type == StartParenthesis) {
106                return "(";
107            } else if (type == EndParenthesis) {
108                return ")";
109            } else if (type == Condition) {
110                return value;
111            }
112            return "";
113        }
114    }