diff options
| author | Benjamin Culkin <scorpress@gmail.com> | 2024-05-19 17:56:33 -0400 |
|---|---|---|
| committer | Benjamin Culkin <scorpress@gmail.com> | 2024-05-19 17:56:33 -0400 |
| commit | aedc34d55462a75e329bbf342251ff6504cd117e (patch) | |
| tree | bcc8f1f2352582717b484df302aeea6696b8f000 /projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOAndQualifier.java | |
Initial import from SVN
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOAndQualifier.java')
| -rw-r--r-- | projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOAndQualifier.java | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOAndQualifier.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOAndQualifier.java new file mode 100644 index 0000000..049eb33 --- /dev/null +++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOAndQualifier.java @@ -0,0 +1,167 @@ +/* +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; + +/** +* EOAndQualifier contains other EOQualifiers, +* evaluating as true only if all of the contained +* qualifiers evaluate as true. +* +* @author michael@mpowers.net +* @author yjcheung@intersectsoft.com +* @author $Author: cgruber $ +* @version $Revision: 894 $ +*/ +public class EOAndQualifier extends EOQualifier + implements EOKeyValueArchiving, EOQualifierEvaluation +{ + private List qualifiers; + + public EOAndQualifier( + 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 the lazy "and" implementation. Ex. + * Qal1 and Qal2. If the Qal1 is evaluated to be false, then it returns + * false without evaluating Qa12. + */ + public boolean evaluateWithObject( Object anObject ) + { + boolean retVal = true; + Iterator it = qualifiers.iterator(); + while (it.hasNext() && retVal) + { + retVal = ((EOQualifier) it.next()).evaluateWithObject(anObject); + } + return retVal; + } + + /** + * 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(" and "); + } + String myStr = myBuf.toString(); + myStr = myStr.substring(0, myStr.lastIndexOf(" and")).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("EOAndQualifier", "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. + * + * + */ + + |
