Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }