Package fr.ippon.tatami.service

Source Code of fr.ippon.tatami.service.AvatarService

package fr.ippon.tatami.service;

import fr.ippon.tatami.config.Constants;
import fr.ippon.tatami.domain.Avatar;
import fr.ippon.tatami.domain.User;
import fr.ippon.tatami.repository.AvatarRepository;
import fr.ippon.tatami.repository.DomainConfigurationRepository;
import fr.ippon.tatami.repository.UserRepository;
import fr.ippon.tatami.security.AuthenticationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.imageio.ImageIO;
import javax.inject.Inject;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

@Service
public class AvatarService {

    private static final Logger log = LoggerFactory.getLogger(AvatarService.class);

    @Inject
    private AvatarRepository avatarRepository;

    @Inject
    private DomainConfigurationRepository domainConfigurationRepository;

    @Inject
    private UserRepository userRepository;

    @Inject
    private AuthenticationService authenticationService;

    public String createAvatar(Avatar avatar) {

        User currentUser = authenticationService.getCurrentUser();

        if (currentUser.getAvatar() != null && !("").equals(currentUser.getAvatar())) {
            deleteAvatar(currentUser.getAvatar());
        }

        try {
            avatar.setContent(scaleImage(avatar.getContent()));
        } catch (IOException e) {
            log.info("Avatar could not be resized : " + e.getMessage());
            return null;
        }

        avatarRepository.createAvatar(avatar);

        log.debug("Avatar created : {}", avatar);

        return avatar.getAvatarId();
    }

    public Avatar getAvatarById(String avatartId) {
        log.debug("Get Avatar Id : {}", avatartId);
        return avatarRepository.findAvatarById(avatartId);
    }

    public void deleteAvatar(String avatarId) {
        avatarRepository.removeAvatar(avatarId);

        User currentUser = authenticationService.getCurrentUser();
        userRepository.updateUser(currentUser);
    }

    private byte[] scaleImage(byte[] data) throws IOException {
        ByteArrayInputStream in = new ByteArrayInputStream(data);

        BufferedImage img = ImageIO.read(in);
        int width = Constants.AVATAR_SIZE;
        int height = Constants.AVATAR_SIZE;

        Image image = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        bufferedImage.getGraphics().drawImage(image, 0, 0, new Color(0, 0, 0), null);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);

        log.debug("New Byte size of Avatar : {} Kbits", byteArrayOutputStream.size() / 1024);

        return byteArrayOutputStream.toByteArray();
    }
}
TOP

Related Classes of fr.ippon.tatami.service.AvatarService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.