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 }