package com.mossle.user.rs;
import java.io.InputStream;
import javax.annotation.Resource;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.mossle.api.tenant.TenantHolder;
import com.mossle.user.service.UserAvatarService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
@Path("avatar")
public class AvatarResource {
private static Logger logger = LoggerFactory
.getLogger(AvatarResource.class);
private UserAvatarService userAvatarService;
private TenantHolder tenantHolder;
@GET
@Produces("image/png")
public InputStream view(@QueryParam("id") String id,
@QueryParam("width") @DefaultValue("16") int width)
throws Exception {
if (StringUtils.isBlank(id)) {
logger.info("id cannot be blank");
return null;
}
if (id.indexOf("_") != -1) {
String text = id;
logger.info("process : {}", text);
int index = text.indexOf("_");
int nextIndex = text.indexOf("x");
id = text.substring(0, index);
width = Integer.parseInt(text.substring(index + 1, nextIndex));
logger.info("id : {}, width : {}", id, width);
}
logger.debug("width : {}", width);
String tenantId = tenantHolder.getTenantId();
Long longId = null;
try {
longId = Long.parseLong(id);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
return userAvatarService.viewAvatarById(longId, width, tenantId)
.getInputStream();
}
@GET
@Path("username")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public InputStream username(@QueryParam("username") String username,
@QueryParam("width") @DefaultValue("16") int width)
throws Exception {
logger.debug("width : {}", width);
String tenantId = tenantHolder.getTenantId();
return userAvatarService
.viewAvatarByUsername(username, width, tenantId)
.getInputStream();
}
// ~ ======================================================================
@Resource
public void setUserAvatarService(UserAvatarService userAvatarService) {
this.userAvatarService = userAvatarService;
}
@Resource
public void setTenantHolder(TenantHolder tenantHolder) {
this.tenantHolder = tenantHolder;
}
}