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() : "";
    }
}