diff options
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOOrQualifier.java')
| -rw-r--r-- | projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOOrQualifier.java | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOOrQualifier.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOOrQualifier.java new file mode 100644 index 0000000..7f4b1c6 --- /dev/null +++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOOrQualifier.java @@ -0,0 +1,169 @@ +/* +Wotonomy: OpenStep design patterns for pure Java applications. +Copyright (C) 2001 Intersect Software Corporation + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, see http://www.gnu.org +*/ + +package net.wotonomy.control; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import net.wotonomy.foundation.NSArray; +import net.wotonomy.foundation.NSDictionary; +import net.wotonomy.foundation.NSMutableArray; +import net.wotonomy.foundation.internal.WotonomyException; + +/** +* EOOrQualifier contains other EOQualifiers, +* evaluating as true if any of the contained +* qualifiers evaluate as true. +* +* @author michael@mpowers.net +* @author yjcheung@intersectsoft.com +* @author $Author: cgruber $ +* @version $Revision: 894 $ +*/ +public class EOOrQualifier extends EOQualifier + implements EOKeyValueArchiving, EOQualifierEvaluation +{ + private List qualifiers; + + public EOOrQualifier( + List aQualifierList ) + { + qualifiers = new LinkedList( aQualifierList ); + } + + /** + * Returns a List of qualifiers contained by this qualifier. + */ + public NSArray qualifiers() + { + return new NSArray( qualifiers ); + } + + /** + * Add a new qualifier to the list. + */ + public void addQualifier(EOQualifier qualifier) + { + qualifiers.add(qualifier); + } + + /** + * Evaluates this qualifier for the specified object, + * and returns whether the object is qualified. + * selector() is invoked on the value for key() on the + * specified object, with value() as the parameter. + * + * Note: this has a lazy "or" implementation. Ex. Qal1 or Qal2. + * If Qal1 is evaluated to be true, then it returns true without + * further evaluate Qal2. + */ + public boolean evaluateWithObject( Object anObject ) + { + Iterator it = qualifiers.iterator(); + while( it.hasNext() ) + { + if ( ((EOQualifier) it.next()).evaluateWithObject(anObject) ) + { + return true; + } + } + return false; + } + + /** + * Returns a string representation of this qualifier. + */ + public String toString() + { + StringBuffer myBuf = new StringBuffer("("); + Iterator it = qualifiers.iterator(); + while (it.hasNext()) + { + myBuf = myBuf.append(((EOQualifier) it.next()).toString()).append(" or "); + } + String myStr = myBuf.toString(); + myStr = myStr.substring(0, myStr.lastIndexOf(" or ")).concat(")"); + return myStr; + } + + public static Object decodeWithKeyValueUnarchiver(EOKeyValueUnarchiver arch) { + NSArray a = (NSArray)arch.decodeObjectForKey("qualifiers"); + if (a == null) + return null; + NSMutableArray l = new NSMutableArray(); + for (int i = 0; i < a.count(); i++) { + NSDictionary d = (NSDictionary)a.objectAtIndex(i); + EOKeyValueUnarchiver ua = new EOKeyValueUnarchiver(d); + EOQualifier q = (EOQualifier)EOQualifier.decodeWithKeyValueUnarchiver(ua); + if (q != null) + l.addObject(q); + } + return new EOAndQualifier(l); + } + + public void encodeWithKeyValueArchiver(EOKeyValueArchiver arch) { + arch.encodeObject("EOOrQualifier", "class"); + NSMutableArray arr = new NSMutableArray(qualifiers.size()); + for (int i = 0; i < qualifiers.size(); i++) { + EOQualifier q = (EOQualifier)qualifiers.get(i); + if (q instanceof EOKeyValueArchiving) { + EOKeyValueArchiver ar2 = new EOKeyValueArchiver(); + ((EOKeyValueArchiving)q).encodeWithKeyValueArchiver(ar2); + arr.addObject(ar2.dictionary()); + } else + throw new WotonomyException("Cannot archive instance of " + q.getClass().getName()); + } + arch.encodeObject(arr, "qualifiers"); + } + +} + +/* + * $Log$ + * Revision 1.2 2006/02/16 16:47:14 cgruber + * Move some classes in to "internal" packages and re-work imports, etc. + * + * Also use UnsupportedOperationExceptions where appropriate, instead of WotonomyExceptions. + * + * Revision 1.1 2006/02/16 13:19:57 cgruber + * Check in all sources in eclipse-friendly maven-enabled packages. + * + * Revision 1.6 2003/08/12 01:43:04 chochos + * formally implement EOQualifierEvaluation + * + * Revision 1.5 2003/08/09 01:22:51 chochos + * qualifiers implement EOKeyValueArchiving + * + * Revision 1.4 2003/08/06 23:07:52 chochos + * general code cleanup (mostly, removing unused imports) + * + * Revision 1.3 2001/10/31 15:25:14 mpowers + * Cleanup of qualifiers. + * + * Revision 1.2 2001/10/30 22:57:28 mpowers + * EOQualifier framework is now working. + * + * Revision 1.1 2001/09/13 15:25:56 mpowers + * Started implementation of the EOQualifier framework. + * + * + */ + + |
