/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package org.codehaus.aspectwerkz.joinpoint.management;
import java.util.List;
import java.util.ArrayList;
import org.codehaus.aspectwerkz.aspect.AdviceInfo;
import org.codehaus.aspectwerkz.aspect.AdviceInfo;
import org.codehaus.aspectwerkz.aspect.AdviceInfo;
/**
* Container for the advice infos that belongs to a specific join point.
*
* @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a>
* @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
public class AdviceInfoContainer {
/**
* Null AdviceInfoContainer instance
*/
public static final AdviceInfoContainer NULL;
static {
NULL = new AdviceInfoContainer(
new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList()
);
}
private final AdviceInfo[] m_aroundAdvices;
private final AdviceInfo[] m_beforeAdvices;
private final AdviceInfo[] m_afterFinallyAdvices;
private final AdviceInfo[] m_afterReturningAdvices;
private final AdviceInfo[] m_afterThrowingAdvices;
/**
* Creates a advice info container.
*
* @param aroundAdvices
* @param beforeAdvices
* @param afterFinallyAdvices
* @param afterReturningAdvices
* @param afterThrowingAdvices
*/
public AdviceInfoContainer(final List aroundAdvices,
final List beforeAdvices,
final List afterFinallyAdvices,
final List afterReturningAdvices,
final List afterThrowingAdvices) {
m_aroundAdvices = (AdviceInfo[]) aroundAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
m_beforeAdvices = (AdviceInfo[]) beforeAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
m_afterFinallyAdvices = (AdviceInfo[]) afterFinallyAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
m_afterReturningAdvices = (AdviceInfo[]) afterReturningAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
m_afterThrowingAdvices = (AdviceInfo[]) afterThrowingAdvices.toArray(AdviceInfo.EMPTY_ADVICE_INFO_ARRAY);
}
/**
* Returns the around advice infos.
*
* @return
*/
public AdviceInfo[] getAroundAdviceInfos() {
return m_aroundAdvices;
}
/**
* Returns the before advice infos.
*
* @return
*/
public AdviceInfo[] getBeforeAdviceInfos() {
return m_beforeAdvices;
}
/**
* Returns the after finally advice infos.
*
* @return
*/
public AdviceInfo[] getAfterFinallyAdviceInfos() {
return m_afterFinallyAdvices;
}
/**
* Returns the after returning advice infos.
*
* @return
*/
public AdviceInfo[] getAfterReturningAdviceInfos() {
return m_afterReturningAdvices;
}
/**
* Returns the after throwing advice infos.
*
* @return
*/
public AdviceInfo[] getAfterThrowingAdviceInfos() {
return m_afterThrowingAdvices;
}
/**
* Return all advice infos.
*
* @return
*/
public AdviceInfo[] getAllAdviceInfos() {
int size = m_beforeAdvices.length + m_aroundAdvices.length + m_afterReturningAdvices.length
+ m_afterThrowingAdvices.length + m_afterFinallyAdvices.length;
AdviceInfo[] advices = new AdviceInfo[size];
int destPos = 0;
System.arraycopy(m_beforeAdvices, 0, advices, destPos, m_beforeAdvices.length);
destPos += m_beforeAdvices.length;
System.arraycopy(m_aroundAdvices, 0, advices, destPos, m_aroundAdvices.length);
destPos += m_aroundAdvices.length;
System.arraycopy(m_afterReturningAdvices, 0, advices, destPos, m_afterReturningAdvices.length);
destPos += m_afterReturningAdvices.length;
System.arraycopy(m_afterThrowingAdvices, 0, advices, destPos, m_afterThrowingAdvices.length);
destPos += m_afterThrowingAdvices.length;
System.arraycopy(m_afterFinallyAdvices, 0, advices, destPos, m_afterFinallyAdvices.length);
destPos += m_afterFinallyAdvices.length;
return advices;
}
}