if (!condArray[0].isSatisfied(condArray, context)) return false;
if (cc.CondClassSet == null) cc.CondClassSet = new ArrayList(2); if (cc.CondClassSet.contains(condArray[0].getClass())) return false; cc.CondClassSet.add(condArray[0].getClass()); try { if (!condArray[0].isSatisfied(condArray, context)) return false; } finally { cc.CondClassSet.remove(condArray[0].getClass()); }
	private boolean recursiveCheck(Vector remainingSets, Condition[] conditions, Hashtable condDict, Hashtable condContextDict) {		for (int i = 0; i < conditions.length; i++) {			if (conditions[i] == null)				continue;			Vector condList = (Vector) condDict.get(conditions[i].getClass());			if (condList == null) {				condList = new Vector();				condDict.put(conditions[i].getClass(), condList);			}			condList.add(conditions[i]);		}		if (remainingSets.size() > 0) {			boolean passed = false;			Condition conds[][] = (Condition[][]) remainingSets.get(0);			Vector newSets = (Vector) remainingSets.clone();			newSets.remove(0);			for (int i = 0; i < conds.length; i++) {				passed = recursiveCheck(newSets, conds[i], (Hashtable) condDict.clone(), condContextDict);				if (passed)					return true;			}			return false;		}		Enumeration keys = condDict.keys();		while (keys.hasMoreElements()) {			Class key = (Class) keys.nextElement();			Vector conds = (Vector) condDict.get(key);			if (conds.size() == 0)				continue; // This should never happen since we only add to the condDict if there is a condition			Condition condArray[] = (Condition[]) conds.toArray(new Condition[0]);			Dictionary context = (Dictionary) condContextDict.get(key);			if (context == null) {				context = new Hashtable(2);				condContextDict.put(key, context);			}			if (!condArray[0].isSatisfied(condArray, context))				return false;		}		return true;	}