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 }