Source code: com/virtuosotechnologies/asaph/model/opsemantics/GetFieldAsStringSemantics.java
1 /*
2 ================================================================================
3
4 FILE: GetFieldAsStringSemantics.java
5
6 PROJECT:
7
8 Asaph
9
10 CONTENTS:
11
12 An OpSemantics that sets the data to the string value of a field
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.SongOperation;
48 import com.virtuosotechnologies.asaph.model.SongIDResultSet;
49 import com.virtuosotechnologies.asaph.model.Song;
50 import com.virtuosotechnologies.asaph.model.SongDatabaseFailedException;
51
52 import com.virtuosotechnologies.asaph.modelutils.SongUtils;
53
54
55 /**
56 * An OpSemantics that sets the data to the value of a field.
57 * SongOperations that implement this interface guarantee that perform()
58 * sets the data field of each entry in the result set to the field value String
59 * of the corresponding Song as would be set by SongUtils.getFieldValueAsString(),
60 * or to null if an error occurs.
61 */
62 public interface GetFieldAsStringSemantics
63 extends SongOperation
64 {
65 /**
66 * Get the name of the field that is being read.
67 *
68 * @return field name
69 */
70 public String getFieldName();
71
72
73 /**
74 * The default implementation of GetFieldStringSemantics
75 */
76 public static class DefaultImplementation
77 implements GetFieldAsStringSemantics
78 {
79 private String fieldName_;
80 private SongUtils songUtils_;
81
82
83 /**
84 * Constructor
85 *
86 * @param fieldName name of the field to query
87 * @param songUtils SongUtils api
88 */
89 public DefaultImplementation(
90 String fieldName,
91 SongUtils songUtils)
92 {
93 fieldName_ = fieldName;
94 songUtils_ = songUtils;
95 }
96
97
98 /**
99 * Get the name of the field that is being read.
100 *
101 * @return field name
102 */
103 public String getFieldName()
104 {
105 return fieldName_;
106 }
107
108
109 /**
110 * Performs the operation on the given result set.
111 *
112 * @param resultSet the SongIDResultSet
113 * @exception SongDatabaseFailedException Catch-all exception for database-related
114 * problems. This will often have a cause exception, which may be exceptions
115 * like IOException or SQLException.
116 */
117 public void perform(
118 SongIDResultSet resultSet)
119 throws
120 SongDatabaseFailedException
121 {
122 for (Iterator iter = resultSet.getEntryCollection().iterator(); iter.hasNext(); )
123 {
124 SongIDResultSet.Entry entry = (SongIDResultSet.Entry)iter.next();
125 Song song = entry.getSong();
126 if (song == null)
127 {
128 entry.setData(null);
129 }
130 else
131 {
132 entry.setData(songUtils_.getFieldValueAsString(song, fieldName_));
133 }
134 }
135 }
136
137
138 /**
139 * The equals method should return true if the given object is a SongOperation
140 * with the same semantics as this one. (i.e. it would perform the same operation.)
141 * This may be used to optimize performance. It is always safe to return false from
142 * this method, if the semantics of the given object cannot be determined.
143 * (This is similar to the equals method in java.util.Comparator.)
144 * As a corollary, it is safe just to fall back on the default implementation
145 * inherited from java.lang.Object.
146 *
147 * @param obj object to test
148 * @return true if the object is equal
149 */
150 public boolean equals(
151 Object obj)
152 {
153 if (obj instanceof GetFieldAsStringSemantics)
154 {
155 return ((GetFieldAsStringSemantics)obj).getFieldName().equals(fieldName_);
156 }
157 return false;
158 }
159 }
160 }