org.springframework.cache.jcache.interceptor.DefaultCacheInvocationContext Maven / Gradle / Ivy
/*
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cache.jcache.interceptor;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Set;
import javax.cache.annotation.CacheInvocationContext;
import javax.cache.annotation.CacheInvocationParameter;
import org.springframework.cache.interceptor.CacheOperationInvocationContext;
/**
* The default {@link CacheOperationInvocationContext} implementation used
* by all interceptors. Also implements {@link CacheInvocationContext} to
* act as a proper bridge when calling JSR-107 {@link javax.cache.annotation.CacheResolver}
*
* @author Stephane Nicoll
* @since 4.1
* @param the annotation type
*/
class DefaultCacheInvocationContext
implements CacheInvocationContext, CacheOperationInvocationContext> {
private final JCacheOperation operation;
private final Object target;
private final Object[] args;
private final CacheInvocationParameter[] allParameters;
public DefaultCacheInvocationContext(JCacheOperation operation, Object target, Object[] args) {
this.operation = operation;
this.target = target;
this.args = args;
this.allParameters = operation.getAllParameters(args);
}
@Override
public JCacheOperation getOperation() {
return this.operation;
}
@Override
public Method getMethod() {
return this.operation.getMethod();
}
@Override
public Object[] getArgs() {
return this.args.clone();
}
@Override
public Set getAnnotations() {
return this.operation.getAnnotations();
}
@Override
public A getCacheAnnotation() {
return this.operation.getCacheAnnotation();
}
@Override
public String getCacheName() {
return this.operation.getCacheName();
}
@Override
public Object getTarget() {
return this.target;
}
@Override
public CacheInvocationParameter[] getAllParameters() {
return this.allParameters.clone();
}
@Override
public T unwrap(Class cls) {
throw new IllegalArgumentException("Cannot unwrap to " + cls);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("CacheInvocationContext{");
sb.append("operation=").append(this.operation);
sb.append(", target=").append(this.target);
sb.append(", args=").append(Arrays.toString(this.args));
sb.append(", allParameters=").append(Arrays.toString(this.allParameters));
sb.append('}');
return sb.toString();
}
}