001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.ImageTypeException;
018 import com.liferay.portal.NoSuchImageException;
019 import com.liferay.portal.image.HookFactory;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.exception.SystemException;
022 import com.liferay.portal.kernel.image.Hook;
023 import com.liferay.portal.kernel.image.ImageBag;
024 import com.liferay.portal.kernel.image.ImageToolUtil;
025 import com.liferay.portal.kernel.log.Log;
026 import com.liferay.portal.kernel.log.LogFactoryUtil;
027 import com.liferay.portal.kernel.util.FileUtil;
028 import com.liferay.portal.kernel.util.PropsKeys;
029 import com.liferay.portal.model.Image;
030 import com.liferay.portal.model.impl.ImageImpl;
031 import com.liferay.portal.service.base.ImageLocalServiceBaseImpl;
032 import com.liferay.portal.util.PropsUtil;
033 import com.liferay.portal.webserver.WebServerServletTokenUtil;
034
035 import java.awt.image.RenderedImage;
036
037 import java.io.File;
038 import java.io.FileInputStream;
039 import java.io.IOException;
040 import java.io.InputStream;
041
042 import java.util.Arrays;
043 import java.util.Date;
044 import java.util.List;
045
046
051 public class ImageLocalServiceImpl extends ImageLocalServiceBaseImpl {
052
053 @Override
054 public void afterPropertiesSet() {
055 super.afterPropertiesSet();
056
057 ClassLoader classLoader = getClassLoader();
058
059 try {
060 InputStream is = classLoader.getResourceAsStream(
061 PropsUtil.get(PropsKeys.IMAGE_DEFAULT_SPACER));
062
063 if (is == null) {
064 _log.error("Default spacer is not available");
065 }
066
067 _defaultSpacer = getImage(is);
068 }
069 catch (Exception e) {
070 _log.error(
071 "Unable to configure the default spacer: " + e.getMessage());
072 }
073
074 try {
075 InputStream is = classLoader.getResourceAsStream(
076 PropsUtil.get(PropsKeys.IMAGE_DEFAULT_COMPANY_LOGO));
077
078 if (is == null) {
079 _log.error("Default company logo is not available");
080 }
081
082 _defaultCompanyLogo = getImage(is);
083 }
084 catch (Exception e) {
085 _log.error(
086 "Unable to configure the default company logo: " +
087 e.getMessage());
088 }
089
090 try {
091 InputStream is = classLoader.getResourceAsStream(
092 PropsUtil.get(PropsKeys.IMAGE_DEFAULT_ORGANIZATION_LOGO));
093
094 if (is == null) {
095 _log.error("Default organization logo is not available");
096 }
097
098 _defaultOrganizationLogo = getImage(is);
099 }
100 catch (Exception e) {
101 _log.error(
102 "Unable to configure the default organization logo: " +
103 e.getMessage());
104 }
105
106 try {
107 InputStream is = classLoader.getResourceAsStream(
108 PropsUtil.get(PropsKeys.IMAGE_DEFAULT_USER_FEMALE_PORTRAIT));
109
110 if (is == null) {
111 _log.error("Default user female portrait is not available");
112 }
113
114 _defaultUserFemalePortrait = getImage(is);
115 }
116 catch (Exception e) {
117 _log.error(
118 "Unable to configure the default user female portrait: " +
119 e.getMessage());
120 }
121
122 try {
123 InputStream is = classLoader.getResourceAsStream(
124 PropsUtil.get(PropsKeys.IMAGE_DEFAULT_USER_MALE_PORTRAIT));
125
126 if (is == null) {
127 _log.error("Default user male portrait is not available");
128 }
129
130 _defaultUserMalePortrait = getImage(is);
131 }
132 catch (Exception e) {
133 _log.error(
134 "Unable to configure the default user male portrait: " +
135 e.getMessage());
136 }
137 }
138
139 @Override
140 public Image deleteImage(long imageId)
141 throws PortalException, SystemException {
142
143 if (imageId <= 0) {
144 return null;
145 }
146
147
156 Image image = getImage(imageId);
157
158 if (image != null) {
159 imagePersistence.remove(image);
160
161 Hook hook = HookFactory.getInstance();
162
163 try {
164 hook.deleteImage(image);
165 }
166 catch (NoSuchImageException nsie) {
167
168
169
170
171 if (_log.isWarnEnabled()) {
172 _log.warn(nsie, nsie);
173 }
174 }
175 }
176
177 return image;
178
179 }
180
181 @Override
182 public Image getCompanyLogo(long imageId) {
183 Image image = getImage(imageId);
184
185 if (image == null) {
186 image = getDefaultCompanyLogo();
187 }
188
189 return image;
190 }
191
192 @Override
193 public Image getDefaultCompanyLogo() {
194 return _defaultCompanyLogo;
195 }
196
197 @Override
198 public Image getDefaultOrganizationLogo() {
199 return _defaultOrganizationLogo;
200 }
201
202 @Override
203 public Image getDefaultSpacer() {
204 return _defaultSpacer;
205 }
206
207 @Override
208 public Image getDefaultUserFemalePortrait() {
209 return _defaultUserFemalePortrait;
210 }
211
212 @Override
213 public Image getDefaultUserMalePortrait() {
214 return _defaultUserMalePortrait;
215 }
216
217 @Override
218 public Image getImage(byte[] bytes)
219 throws PortalException, SystemException {
220
221 return getImage(null, bytes);
222 }
223
224 @Override
225 public Image getImage(File file) throws PortalException, SystemException {
226 try {
227 return getImage(new FileInputStream(file));
228 }
229 catch (IOException ioe) {
230 throw new SystemException(ioe);
231 }
232 }
233
234 @Override
235 public Image getImage(InputStream is)
236 throws PortalException, SystemException {
237
238 return getImage(is, null);
239 }
240
241 @Override
242 public Image getImage(InputStream is, boolean cleanUpStream)
243 throws PortalException, SystemException {
244
245 return getImage(is, null, cleanUpStream);
246 }
247
248 @Override
249 public Image getImage(long imageId) {
250 if (imageId > 0) {
251 try {
252 return imagePersistence.fetchByPrimaryKey(imageId);
253 }
254 catch (Exception e) {
255 if (_log.isWarnEnabled()) {
256 _log.warn(
257 "Unable to get image " + imageId + ": " +
258 e.getMessage());
259 }
260 }
261 }
262
263 return null;
264 }
265
266 @Override
267 public Image getImageOrDefault(long imageId) {
268 Image image = getImage(imageId);
269
270 if (image == null) {
271 image = getDefaultSpacer();
272 }
273
274 return image;
275 }
276
277 @Override
278 public List<Image> getImages() throws SystemException {
279 return imagePersistence.findAll();
280 }
281
282 @Override
283 public List<Image> getImagesBySize(int size) throws SystemException {
284 return imagePersistence.findByLtSize(size);
285 }
286
287 @Override
288 public boolean isNullOrDefaultSpacer(byte[] bytes) {
289 if ((bytes == null) || (bytes.length == 0) ||
290 Arrays.equals(bytes, getDefaultSpacer().getTextObj())) {
291
292 return true;
293 }
294 else {
295 return false;
296 }
297 }
298
299 @Override
300 public Image updateImage(long imageId, byte[] bytes)
301 throws PortalException, SystemException {
302
303 Image image = getImage(bytes);
304
305 return updateImage(
306 imageId, image.getTextObj(), image.getType(), image.getHeight(),
307 image.getWidth(), image.getSize());
308 }
309
310 @Override
311 public Image updateImage(
312 long imageId, byte[] bytes, String type, int height, int width,
313 int size)
314 throws PortalException, SystemException {
315
316 Image image = imagePersistence.fetchByPrimaryKey(imageId);
317
318 if (image == null) {
319 image = imagePersistence.create(imageId);
320 }
321
322 image.setModifiedDate(new Date());
323 image.setType(type);
324 image.setHeight(height);
325 image.setWidth(width);
326 image.setSize(size);
327
328 Hook hook = HookFactory.getInstance();
329
330 hook.updateImage(image, type, bytes);
331
332 imagePersistence.update(image, false);
333
334 WebServerServletTokenUtil.resetToken(imageId);
335
336 return image;
337 }
338
339 @Override
340 public Image updateImage(long imageId, File file)
341 throws PortalException, SystemException {
342
343 Image image = getImage(file);
344
345 return updateImage(
346 imageId, image.getTextObj(), image.getType(), image.getHeight(),
347 image.getWidth(), image.getSize());
348 }
349
350 @Override
351 public Image updateImage(long imageId, InputStream is)
352 throws PortalException, SystemException {
353
354 Image image = getImage(is);
355
356 return updateImage(
357 imageId, image.getTextObj(), image.getType(), image.getHeight(),
358 image.getWidth(), image.getSize());
359 }
360
361 @Override
362 public Image updateImage(
363 long imageId, InputStream is, boolean cleanUpStream)
364 throws PortalException, SystemException {
365
366 Image image = getImage(is, cleanUpStream);
367
368 return updateImage(
369 imageId, image.getTextObj(), image.getType(), image.getHeight(),
370 image.getWidth(), image.getSize());
371 }
372
373 protected Image getImage(InputStream is, byte[] bytes)
374 throws PortalException, SystemException {
375
376 return getImage(is, bytes, true);
377 }
378
379 protected Image getImage(
380 InputStream is, byte[] bytes, boolean cleanUpStream)
381 throws PortalException, SystemException {
382
383 try {
384 if (is != null) {
385 bytes = FileUtil.getBytes(is, -1, cleanUpStream);
386 }
387
388 if (bytes == null) {
389 return null;
390 }
391
392 ImageBag imageBag = ImageToolUtil.read(bytes);
393
394 RenderedImage renderedImage = imageBag.getRenderedImage();
395 String type = imageBag.getType();
396
397 if (renderedImage == null) {
398 throw new ImageTypeException();
399 }
400
401 int height = renderedImage.getHeight();
402 int width = renderedImage.getWidth();
403 int size = bytes.length;
404
405 Image image = new ImageImpl();
406
407 image.setTextObj(bytes);
408 image.setType(type);
409 image.setHeight(height);
410 image.setWidth(width);
411 image.setSize(size);
412
413 return image;
414 }
415 catch (IOException ioe) {
416 throw new SystemException(ioe);
417 }
418 }
419
420 private static Log _log = LogFactoryUtil.getLog(
421 ImageLocalServiceImpl.class);
422
423 private Image _defaultCompanyLogo;
424 private Image _defaultOrganizationLogo;
425 private Image _defaultSpacer;
426 private Image _defaultUserFemalePortrait;
427 private Image _defaultUserMalePortrait;
428
429 }