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 }