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