Source code: com/virtuosotechnologies/asaph/model/opsemantics/ValueFilterSemantics.java
1 /*
2 ================================================================================
3
4 FILE: ValueFilterSemantics.java
5
6 PROJECT:
7
8 Asaph
9
10 CONTENTS:
11
12 An opsemantics that filters a SongIDResultSet based on the value.
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.lib.util.ObjectUtils;
48
49 import com.virtuosotechnologies.asaph.model.SongOperation;
50 import com.virtuosotechnologies.asaph.model.SongIDResultSet;
51 import com.virtuosotechnologies.asaph.model.SongDatabaseFailedException;
52
53
54 /**
55 * An opsemantics that filters a SongIDResultSet based on the value.
56 * It retains those songs whose value equals the given target value.
57 */
58 public interface ValueFilterSemantics
59 extends SongOperation
60 {
61 /**
62 * Get the target value.
63 *
64 * @return target data value. May be null.
65 */
66 public Object getTargetValue();
67
68
69 /**
70 * The default implementation of ValueFilterSemantics
71 */
72 public static class DefaultImplementation
73 implements ValueFilterSemantics
74 {
75 private Object targetValue_;
76
77
78 /**
79 * Constructor
80 *
81 * @param targetValue target value. May be null.
82 */
83 public DefaultImplementation(
84 Object targetValue)
85 {
86 targetValue_ = targetValue;
87 }
88
89
90 /**
91 * Get the target value.
92 *
93 * @return target data value. May be null.
94 */
95 public Object getTargetValue()
96 {
97 return targetValue_;
98 }
99
100
101 /**
102 * Performs the operation on the given result set.
103 *
104 * @param resultSet the SongIDResultSet
105 * @exception SongDatabaseFailedException Catch-all exception for database-related
106 * problems. This will often have a cause exception, which may be exceptions
107 * like IOException or SQLException.
108 */
109 public void perform(
110 SongIDResultSet resultSet)
111 throws
112 SongDatabaseFailedException
113 {
114 for (Iterator iter = resultSet.getEntryCollection().iterator(); iter.hasNext(); )
115 {
116 SongIDResultSet.Entry entry = (SongIDResultSet.Entry)iter.next();
117 if (!ObjectUtils.safeEquals(entry.getData(), targetValue_))
118 {
119 iter.remove();
120 }
121 }
122 }
123
124
125 /**
126 * The equals method should return true if the given object is a SongOperation
127 * with the same semantics as this one. (i.e. it would perform the same operation.)
128 * This may be used to optimize performance. It is always safe to return false from
129 * this method, if the semantics of the given object cannot be determined.
130 * (This is similar to the equals method in java.util.Comparator.)
131 * As a corollary, it is safe just to fall back on the default implementation
132 * inherited from java.lang.Object.
133 *
134 * @param obj object to test
135 * @return true if the object is equal
136 */
137 public boolean equals(
138 Object obj)
139 {
140 if (obj instanceof ValueFilterSemantics)
141 {
142 return ObjectUtils.safeEquals(targetValue_,
143 ((ValueFilterSemantics)obj).getTargetValue());
144 }
145 return false;
146 }
147 }
148 }