1 package com.melloware.jukes.ws;
2
3 import java.awt.Image;
4 import java.util.ArrayList;
5 import java.util.Collection;
6
7 import org.apache.commons.lang.StringUtils;
8 import org.apache.commons.lang.builder.EqualsBuilder;
9 import org.apache.commons.lang.builder.HashCodeBuilder;
10 import org.apache.commons.lang.builder.ToStringBuilder;
11 import org.apache.commons.lang.builder.ToStringStyle;
12 import org.w3c.dom.Node;
13 import org.w3c.dom.NodeList;
14
15 import com.melloware.jukes.file.image.ImageFactory;
16
17
18
19
20
21
22
23
24
25 @SuppressWarnings("unchecked")
26 public final class AmazonItem {
27
28 private final Collection tracks = new ArrayList();
29 private Image largeImage = null;
30 private Image mediumImage = null;
31 private Image smallImage = null;
32 private String disc = null;
33 private String artist = null;
34 private String itemId = null;
35 private String largeImageUrl = null;
36 private String mediumImageUrl = null;
37 private String releaseDate = null;
38 private String releaseYear = null;
39 private String smallImageUrl = null;
40 private int bestImageWidth = 0;
41 private int bestImageHeight = 0;
42
43
44
45
46 public AmazonItem(Node aAmazonItem) {
47 super();
48 initialize(aAmazonItem);
49 }
50
51
52
53
54
55
56 public String getDisc() {
57 return this.disc;
58 }
59
60
61
62
63
64
65 public String getArtist() {
66 return this.artist;
67 }
68
69
70
71
72
73
74 public String getItemId() {
75 return this.itemId;
76 }
77
78
79
80
81
82
83 public String getBestImageUrl() {
84 if (StringUtils.isNotBlank(this.largeImageUrl)) {
85 return this.largeImageUrl;
86 } else if (StringUtils.isNotBlank(this.mediumImageUrl)) {
87 return this.mediumImageUrl;
88 } else if (StringUtils.isNotBlank(this.smallImageUrl)) {
89 return this.smallImageUrl;
90 } else {
91 return "";
92 }
93 }
94
95
96
97
98
99
100 public Image getBestImage() {
101 if (StringUtils.isNotBlank(this.largeImageUrl)) {
102 return getLargeImage();
103 } else if (StringUtils.isNotBlank(this.mediumImageUrl)) {
104 return getMediumImage();
105 } else if (StringUtils.isNotBlank(this.smallImageUrl)) {
106 return getSmallImage();
107 } else {
108 return null;
109 }
110 }
111
112
113
114
115
116
117 public Image getSmallestImage() {
118 if (StringUtils.isNotBlank(this.smallImageUrl)) {
119 return getSmallImage();
120 } else if (StringUtils.isNotBlank(this.mediumImageUrl)) {
121 return getMediumImage();
122 } else if (StringUtils.isNotBlank(this.largeImageUrl)) {
123 return getLargeImage();
124 } else {
125 return null;
126 }
127 }
128
129
130
131
132
133
134 public Image getLargeImage() {
135 if ((this.largeImage == null) && (this.largeImageUrl != null)) {
136 this.largeImage = ImageFactory.getImageFromUrl(this.largeImageUrl);
137 }
138 return this.largeImage;
139 }
140
141
142
143
144
145
146 public String getLargeImageUrl() {
147 return this.largeImageUrl;
148 }
149
150
151
152
153
154
155 public Image getMediumImage() {
156 if ((this.mediumImage == null) && (this.mediumImageUrl != null)) {
157 this.mediumImage = ImageFactory.getImageFromUrl(this.mediumImageUrl);
158 }
159 return this.mediumImage;
160 }
161
162
163
164
165
166
167 public String getMediumImageUrl() {
168 return this.mediumImageUrl;
169 }
170
171
172
173
174
175
176 public String getReleaseDate() {
177 return this.releaseDate;
178 }
179
180
181
182
183
184
185 public String getReleaseYear() {
186 if ((this.releaseYear == null) && (this.releaseDate != null) && (this.releaseDate.length() > 4)) {
187 this.releaseYear = this.releaseDate.substring(0, 4);
188 }
189 return this.releaseYear;
190 }
191
192
193
194
195
196
197 public Image getSmallImage() {
198 if ((this.smallImage == null) && (this.smallImageUrl != null)) {
199 this.smallImage = ImageFactory.getImageFromUrl(this.smallImageUrl);
200 }
201 return this.smallImage;
202 }
203
204
205
206
207
208
209 public String getSmallImageUrl() {
210 return this.smallImageUrl;
211 }
212
213
214
215
216
217
218 public Collection getTracks() {
219 return this.tracks;
220 }
221
222
223
224
225 @Override
226 public boolean equals(Object obj) {
227 if (!(obj instanceof AmazonItem)) {
228 return false;
229 }
230 if (this == obj) {
231 return true;
232 }
233 AmazonItem rhs = (AmazonItem) obj;
234 EqualsBuilder builder = new EqualsBuilder();
235 builder.append(artist, rhs.artist);
236 builder.append(disc, rhs.disc);
237 builder.append(itemId, rhs.itemId);
238
239 return builder.isEquals();
240 }
241
242
243
244
245 @Override
246 public int hashCode() {
247 return new HashCodeBuilder(17, 37).append(artist).append(disc).append(releaseDate).toHashCode();
248 }
249
250
251
252
253 @Override
254 public String toString() {
255 ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE);
256 builder.append("artist", artist);
257 builder.append("disc", disc);
258 builder.append("itemId", itemId);
259 builder.append("smallImageUrl", smallImageUrl);
260 builder.append("mediumImageUrl", mediumImageUrl);
261 builder.append("largeImageUrl", largeImageUrl);
262 builder.append("releaseDate", releaseDate);
263
264 return builder.toString();
265 }
266
267
268
269
270 private void initialize(Node aAmazonItem) {
271 final Node amazonItem = aAmazonItem;
272 if (amazonItem == null) {
273 throw new IllegalArgumentException("Amazon Item is null.");
274 }
275
276 NodeList nodeList = amazonItem.getChildNodes();
277 if (nodeList.getLength() != 0) {
278 for (int i = 0; i < nodeList.getLength(); i = i + 1) {
279 Node n = nodeList.item(i);
280 if (n.getNodeName().equalsIgnoreCase("ASIN")) {
281 setItemId(n);
282 }
283 if (n.getNodeName().equalsIgnoreCase("SmallImage")) {
284 setSmallImage(n);
285 }
286 if (n.getNodeName().equalsIgnoreCase("MediumImage")) {
287 setMediumImage(n);
288 }
289 if (n.getNodeName().equalsIgnoreCase("LargeImage")) {
290 setLargeImage(n);
291 }
292 if (n.getNodeName().equalsIgnoreCase("ItemAttributes")) {
293 NodeList attributesList = n.getChildNodes();
294 if (attributesList.getLength() != 0) {
295 for (int ii = 0; ii < attributesList.getLength(); ii = ii + 1) {
296 Node attributeNode = attributesList.item(ii);
297 if (attributeNode.getNodeName().equalsIgnoreCase("ARTIST")) {
298 setArtist(attributeNode);
299 }
300 if (attributeNode.getNodeName().equalsIgnoreCase("TITLE")) {
301 setTitle(attributeNode);
302 }
303 if (attributeNode.getNodeName().equalsIgnoreCase("RELEASEDATE")) {
304 setReleaseDate(attributeNode);
305 }
306 if (attributeNode.getNodeName().equalsIgnoreCase("ORIGINALRELEASEDATE")) {
307 setOriginalReleaseDate(attributeNode);
308 }
309 }
310 }
311 }
312
313 if (n.getNodeName().equalsIgnoreCase("Tracks")) {
314 NodeList discsList = n.getChildNodes();
315 if (discsList.getLength() != 0) {
316 for (int ij = 0; ij < discsList.getLength(); ij = ij + 1) {
317
318
319 Node discNode = discsList.item(ij);
320 if (discNode.getNodeName().equalsIgnoreCase("Disc")) {
321 NodeList tracksList = discNode.getChildNodes();
322 if (tracksList.getLength() != 0) {
323 for (int iTr = 0; iTr < tracksList.getLength(); iTr = iTr + 1) {
324
325
326 Node trackNode = tracksList.item(iTr);
327 if (trackNode.getNodeName().equalsIgnoreCase("Track")) {
328 setTrack(trackNode);
329 }
330 }
331 }
332 }
333 }
334 }
335 }
336
337 }
338 } else {
339 throw new IllegalArgumentException("Amazon Item is empty.");
340 }
341 }
342
343
344
345
346
347
348 public int getBestImageHeight() {
349 return this.bestImageHeight;
350 }
351
352
353
354
355
356
357 public int getBestImageWidth() {
358 return this.bestImageWidth;
359 }
360
361
362
363
364 private void setItemId(Node n) {
365 if (n.getNodeName().equalsIgnoreCase("ASIN")) {
366 this.itemId = n.getTextContent();
367 }
368 }
369
370
371
372
373 private void setSmallImage(Node n) {
374 if (n.getNodeName().equalsIgnoreCase("SmallImage")) {
375 final NodeList nodeList = n.getChildNodes();
376 if (nodeList.getLength() != 0) {
377 for (int i = 0; i < nodeList.getLength(); i = i + 1) {
378 Node node = nodeList.item(i);
379 if (node.getNodeName().equalsIgnoreCase("URL")) {
380 this.smallImageUrl = node.getTextContent();
381 }
382 if (node.getNodeName().equalsIgnoreCase("Height")) {
383 this.bestImageHeight = Integer.parseInt(node.getTextContent().trim());
384 }
385 if (node.getNodeName().equalsIgnoreCase("Width")) {
386 this.bestImageWidth = Integer.parseInt(node.getTextContent().trim());
387 }
388 }
389 }
390 }
391 }
392
393
394
395
396 private void setMediumImage(Node n) {
397 if (n.getNodeName().equalsIgnoreCase("MediumImage")) {
398 final NodeList nodeList = n.getChildNodes();
399 if (nodeList.getLength() != 0) {
400 for (int i = 0; i < nodeList.getLength(); i = i + 1) {
401 Node node = nodeList.item(i);
402 if (node.getNodeName().equalsIgnoreCase("URL")) {
403 this.mediumImageUrl = node.getTextContent();
404 }
405 if (node.getNodeName().equalsIgnoreCase("Height")) {
406 this.bestImageHeight = Integer.parseInt(node.getTextContent().trim());
407 }
408 if (node.getNodeName().equalsIgnoreCase("Width")) {
409 this.bestImageWidth = Integer.parseInt(node.getTextContent().trim());
410 }
411 }
412 }
413 }
414 }
415
416
417
418
419 private void setLargeImage(Node n) {
420 if (n.getNodeName().equalsIgnoreCase("LargeImage")) {
421 final NodeList nodeList = n.getChildNodes();
422 if (nodeList.getLength() != 0) {
423 for (int i = 0; i < nodeList.getLength(); i = i + 1) {
424 Node node = nodeList.item(i);
425 if (node.getNodeName().equalsIgnoreCase("URL")) {
426 this.largeImageUrl = node.getTextContent();
427 }
428 if (node.getNodeName().equalsIgnoreCase("Height")) {
429 this.bestImageHeight = Integer.parseInt(node.getTextContent().trim());
430 }
431 if (node.getNodeName().equalsIgnoreCase("Width")) {
432 this.bestImageWidth = Integer.parseInt(node.getTextContent().trim());
433 }
434 }
435 }
436 }
437 }
438
439
440
441
442 private void setArtist(Node n) {
443 if (n.getNodeName().equalsIgnoreCase("ARTIST")) {
444 this.artist = n.getTextContent();
445 }
446 }
447
448
449
450
451 private void setTitle(Node n) {
452 if (n.getNodeName().equalsIgnoreCase("TITLE")) {
453 this.disc = n.getTextContent();
454 }
455 }
456
457
458
459
460 private void setReleaseDate(Node n) {
461 if (n.getNodeName().equalsIgnoreCase("RELEASEDATE")) {
462 if (this.releaseDate == null) {
463 this.releaseDate = n.getTextContent();
464 }
465 }
466 }
467
468
469
470
471 private void setOriginalReleaseDate(Node n) {
472 if (n.getNodeName().equalsIgnoreCase("ORIGINALRELEASEDATE")) {
473 if (n.getTextContent().length() > 0) {
474 this.releaseDate = n.getTextContent();
475 }
476 }
477 }
478
479
480
481
482 private void setTrack(Node n) {
483 if (n.getNodeName().equalsIgnoreCase("TRACK")) {
484 final String trackName = n.getTextContent();
485 this.tracks.add(trackName);
486 }
487 }
488
489 }