001: /**************************************************************************************
002: * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
003: * http://aspectwerkz.codehaus.org *
004: * ---------------------------------------------------------------------------------- *
005: * The software in this package is published under the terms of the LGPL license *
006: * a copy of which has been included with this distribution in the license.txt file. *
007: **************************************************************************************/package org.codehaus.aspectwerkz.definition;
008:
009: import org.codehaus.aspectwerkz.expression.ExpressionInfo;
010: import org.codehaus.aspectwerkz.transform.TransformationConstants;
011:
012: /**
013: * Represents a deployment scope pointcut expression, that is used by the system to "prepare" the
014: * join points that are picked out by this pointcut. Needed to allow hot-deployment of aspects
015: * in a safe and predictable way.
016: * <p/>
017: * Can not and should not be created by the user only given to him from the framework.
018: *
019: * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
020: */
021: public final class DeploymentScope {
022:
023: private final String m_name;
024: private final String m_expression;
025: /**
026: * System prepared pointcut that matches all.
027: */
028: public static final DeploymentScope MATCH_ALL = new DeploymentScope(
029: TransformationConstants.ASPECTWERKZ_PREFIX
030: + "DeploymentScopes", "within(*..*)");
031:
032: /**
033: * Creates a new pointcut, should only be created by the system.
034: *
035: * @param name
036: * @param expression
037: */
038: DeploymentScope(final String name, final String expression) {
039: m_name = name;
040: m_expression = expression;
041: }
042:
043: /**
044: * Returns the name of the pointcut.
045: *
046: * @return
047: */
048: public String getName() {
049: return m_name;
050: }
051:
052: /**
053: * Returns the expression as a string.
054: *
055: * @return
056: */
057: public String getExpression() {
058: return m_expression;
059: }
060:
061: /**
062: * Merges the scope expression with a new expression. Uses '&&' to merge them.
063: *
064: * @param expression
065: * @return
066: */
067: public ExpressionInfo newExpressionInfo(
068: final ExpressionInfo expression) {
069: return new ExpressionInfo(new StringBuffer().append('(')
070: .append(expression.toString()).append(')').append(
071: " && ").append(m_expression).toString(),
072: expression.getNamespace());
073: }
074:
075: public boolean equals(Object o) {
076: if (this == o) {
077: return true;
078: }
079: if (!(o instanceof DeploymentScope)) {
080: return false;
081: }
082:
083: final DeploymentScope deploymentScope = (DeploymentScope) o;
084:
085: if (!m_expression.equals(deploymentScope.m_expression)) {
086: return false;
087: }
088: if (!m_name.equals(deploymentScope.m_name)) {
089: return false;
090: }
091:
092: return true;
093: }
094:
095: public int hashCode() {
096: int result;
097: result = m_name.hashCode();
098: result = 29 * result + m_expression.hashCode();
099: return result;
100: }
101: }
|