1 package prefuse.data.expression; 2 3 import java.util.ArrayList ; 4 import java.util.Iterator ; 5 6 12 public abstract class CompositePredicate extends AbstractPredicate { 13 14 protected ArrayList m_clauses = new ArrayList (2); 15 16 19 public CompositePredicate() { 20 } 21 22 27 public CompositePredicate(Predicate p1, Predicate p2) { 28 m_clauses.add(p1); 29 m_clauses.add(p2); 30 } 31 32 34 38 public void add(Predicate p) { 39 if ( m_clauses.contains(p) ) { 40 throw new IllegalArgumentException ("Duplicate predicate."); 41 } 42 m_clauses.add(p); 43 fireExpressionChange(); 44 } 45 46 51 public boolean remove(Predicate p) { 52 if ( m_clauses.remove(p) ) { 53 fireExpressionChange(); 54 return true; 55 } else { 56 return false; 57 } 58 } 59 60 63 public void clear() { 64 removeChildListeners(); 65 m_clauses.clear(); 66 fireExpressionChange(); 67 } 68 69 73 public int size() { 74 return m_clauses.size(); 75 } 76 77 82 public Predicate get(int idx) { 83 return (Predicate)m_clauses.get(idx); 84 } 85 86 90 public void set(Predicate p) { 91 removeChildListeners(); 92 m_clauses.clear(); 93 m_clauses.add(p); 94 if ( hasListeners() ) addChildListeners(); 95 fireExpressionChange(); 96 } 97 98 102 public void set(Predicate[] p) { 103 removeChildListeners(); 104 m_clauses.clear(); 105 for ( int i=0; i<p.length; ++i ) { 106 if ( !m_clauses.contains(p) ) 107 m_clauses.add(p[i]); 108 } 109 if ( hasListeners() ) addChildListeners(); 110 fireExpressionChange(); 111 } 112 113 119 public Predicate getSubPredicate(Predicate p) { 120 CompositePredicate cp = null; 121 try { 122 cp = (CompositePredicate)this.getClass().newInstance(); 123 } catch (InstantiationException e) { 124 } catch (IllegalAccessException e) { 126 } 128 for ( int i=0; i<m_clauses.size(); ++i ) { 129 Predicate pp = (Predicate)m_clauses.get(i); 130 if ( p != pp ) { 131 cp.add(pp); 132 } 133 } 134 return cp; 135 } 136 137 139 142 public void visit(ExpressionVisitor v) { 143 v.visitExpression(this); 144 Iterator iter = m_clauses.iterator(); 145 while ( iter.hasNext() ) { 146 v.down(); 147 ((Expression)iter.next()).visit(v); 148 v.up(); 149 } 150 } 151 152 154 157 protected void addChildListeners() { 158 Iterator iter = m_clauses.iterator(); 159 while ( iter.hasNext() ) { 160 ((Expression)iter.next()).addExpressionListener(this); 161 } 162 } 163 164 167 protected void removeChildListeners() { 168 Iterator iter = m_clauses.iterator(); 169 while ( iter.hasNext() ) { 170 ((Expression)iter.next()).removeExpressionListener(this); 171 } 172 } 173 174 176 181 protected String toString(String op) { 182 if ( m_clauses.size() == 1 ) { 183 return m_clauses.get(0).toString(); 184 } 185 186 StringBuffer sbuf = new StringBuffer (); 187 sbuf.append('('); 188 189 Iterator iter = m_clauses.iterator(); 190 while ( iter.hasNext() ) { 191 sbuf.append(iter.next().toString()); 192 if ( iter.hasNext() ) { 193 sbuf.append(" "); 194 sbuf.append(op); 195 sbuf.append(" "); 196 } 197 } 198 199 sbuf.append(')'); 200 return sbuf.toString(); 201 } 202 203 } | Popular Tags |