/* * This file is part of the HyperGraphDB source distribution. This is copyrighted * software. For permitted uses, licensing options and redistribution, please see * the LicensingInformation file at the root level of the distribution. * * Copyright (c) 2005-2010 Kobrix Software, Inc. All rights reserved. */ package org.hypergraphdb.query; import java.util.ArrayList; import java.util.Iterator; import org.hypergraphdb.HGHandle; import org.hypergraphdb.HyperGraph; /** * <p> * Represents the disjunction operator of a query condition. Several sub-clauses * can be combined with an <code>or</code> operator using this class. * </p> * * @author Borislav Iordanov */ public class Or extends ArrayList<HGQueryCondition> implements HGQueryCondition, HGAtomPredicate { private static final long serialVersionUID = -1; public Or() { } public Or(HGQueryCondition clause) { add(clause); } public Or(HGQueryCondition clause1, HGQueryCondition clause2) { add(clause1); add(clause2); } public Or(HGQueryCondition clause1, HGQueryCondition clause2, HGQueryCondition clause3) { add(clause1); add(clause2); add(clause3); } public Or(HGQueryCondition clause1, HGQueryCondition clause2, HGQueryCondition clause3, HGQueryCondition clause4) { add(clause1); add(clause2); add(clause3); add(clause4); } public Or(HGQueryCondition clause1, HGQueryCondition clause2, HGQueryCondition clause3, HGQueryCondition clause4, HGQueryCondition clause5) { add(clause1); add(clause2); add(clause3); add(clause4); add(clause5); } public boolean satisfies(HyperGraph hg, HGHandle value) { for (int i = 0; i < size(); i++) { HGQueryCondition c = get(i); if (! (c instanceof HGAtomPredicate)) throw new Error("Attempt to use Or as a predicate where the sub-condition " + c + " is not a predicate."); if (((HGAtomPredicate)c).satisfies(hg, value)) return true; } return false; } public Object clone() { Or result = new Or(); result.addAll(this); return result; } public String toString() { StringBuffer result = new StringBuffer("Or("); for (Iterator<HGQueryCondition> i = iterator(); i.hasNext(); ) { result.append(i.next().toString()); if (i.hasNext()) result.append(", "); } result.append(")"); return result.toString(); } public boolean equals(Object x) { if ( ! (x instanceof Or)) return false; else return super.equals((Or)x); } }