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.definition;
    9
    10  import org.codehaus.aspectwerkz.expression.ExpressionInfo;
    11  import org.codehaus.aspectwerkz.transform.TransformationConstants;
    12
    13  /***
    14   * Represents a deployment scope pointcut expression, that is used by the system to "prepare" the
    15   * join points that are picked out by this pointcut. Needed to allow hot-deployment of aspects
    16   * in a safe and predictable way.
    17   * <p/>
    18   * Can not and should not be created by the user only given to him from the framework.
    19   *
    20   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
    21   */
    22  public final class DeploymentScope {
    23
    24      private final String m_name;
    25      private final String m_expression;
    26      /***
    27       * System prepared pointcut that matches all.
    28       */
    29      public static final DeploymentScope MATCH_ALL = new DeploymentScope(
    30              TransformationConstants.ASPECTWERKZ_PREFIX + "DeploymentScopes",
    31              "within(*..*)"
    32      );
    33
    34      /***
    35       * Creates a new pointcut, should only be created by the system.
    36       *
    37       * @param name
    38       * @param expression
    39       */
    40      DeploymentScope(final String name, final String expression) {
    41          m_name = name;
    42          m_expression = expression;
    43      }
    44
    45      /***
    46       * Returns the name of the pointcut.
    47       *
    48       * @return
    49       */
    50      public String getName() {
    51          return m_name;
    52      }
    53
    54      /***
    55       * Returns the expression as a string.
    56       *
    57       * @return
    58       */
    59      public String getExpression() {
    60          return m_expression;
    61      }
    62
    63      /***
    64       * Merges the scope expression with a new expression. Uses '&&' to merge them.
    65       *
    66       * @param expression
    67       * @return
    68       */
    69      public ExpressionInfo newExpressionInfo(final ExpressionInfo expression) {
    70          return new ExpressionInfo(
    71                  new StringBuffer().
    72                  append('(').
    73                  append(expression.toString()).
    74                  append(')').
    75                  append(" && ").
    76                  append(m_expression).
    77                  toString(),
    78                  expression.getNamespace()
    79          );
    80      }
    81
    82      public boolean equals(Object o) {
    83          if (this == o) {
    84              return true;
    85          }
    86          if (!(o instanceof DeploymentScope)) {
    87              return false;
    88          }
    89
    90          final DeploymentScope deploymentScope = (DeploymentScope) o;
    91
    92          if (!m_expression.equals(deploymentScope.m_expression)) {
    93              return false;
    94          }
    95          if (!m_name.equals(deploymentScope.m_name)) {
    96              return false;
    97          }
    98
    99          return true;
    100     }
    101
    102     public int hashCode() {
    103         int result;
    104         result = m_name.hashCode();
    105         result = 29 * result + m_expression.hashCode();
    106         return result;
    107     }
    108 }