/************************************************************************************** * Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. * * http://aspectwerkz.codehaus.org * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the LGPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package org.codehaus.aspectwerkz.definition; import org.codehaus.aspectwerkz.expression.ExpressionInfo; import org.codehaus.aspectwerkz.transform.TransformationConstants; /** * Represents a deployment scope pointcut expression, that is used by the system to "prepare" the * join points that are picked out by this pointcut. Needed to allow hot-deployment of aspects * in a safe and predictable way. * <p/> * Can not and should not be created by the user only given to him from the framework. * * @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a> */ public final class DeploymentScope { private final String m_name; private final String m_expression; /** * System prepared pointcut that matches all. */ public static final DeploymentScope MATCH_ALL = new DeploymentScope( TransformationConstants.ASPECTWERKZ_PREFIX + "DeploymentScopes", "within(*..*)" ); /** * Creates a new pointcut, should only be created by the system. * * @param name * @param expression */ DeploymentScope(final String name, final String expression) { m_name = name; m_expression = expression; } /** * Returns the name of the pointcut. * * @return */ public String getName() { return m_name; } /** * Returns the expression as a string. * * @return */ public String getExpression() { return m_expression; } /** * Merges the scope expression with a new expression. Uses '&&' to merge them. * * @param expression * @return */ public ExpressionInfo newExpressionInfo(final ExpressionInfo expression) { return new ExpressionInfo( new StringBuffer(). append('('). append(expression.toString()). append(')'). append(" && "). append(m_expression). toString(), expression.getNamespace() ); } public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof DeploymentScope)) { return false; } final DeploymentScope deploymentScope = (DeploymentScope) o; if (!m_expression.equals(deploymentScope.m_expression)) { return false; } if (!m_name.equals(deploymentScope.m_name)) { return false; } return true; } public int hashCode() { int result; result = m_name.hashCode(); result = 29 * result + m_expression.hashCode(); return result; } }