001: /*
002: * Copyright (C) 1999-2004 <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</a>
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018: package org.mandarax.kernel.meta;
019:
020: /**
021: * Clause set containing clauses built from the equals relationship
022: * between objects.
023: * @see org.mandarax.util.AutoFacts
024: * @author <A href="http://www-ist.massey.ac.nz/JBDietrich" target="_top">Jens Dietrich</A>
025: * @version 3.4 <7 March 05>
026: * @since 1.0
027: * @deprecated it is recommended to use the more general class org.mandarax.util.AutoFacts instead
028: */
029: public final class EqualsClauseSet extends JSymmetricClauseSet {
030:
031: private static JPredicate equals = null;
032: private static JPredicate equalsNot = null;
033:
034: /**
035: * Constructor. The set is build from the objects in the collection - each pair
036: * of objects where equals sent to one object with the other object as parameter returns true
037: * defines a fact in the clause set.
038: * @param argumentSet a collection of objects
039: * @throws java.lang.IllegalAccessException
040: * @throws java.lang.IllegalArgumentException
041: */
042: public EqualsClauseSet(java.util.Collection argumentSet)
043: throws IllegalAccessException, IllegalArgumentException {
044: super (getEqualsPredicate(), argumentSet);
045: }
046:
047: /**
048: * Constructor.
049: * @param argumentSet a collection of objects
050: * @param isNegated true if the set should be negated, false otherwise
051: * @throws java.lang.IllegalAccessException
052: * @throws java.lang.IllegalArgumentException
053: */
054: public EqualsClauseSet(java.util.Collection argumentSet,
055: boolean isNegated) throws NullPointerException,
056: IllegalAccessException, IllegalArgumentException {
057: super (isNegated ? getEqualsNotPredicate()
058: : getEqualsPredicate(), argumentSet, isNegated);
059: }
060:
061: /**
062: * Constructor. We use a datasource instead of a collection.
063: * @param argumentSet the data source (kind of dynamic collection)
064: * @throws java.lang.IllegalAccessException
065: * @throws java.lang.IllegalArgumentException
066: */
067: public EqualsClauseSet(org.mandarax.util.DataSource argumentSet)
068: throws NullPointerException, IllegalAccessException,
069: IllegalArgumentException {
070: super (getEqualsPredicate(), argumentSet);
071: }
072:
073: /**
074: * Constructor.
075: * @param argumentSet the data source (kind of dynamic collection)
076: * @param isNegated true if the set should be negated, false otherwise
077: * @throws java.lang.IllegalAccessException
078: * @throws java.lang.IllegalArgumentException
079: */
080: public EqualsClauseSet(org.mandarax.util.DataSource argumentSet,
081: boolean isNegated) throws NullPointerException,
082: IllegalAccessException, IllegalArgumentException {
083: super (isNegated ? getEqualsNotPredicate()
084: : getEqualsPredicate(), argumentSet, isNegated);
085: }
086:
087: /**
088: * Get the negated equals predicate. Use lazy initialization.
089: * @return the respective predicate
090: */
091: private static org.mandarax.kernel.meta.JPredicate getEqualsNotPredicate() {
092: if (equalsNot == null) {
093: try {
094: Class obj = Object.class;
095: Class[] par = new Class[1];
096:
097: par[0] = obj;
098: equalsNot = new JPredicate(obj.getDeclaredMethod(
099: "equals", par), "equalsNot", true);
100: } catch (Exception t) {
101: System.err
102: .println("Problems building the equals method");
103: }
104: }
105:
106: return equalsNot;
107: }
108:
109: /**
110: * Get the equals predicate. Use lazy initialization.
111: * @return the respective predicate
112: */
113: private static org.mandarax.kernel.meta.JPredicate getEqualsPredicate() {
114: if (equals == null) {
115: try {
116: Class obj = Object.class;
117: Class[] par = new Class[1];
118:
119: par[0] = obj;
120: equals = new JPredicate(obj.getDeclaredMethod("equals",
121: par));
122: } catch (Exception t) {
123: System.err
124: .println("Problems building the equals method");
125: }
126: }
127:
128: return equals;
129: }
130: }
|