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/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 }