CacheKeyGenerator.java
package com.tradecloud.repository.cache;
import com.tradecloud.authentication.MultiTenantUtil;
import com.tradecloud.authentication.User;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.log4j.Logger;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component("cacheKeyGenerator")
public class CacheKeyGenerator implements KeyGenerator, Serializable {
private static final Logger log = Logger.getLogger(CacheKeyGenerator.class);
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
public Object generate(Object target, Method method, Object... objects) {
HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
hashCodeBuilder.append(method.getName());
for (Object object : objects) {
if (object != null) {
if (object.getClass().isEnum()) {
hashCodeBuilder.append(object.toString());
} else if (object instanceof Date) {
String format = simpleDateFormat.format((Date) object);
hashCodeBuilder.append(format);
} else {
hashCodeBuilder.append(object);
}
}
}
String cacheKey = getPrimaryClient() + hashCodeBuilder.toHashCode();
return cacheKey;
}
protected String getPrimaryClient() {
final User activeUser = MultiTenantUtil.getActiveUser();
return activeUser != null ? activeUser.getPrimaryClient() : "";
}
public Object generatePerUser(Object target, Method method, Object... objects) {
return getUsername() + generate(target, method, objects);
}
protected String getUsername() {
final User activeUser = MultiTenantUtil.getActiveUser();
return activeUser != null ? activeUser.getUsername() : "";
}
}