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 }