KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > aop > joinpoint > FieldReadInvocation


1 /*
2   * JBoss, Home of Professional Open Source
3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
4   * by the @authors tag. See the copyright.txt in the distribution for a
5   * full listing of individual contributors.
6   *
7   * This is free software; you can redistribute it and/or modify it
8   * under the terms of the GNU Lesser General Public License as
9   * published by the Free Software Foundation; either version 2.1 of
10   * the License, or (at your option) any later version.
11   *
12   * This software is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15   * Lesser General Public License for more details.
16   *
17   * You should have received a copy of the GNU Lesser General Public
18   * License along with this software; if not, write to the Free
19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21   */

22 package org.jboss.aop.joinpoint;
23
24 import org.jboss.aop.FieldInfo;
25 import org.jboss.aop.advice.Interceptor;
26
27 import java.lang.reflect.Field JavaDoc;
28
29
30 /**
31  * This is a helper wrapper class for an Invocation object.
32  * It is used to add or get values or metadata that pertains to
33  * an AOP method invocation.
34  *
35  * @author <a HREF="mailto:bill@jboss.org">Bill Burke</a>
36  * @version $Revision: 46058 $
37  */

38 public class FieldReadInvocation extends FieldInvocation
39 {
40    private static final long serialVersionUID = 3337041720097890861L;
41
42    public FieldReadInvocation(Field JavaDoc field, int index, Interceptor[] interceptors)
43    {
44       super(field, index, interceptors);
45    }
46
47    protected FieldReadInvocation(Interceptor[] interceptors)
48    {
49       super(interceptors);
50    }
51    
52    protected FieldReadInvocation(FieldInfo info, Interceptor[] interceptors)
53    {
54       super(info, interceptors);
55    }
56
57    /**
58     * Invoke on the next interceptor in the chain. If this is already
59     * the end of the chain, reflection will call the constructor, field, or
60     * method you are invoking on.
61     */

62    public Object JavaDoc invokeNext() throws Throwable JavaDoc
63    {
64       if (interceptors != null && currentInterceptor < interceptors.length)
65       {
66          try
67          {
68             return interceptors[currentInterceptor++].invoke(this);
69          }
70          finally
71          {
72             // so that interceptors like clustering can reinvoke down the chain
73
currentInterceptor--;
74          }
75       }
76
77       return invokeTarget();
78    }
79
80    /**
81     * Invokes the target joinpoint for this invocation skipping any subsequent
82     * interceptors in the chain.
83     */

84    public Object JavaDoc invokeTarget() throws Throwable JavaDoc
85    {
86       return field.get(getTargetObject());
87    }
88
89    /**
90     * Get a wrapper invocation object that can insert a new chain of interceptors
91     * at runtime to the invocation flow. CFlow makes use of this.
92     * When the wrapper object finishes its invocation chain it delegates back to
93     * the wrapped invocation.
94     * @param newchain
95     * @return
96     */

97    public Invocation getWrapper(Interceptor[] newchain)
98    {
99       FieldReadInvocationWrapper wrapper = new FieldReadInvocationWrapper(this, newchain);
100       return wrapper;
101    }
102
103    /**
104     * Copies complete state of Invocation object.
105     * @return
106     */

107    public Invocation copy()
108    {
109       FieldReadInvocation wrapper = new FieldReadInvocation(field, index, interceptors);
110       wrapper.setAdvisor(this.getAdvisor());
111       wrapper.setTargetObject(this.getTargetObject());
112       wrapper.currentInterceptor = this.currentInterceptor;
113       wrapper.metadata = this.metadata;
114       wrapper.instanceResolver = this.instanceResolver;
115       return wrapper;
116    }
117 }
118
Popular Tags