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 }