1 /***
2 * Copyright (C) 2009 TM-Search Community.
3 *
4 * This file is part of TM-Search Services.
5 *
6 * Foobar is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * Foobar is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 package eu.europa.tmsearch.services.business;
21
22 import java.util.Date;
23
24 import org.apache.log4j.Logger;
25
26 import eu.europa.tmsearch.services.business.exception.BusinessServiceException;
27 import eu.europa.tmsearch.services.business.exception.ImageProcessorRuntimeException;
28 import eu.europa.tmsearch.services.business.util.AWTImageProcessorImpl;
29 import eu.europa.tmsearch.services.business.util.ImageProcessor;
30 import eu.europa.tmsearch.services.business.util.ST13Converter;
31 import eu.europa.tmsearch.services.business.util.ST13ConverterDummyImpl;
32 import eu.europa.tmsearch.services.dao.TradeMarkImageDAO;
33 import eu.europa.tmsearch.services.model.TradeMarkImage;
34 import eu.europa.tmsearch.services.resources.exceptions.ResourceNotFoundException;
35
36 /***
37 * A business service to get an image given a TradeMark.
38 *
39 *
40 * @see TradeMarkImage
41 * @see TradeMark
42 */
43 public class TradeMarkImageServiceImpl implements TradeMarkImageService {
44
45 private static Logger log = Logger.getLogger(TradeMarkImageServiceImpl.class);
46
47 /***
48 * A from/to ST13 IDs/specific data store ID converter. By default
49 * instantiates the dummy/transparent converter
50 */
51 private ST13Converter st13Converter = new ST13ConverterDummyImpl();
52
53 /***
54 * A {@link ImageProcessor} implementation that MAY BE used to generate the
55 * image if conversion are required.
56 */
57 private ImageProcessor imageProcessor;
58 /***
59 * A {@link TradeMarkImageDAO} implementation used to fetch a trademark
60 * master image.
61 */
62 private TradeMarkImageDAO tradeMarkImageDAO;
63 /***
64 * A default value for thumbnail image format
65 */
66 private String defaultThumbnailFormat;
67
68 /***
69 * Gets an image given a TradeMark by its ApplicationNumber.
70 *
71 * <p>
72 * Uses a {@link ImageProcessor} to generate the image if present and
73 * implementing {@link ImageProcessor#getMasterImage}. If the injected
74 * ImageProcessor implementation throws a
75 * {@link ImageProcessorRuntimeException} this service will try to generate
76 * the image use standard Java imaging facilities.
77 * </p>
78 *
79 * @param tradeMark
80 * A source trade mark to get the master image from
81 * @return A TradeMarkImage containing the master image
82 * @throws BusinessServiceException
83 * @throws ResourceNotFoundException
84 */
85 public TradeMarkImage getImage(String resourceId) throws BusinessServiceException,
86 ResourceNotFoundException {
87
88 log.debug("Retrieving image from ID: " + resourceId);
89
90 TradeMarkImage tradeMarkImage = tradeMarkImageDAO.getTradeMarkImageByID(st13Converter
91 .fromST13ID(resourceId));
92
93 TradeMarkImage tradeMarkImageThumb;
94 try {
95 tradeMarkImageThumb = imageProcessor.getImage(tradeMarkImage);
96 } catch (ImageProcessorRuntimeException e) {
97 if (!imageProcessor.getClass().isInstance(AWTImageProcessorImpl.class)) {
98 log
99 .error(imageProcessor.getClass().toString()
100 + " image processor not found or properly installed. Rolling back to standard Java image processing...");
101 this.imageProcessor = new AWTImageProcessorImpl();
102 tradeMarkImageThumb = imageProcessor.getImage(tradeMarkImage);
103 } else
104 throw new BusinessServiceException(e);
105 } catch (NullPointerException e) {
106 if (log.isDebugEnabled()) {
107 log
108 .debug("Trade mark's master image has no processor attached. Returning trade mark's master image without processing it.");
109 }
110 tradeMarkImageThumb = tradeMarkImage;
111 }
112 return tradeMarkImageThumb;
113 }
114
115 @Override
116 public Date getLastModified(String tradeMarkID) throws ResourceNotFoundException {
117 String applicationNumber = st13Converter.fromST13ID(tradeMarkID);
118 return tradeMarkImageDAO.getLastModified(applicationNumber);
119 }
120
121 @Override
122 public Date getExpires(String tradeMarkID) throws ResourceNotFoundException {
123 String applicationNumber = st13Converter.fromST13ID(tradeMarkID);
124 return tradeMarkImageDAO.getExpires(applicationNumber);
125 }
126
127 public ImageProcessor getImageProcessor() {
128 return imageProcessor;
129 }
130
131 public void setImageProcessor(ImageProcessor imageProcessor) {
132 this.imageProcessor = imageProcessor;
133 }
134
135 public TradeMarkImageDAO getTradeMarkImageDAO() {
136 return tradeMarkImageDAO;
137 }
138
139 public void setTradeMarkImageDAO(TradeMarkImageDAO tradeMarkImageDAO) {
140 this.tradeMarkImageDAO = tradeMarkImageDAO;
141 }
142
143 public String getDefaultThumbnailFormat() {
144 return defaultThumbnailFormat;
145 }
146
147 public void setDefaultThumbnailFormat(String defaultThumbnailFormat) {
148 this.defaultThumbnailFormat = defaultThumbnailFormat;
149 }
150
151 public ST13Converter getSt13Converter() {
152 return st13Converter;
153 }
154
155 public void setSt13Converter(ST13Converter st13Converter) {
156 this.st13Converter = st13Converter;
157 }
158
159 }