001// Copyright 2014 The Apache Software Foundation 002// 003// Licensed under the Apache License, Version 2.0 (the "License"); 004// you may not use this file except in compliance with the License. 005// You may obtain a copy of the License at 006// 007// http://www.apache.org/licenses/LICENSE-2.0 008// 009// Unless required by applicable law or agreed to in writing, software 010// distributed under the License is distributed on an "AS IS" BASIS, 011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012// See the License for the specific language governing permissions and 013// limitations under the License. 014package org.apache.tapestry5.jcache.internal; 015 016import java.lang.annotation.Annotation; 017import java.lang.reflect.Method; 018 019import org.apache.tapestry5.plastic.MethodInvocation; 020import org.jsr107.ri.annotations.AbstractInternalCacheInvocationContext; 021import org.jsr107.ri.annotations.StaticCacheInvocationContext; 022 023/** 024 * Tapestry-IoC specific cache invocation context using {@link MethodInvocation} 025 * 026 * @param <A> 027 * The type of annotation this context information is for. One of 028 * {@link javax.cache.annotation.CacheResult}, {@link javax.cache.annotation.CachePut}, 029 * {@link javax.cache.annotation.CacheRemove}, or 030 * {@link javax.cache.annotation.CacheRemoveAll}. 031 */ 032public class TapestryIoCInternalCacheInvocationContext<A extends Annotation> extends 033 AbstractInternalCacheInvocationContext<MethodInvocation, A> 034{ 035 036 /** 037 * Create new cache key invocation context for the static context and 038 * invocation 039 * 040 * @param staticCacheInvocationContext 041 * Static information about the invoked method 042 * @param invocation 043 * The AOP Alliance invocation context 044 */ 045 public TapestryIoCInternalCacheInvocationContext( 046 StaticCacheInvocationContext<A> staticCacheInvocationContext, 047 MethodInvocation invocation) 048 { 049 super(staticCacheInvocationContext, invocation); 050 } 051 052 @Override 053 protected Object[] getParameters(MethodInvocation invocation) 054 { 055 Object[] parameters = new Object[invocation.getMethod().getParameterTypes().length]; 056 for (int i = 0; i < parameters.length; i++) 057 { 058 parameters[i] = invocation.getParameter(i); 059 } 060 return parameters; 061 } 062 063 @Override 064 protected Method getMethod(MethodInvocation invocation) 065 { 066 return invocation.getMethod(); 067 } 068 069 @Override 070 protected Object getTarget(MethodInvocation invocation) 071 { 072 return invocation.getInstance(); 073 } 074 075}