1 package prefuse.data.expression; 2 3 import prefuse.data.Schema; 4 import prefuse.data.Tuple; 5 import prefuse.util.TypeLib; 6 7 13 public class IfExpression extends AbstractExpression { 14 15 private Predicate m_test; 16 private Expression m_then; 17 private Expression m_else; 18 19 27 public IfExpression(Predicate test, 28 Expression thenExpr, Expression elseExpr) 29 { 30 m_test = test; 31 m_then = thenExpr; 32 m_else = elseExpr; 33 } 34 35 37 41 public Predicate getTestPredicate() { 42 return m_test; 43 } 44 45 49 public Expression getThenExpression() { 50 return m_then; 51 } 52 53 57 public Expression getElseExpression() { 58 return m_else; 59 } 60 61 65 public void setTestPredicate(Predicate p) { 66 m_test.removeExpressionListener(this); 67 m_test = p; 68 if ( hasListeners() ) p.addExpressionListener(this); 69 fireExpressionChange(); 70 } 71 72 76 public void setThenExpression(Expression e) { 77 m_then.removeExpressionListener(this); 78 m_then = e; 79 if ( hasListeners() ) e.addExpressionListener(this); 80 fireExpressionChange(); 81 } 82 83 87 public void setElseExpression(Expression e) { 88 m_else.removeExpressionListener(this); 89 m_else = e; 90 if ( hasListeners() ) e.addExpressionListener(this); 91 fireExpressionChange(); 92 } 93 94 96 99 public Class getType(Schema s) { 100 Class type1 = m_then.getType(s); 101 Class type2 = m_else.getType(s); 102 return TypeLib.getSharedType(type1, type2); 103 } 104 105 108 public Object get(Tuple t) { 109 return (m_test.getBoolean(t) ? m_then : m_else).get(t); 110 } 111 112 115 public boolean getBoolean(Tuple t) { 116 return (m_test.getBoolean(t) ? m_then : m_else).getBoolean(t); 117 } 118 119 122 public double getDouble(Tuple t) { 123 return (m_test.getBoolean(t) ? m_then : m_else).getDouble(t); 124 } 125 126 129 public float getFloat(Tuple t) { 130 return (m_test.getBoolean(t) ? m_then : m_else).getFloat(t); 131 } 132 133 136 public int getInt(Tuple t) { 137 return (m_test.getBoolean(t) ? m_then : m_else).getInt(t); 138 } 139 140 143 public long getLong(Tuple t) { 144 return (m_test.getBoolean(t) ? m_then : m_else).getLong(t); 145 } 146 147 149 152 public void visit(ExpressionVisitor v) { 153 v.visitExpression(this); 154 v.down(); m_test.visit(v); v.up(); 155 v.down(); m_then.visit(v); v.up(); 156 v.down(); m_else.visit(v); v.up(); 157 } 158 159 162 protected void addChildListeners() { 163 m_test.addExpressionListener(this); 164 m_then.addExpressionListener(this); 165 m_else.addExpressionListener(this); 166 } 167 168 171 protected void removeChildListeners() { 172 m_test.removeExpressionListener(this); 173 m_then.removeExpressionListener(this); 174 m_else.removeExpressionListener(this); 175 } 176 177 180 public String toString() { 181 return "IF " + m_test.toString() 182 + " THEN " + m_then.toString() 183 + " ELSE " + m_else.toString(); 184 } 185 186 } | Popular Tags |