All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ars.invoke.Cacheable Maven / Gradle / Ivy

The newest version!
package ars.invoke;

import java.util.Set;
import java.util.Arrays;
import java.util.Collection;
import java.io.Serializable;

import ars.util.Beans;
import ars.util.Strings;
import ars.invoke.request.Requester;

/**
 * 可资源数据缓存规则类
 *
 * @author wuyongqiang
 */
public class Cacheable implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 默认缓存超时时间(秒)
     */
    public static final int DEFAULT_TIMEOUT = 30 * 60;

    private int timeout = DEFAULT_TIMEOUT; // 缓存超时时间(秒)
    private boolean global = true; // 是否是全局缓存
    private String target; // 缓存目标地址
    private String refresh; // 缓存刷新触发地址

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public boolean isGlobal() {
        return global;
    }

    public void setGlobal(boolean global) {
        this.global = global;
    }

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }

    public String getRefresh() {
        return refresh;
    }

    public void setRefresh(String refresh) {
        this.refresh = refresh;
    }

    /**
     * 获取请求对应的资源数据缓存标识
     *
     * @param requester 请求对象
     * @return 缓存标识
     */
    public final String getKey(Requester requester) {
        if (requester == null) {
            throw new IllegalArgumentException("Requester must not be null");
        }
        StringBuilder buffer = new StringBuilder("{").append(requester.getUri()).append("}{");
        if (requester.getUser() != null && !this.global) {
            buffer.append(requester.getUser()).append("}{");
        }
        Set names = requester.getParameterNames();
        if (!names.isEmpty()) {
            String[] keys = names.toArray(Strings.EMPTY_ARRAY);
            Arrays.sort(keys);
            for (int i = 0; i < keys.length; i++) {
                if (i > 0) {
                    buffer.append(',');
                }
                String key = keys[i];
                Object value = requester.getParameter(key);
                if (value instanceof Collection) {
                    Collection collection = (Collection) value;
                    if (!collection.isEmpty()) {
                        Object[] array = collection.toArray();
                        Arrays.sort(array);
                        for (Object v : array) {
                            buffer.append(key).append('=');
                            if (!Beans.isEmpty(v)) {
                                buffer.append(Strings.toString(v));
                            }
                        }
                    }
                } else if (value instanceof Object[]) {
                    Object[] array = (Object[]) value;
                    if (array.length > 0) {
                        Object[] copy = Arrays.copyOf(array, array.length);
                        Arrays.sort(copy);
                        for (Object v : copy) {
                            buffer.append(key).append('=');
                            if (!Beans.isEmpty(v)) {
                                buffer.append(Strings.toString(v));
                            }
                        }
                    }
                } else {
                    buffer.append(key).append('=');
                    if (!Beans.isEmpty(value)) {
                        buffer.append(Strings.toString(value));
                    }
                }
            }
        }
        return buffer.append('}').toString();
    }

    @Override
    public String toString() {
        return Beans.getValues(this).toString();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy