package com.mossle.user.avatar; import java.io.InputStream; import javax.activation.DataSource; import javax.annotation.Resource; import com.mossle.api.avatar.AvatarConnector; import com.mossle.api.avatar.AvatarDTO; import com.mossle.core.mapper.BeanMapper; import com.mossle.user.persistence.domain.AccountAvatar; import com.mossle.user.persistence.domain.AccountInfo; import com.mossle.user.persistence.manager.AccountAvatarManager; import com.mossle.user.persistence.manager.AccountInfoManager; import com.mossle.user.service.UserAvatarService; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AvatarConnectorImpl implements AvatarConnector { private static Logger logger = LoggerFactory .getLogger(AvatarConnectorImpl.class); private UserAvatarService userAvatarService; private AccountAvatarManager accountAvatarManager; private AccountInfoManager accountInfoManager; private AvatarCache avatarCache; private BeanMapper beanMapper = new BeanMapper(); public AvatarDTO findAvatar(String userId) { try { Long accountId = Long.parseLong(userId); String hql = "from AccountAvatar where accountInfo.id=? and type='default'"; AccountAvatar accountAvatar = accountAvatarManager.findUnique(hql, accountId); if (accountAvatar == null) { logger.info("cannot find avatar : {}", accountId); return null; } AvatarDTO avatarDto = new AvatarDTO(); beanMapper.copy(accountAvatar, avatarDto); return avatarDto; } catch (Exception ex) { logger.error(ex.getMessage(), ex); } return null; } public void saveAvatar(String userId, String code) { try { Long accountId = Long.parseLong(userId); String hql = "from AccountAvatar where accountInfo.id=? and type='default'"; AccountAvatar accountAvatar = accountAvatarManager.findUnique(hql, accountId); if (accountAvatar == null) { AccountInfo accountInfo = accountInfoManager.get(accountId); accountAvatar = new AccountAvatar(); accountAvatar.setAccountInfo(accountInfo); accountAvatar.setType("default"); } accountAvatar.setCode(code); accountAvatarManager.save(accountAvatar); this.avatarCache.removeDataSource(userId); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } public InputStream findAvatarInputStream(String userId) { try { Long accountId = Long.parseLong(userId); DataSource dataSource = userAvatarService.viewAvatarById(accountId, 35, "1"); return dataSource.getInputStream(); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } return null; } public String findAvatarBase64(String userId) { InputStream is = this.findAvatarInputStream(userId); if (is == null) { return null; } try { byte[] bytes = IOUtils.toByteArray(is); String text = Base64.encodeBase64String(bytes); return text; } catch (Exception ex) { logger.error(ex.getMessage(), ex); } return null; } @Resource public void setUserAvatarService(UserAvatarService userAvatarService) { this.userAvatarService = userAvatarService; } @Resource public void setAccountAvatarManager( AccountAvatarManager accountAvatarManager) { this.accountAvatarManager = accountAvatarManager; } @Resource public void setAccountInfoManager(AccountInfoManager accountInfoManager) { this.accountInfoManager = accountInfoManager; } @Resource public void setAvatarCache(AvatarCache avatarCache) { this.avatarCache = avatarCache; } }