Source code: com/virtuosotechnologies/asaph/model/opsemantics/NotPredicateSemantics.java
1 /*
2 ================================================================================
3
4 FILE: NotPredicateSemantics.java
5
6 PROJECT:
7
8 Asaph
9
10 CONTENTS:
11
12 A PredicateSemantics that sets every value to its boolean opposite
13
14 PROGRAMMERS:
15
16 Daniel Azuma (DA) <dazuma@kagi.com>
17
18 COPYRIGHT:
19
20 Copyright (C) 2003 Daniel Azuma (dazuma@kagi.com)
21
22 This program is free software; you can redistribute it and/or
23 modify it under the terms of the GNU General Public License as
24 published by the Free Software Foundation; either version 2
25 of the License, or (at your option) any later version.
26
27 This program is distributed in the hope that it will be useful,
28 but WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 GNU General Public License for more details.
31
32 You should have received a copy of the GNU General Public
33 License along with this program; if not, write to
34 Free Software Foundation, Inc.
35 59 Temple Place, Suite 330
36 Boston, MA 02111-1307 USA
37
38 ================================================================================
39 */
40
41
42 package com.virtuosotechnologies.asaph.model.opsemantics;
43
44
45 import java.util.Iterator;
46
47 import com.virtuosotechnologies.asaph.model.SongDatabase;
48 import com.virtuosotechnologies.asaph.model.SongIDResultSet;
49 import com.virtuosotechnologies.asaph.model.SongDatabaseFailedException;
50
51
52 /**
53 * A PredicateSemantics that runs the child PredicateSemantics, and then sets
54 * the values to their boolean opposites.
55 */
56 public interface NotPredicateSemantics
57 extends PredicateSemantics
58 {
59 /**
60 * Get the child predicate
61 *
62 * @return Child predicate
63 */
64 public PredicateSemantics getChild();
65
66
67 /**
68 * The default implementation of NotPredicateSemantics
69 */
70 public static class DefaultImplementation
71 implements NotPredicateSemantics
72 {
73 private PredicateSemantics delegate_;
74
75
76 /**
77 * Constructor
78 *
79 * @param delegate predicate to negate
80 */
81 public DefaultImplementation(
82 PredicateSemantics delegate)
83 {
84 delegate_ = delegate;
85 }
86
87
88 /**
89 * Get the child predicate
90 *
91 * @return Child predicate
92 */
93 public PredicateSemantics getChild()
94 {
95 return delegate_;
96 }
97
98
99 /**
100 * Performs the operation on the given result set.
101 *
102 * @param resultSet the SongIDResultSet
103 * @exception SongDatabaseFailedException Catch-all exception for database-related
104 * problems. This will often have a cause exception, which may be exceptions
105 * like IOException or SQLException.
106 */
107 public void perform(
108 SongIDResultSet resultSet)
109 throws
110 SongDatabaseFailedException
111 {
112 SongDatabase database = resultSet.getDatabase();
113 database.performOperation(delegate_, resultSet);
114 for (Iterator iter = resultSet.getEntryCollection().iterator(); iter.hasNext(); )
115 {
116 SongIDResultSet.Entry entry = (SongIDResultSet.Entry)iter.next();
117 Boolean orig = (Boolean)entry.getData();
118 if (orig.equals(Boolean.TRUE))
119 {
120 entry.setData(Boolean.FALSE);
121 }
122 else
123 {
124 entry.setData(Boolean.TRUE);
125 }
126 }
127 }
128
129
130 /**
131 * The equals method should return true if the given object is a SongOperation
132 * with the same semantics as this one. (i.e. it would perform the same operation.)
133 * This may be used to optimize performance. It is always safe to return false from
134 * this method, if the semantics of the given object cannot be determined.
135 * (This is similar to the equals method in java.util.Comparator.)
136 * As a corollary, it is safe just to fall back on the default implementation
137 * inherited from java.lang.Object.
138 *
139 * @param obj object to test
140 * @return true if the object is equal
141 */
142 public boolean equals(
143 Object obj)
144 {
145 if (obj instanceof NotPredicateSemantics)
146 {
147 return ((NotPredicateSemantics)obj).getChild().equals(delegate_);
148 }
149 return false;
150 }
151 }
152 }