package com.qprogramming.tasq.config;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import org.imgscalr.Scalr;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import com.qprogramming.tasq.manage.AppService;
import com.qprogramming.tasq.support.Utils;
@Service
public class ResourceService implements ResourceLoaderAware {
private static final String AVATAR_DIR = "avatar";
private static final String SMALL = "small_";
private static final String LOGO = "logo";
private static final String PNG = ".png";
private ResourceLoader resourceLoader;
private AppService appSrv;
@Autowired
public ResourceService(AppService appSrv) {
this.appSrv = appSrv;
}
private static final Logger LOG = LoggerFactory.getLogger(ResourceService.class);
@Override
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
public Resource getResource(String location) {
return resourceLoader.getResource(location);
}
/**
* Builds map with basic resources like logo
*
* @return
*/
public Map<String, Resource> getBasicResourceMap() {
Map<String, Resource> map = new HashMap<String, Resource>();
try {
map.put("logo", getLogo());
} catch (IOException e) {
LOG.error(e.getMessage());
}
return map;
}
public Resource getLogo() throws IOException {
return getResource("file:" + getAvatarDir() + SMALL + LOGO + PNG);
}
public Resource getUserAvatar() {
try {
resizeAvatar();
} catch (IOException e) {
LOG.error(e.getMessage());
}
return getResource("file:" + getAvatarDir() + SMALL + Utils.getCurrentAccount().getId() + PNG);
}
public Resource getTaskTypeIcon(String type) {
return getResource("classpath:email/img/" + type + PNG);
}
private String getAvatarDir() {
return appSrv.getProperty(AppService.TASQROOTDIR) + File.separator + AVATAR_DIR + File.separator;
}
private void resizeAvatar() throws IOException {
String avatar = getAvatarDir() + Utils.getCurrentAccount().getId() + PNG;
String resizedavatar = getAvatarDir() + SMALL + Utils.getCurrentAccount().getId() + PNG;
BufferedImage originalImage = ImageIO.read(new File(avatar));
BufferedImage scaledImg = Scalr.resize(originalImage, 50);
ImageIO.write(scaledImg, "png", new File(resizedavatar));
}
public void clean() {
String resizedavatar = getAvatarDir() + SMALL + Utils.getCurrentAccount().getId() + PNG;
File file = new File(resizedavatar);
if (file.exists()) {
file.delete();
}
}
}