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 }