/* This file is part of the db4o object database http://www.db4o.com Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com db4o is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation. db4o 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ package com.db4o.internal.cluster; import com.db4o.cluster.*; import com.db4o.foundation.*; import com.db4o.query.*; /** * @exclude */ public class ClusterConstraint implements Constraint{ final Cluster _cluster; final Constraint[] _constraints; public ClusterConstraint(Cluster cluster, Constraint[] constraints){ _cluster = cluster; _constraints = constraints; } private ClusterConstraint compatible (Constraint with){ if(! (with instanceof ClusterConstraint)){ throw new IllegalArgumentException(); } ClusterConstraint other = (ClusterConstraint)with; if(other._constraints.length != _constraints.length){ throw new IllegalArgumentException(); } return other; } public Constraint and(Constraint with) { return join(with, true); } public Constraint or(Constraint with) { return join(with, false); } private Constraint join(Constraint with, boolean isAnd){ synchronized(_cluster){ ClusterConstraint other = compatible(with); Constraint[] newConstraints = new Constraint[_constraints.length]; for (int i = 0; i < _constraints.length; i++) { newConstraints[i] = isAnd ? _constraints[i].and(other._constraints[i]) : _constraints[i].or(other._constraints[i]); } return new ClusterConstraint(_cluster, newConstraints); } } public Constraint equal() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].equal(); } return this; } } public Constraint greater() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].greater(); } return this; } } public Constraint smaller() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].smaller(); } return this; } } public Constraint identity() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].identity(); } return this; } } public Constraint byExample() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].byExample(); } return this; } } public Constraint like() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].like(); } return this; } } public Constraint startsWith(boolean caseSensitive) { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].startsWith(caseSensitive); } return this; } } public Constraint endsWith(boolean caseSensitive) { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].endsWith(caseSensitive); } return this; } } public Constraint contains() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].contains(); } return this; } } public Constraint not() { synchronized(_cluster){ for (int i = 0; i < _constraints.length; i++) { _constraints[i].not(); } return this; } } public Object getObject() { throw new NotSupportedException(); } }