View Javadoc

1   /***************************************************************************************
2    * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved.                 *
3    * http://aspectwerkz.codehaus.org                                                    *
4    * ---------------------------------------------------------------------------------- *
5    * The software in this package is published under the terms of the LGPL license      *
6    * a copy of which has been included with this distribution in the license.txt file.  *
7    **************************************************************************************/
8   package org.codehaus.aspectwerkz.joinpoint.management;
9   
10  import java.util.List;
11  import java.util.ArrayList;
12  
13  import org.codehaus.aspectwerkz.aspect.AdviceInfo;
14  import org.codehaus.aspectwerkz.aspect.AdviceInfo;
15  import org.codehaus.aspectwerkz.aspect.AdviceInfo;
16  
17  /***
18   * Container for the advice infos that belongs to a specific join point.
19   *
20   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
21   * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
22   */
23  public class AdviceInfoContainer {
24  
25      /***
26       * Null AdviceInfoContainer instance
27       */
28      public static final AdviceInfoContainer NULL;
29  
30      static {
31          NULL = new AdviceInfoContainer(
32                  new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList()
33          );
34      }
35  
36      private final AdviceInfo[] m_aroundAdvices;
37      private final AdviceInfo[] m_beforeAdvices;
38      private final AdviceInfo[] m_afterFinallyAdvices;
39      private final AdviceInfo[] m_afterReturningAdvices;
40      private final AdviceInfo[] m_afterThrowingAdvices;
41  
42      /***
43       * Creates a advice info container.
44       *
45       * @param aroundAdvices
46       * @param beforeAdvices
47       * @param afterFinallyAdvices
48       * @param afterReturningAdvices
49       * @param afterThrowingAdvices
50       */
51      public AdviceInfoContainer(final List aroundAdvices,
52                                 final List beforeAdvices,
53                                 final List afterFinallyAdvices,
54                                 final List afterReturningAdvices,
55                                 final List afterThrowingAdvices) {
56          m_aroundAdvices = (AdviceInfo[]) aroundAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
57          m_beforeAdvices = (AdviceInfo[]) beforeAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
58          m_afterFinallyAdvices = (AdviceInfo[]) afterFinallyAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
59          m_afterReturningAdvices = (AdviceInfo[]) afterReturningAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
60          m_afterThrowingAdvices = (AdviceInfo[]) afterThrowingAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
61      }
62  
63      /***
64       * Returns the around advice infos.
65       *
66       * @return
67       */
68      public AdviceInfo[] getAroundAdviceInfos() {
69          return m_aroundAdvices;
70      }
71  
72      /***
73       * Returns the before advice infos.
74       *
75       * @return
76       */
77      public AdviceInfo[] getBeforeAdviceInfos() {
78          return m_beforeAdvices;
79      }
80  
81      /***
82       * Returns the after finally advice infos.
83       *
84       * @return
85       */
86      public AdviceInfo[] getAfterFinallyAdviceInfos() {
87          return m_afterFinallyAdvices;
88      }
89  
90      /***
91       * Returns the after returning advice infos.
92       *
93       * @return
94       */
95      public AdviceInfo[] getAfterReturningAdviceInfos() {
96          return m_afterReturningAdvices;
97      }
98  
99      /***
100      * Returns the after throwing advice infos.
101      *
102      * @return
103      */
104     public AdviceInfo[] getAfterThrowingAdviceInfos() {
105         return m_afterThrowingAdvices;
106     }
107 
108     /***
109      * Return all advice infos.
110      *
111      * @return
112      */
113     public AdviceInfo[] getAllAdviceInfos() {
114         int size = m_beforeAdvices.length + m_aroundAdvices.length + m_afterReturningAdvices.length
115                     + m_afterThrowingAdvices.length + m_afterFinallyAdvices.length;
116         AdviceInfo[] advices = new AdviceInfo[size];
117 
118         int destPos = 0;
119         System.arraycopy(m_beforeAdvices, 0, advices, destPos, m_beforeAdvices.length);
120         destPos += m_beforeAdvices.length;
121         System.arraycopy(m_aroundAdvices, 0, advices, destPos, m_aroundAdvices.length);
122         destPos += m_aroundAdvices.length;
123         System.arraycopy(m_afterReturningAdvices, 0, advices, destPos, m_afterReturningAdvices.length);
124         destPos += m_afterReturningAdvices.length;
125         System.arraycopy(m_afterThrowingAdvices, 0, advices, destPos, m_afterThrowingAdvices.length);
126         destPos += m_afterThrowingAdvices.length;
127         System.arraycopy(m_afterFinallyAdvices, 0, advices, destPos, m_afterFinallyAdvices.length);
128         destPos += m_afterFinallyAdvices.length;
129 
130         return advices;
131     }
132 
133 }