001: /*******************************************************************************
002: * Copyright (c) 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: ******************************************************************************/package org.eclipse.ui.internal.expressions;
011:
012: import org.eclipse.core.expressions.EvaluationResult;
013: import org.eclipse.core.expressions.ExpressionInfo;
014: import org.eclipse.core.expressions.IEvaluationContext;
015: import org.eclipse.core.runtime.CoreException;
016: import org.eclipse.ui.ISources;
017: import org.eclipse.ui.IWorkbenchWindow;
018: import org.eclipse.ui.internal.registry.IActionSetDescriptor;
019:
020: /**
021: * <p>
022: * An expression that evaluates whether a particular action set is active.
023: * </p>
024: * <p>
025: * This class is not intended for use outside of the
026: * <code>org.eclipse.ui.workbench</code> plug-in.
027: * </p>
028: *
029: * @since 3.2
030: */
031: public final class LegacyActionSetExpression extends
032: WorkbenchWindowExpression {
033:
034: /**
035: * The seed for the hash code for all schemes.
036: */
037: private static final int HASH_INITIAL = LegacyActionSetExpression.class
038: .getName().hashCode();
039:
040: /**
041: * The identifier of the action set that must be active for this expression
042: * to evaluate to <code>true</code>. This value is never
043: * <code>null</code>.
044: */
045: private final String actionSetId;
046:
047: /**
048: * Constructs a new instance of {@link LegacyActionSetExpression}.
049: *
050: * @param actionSetId
051: * The identifier of the action set that must be active for this
052: * expression to evaluate to <code>true</code>; must not be
053: * <code>null</code>.
054: * @param window
055: * The workbench window in which this handler should be active.
056: * This avoids conflicts between handlers from different windows.
057: * This should not be <code>null</code>.
058: */
059: public LegacyActionSetExpression(final String actionSetId,
060: final IWorkbenchWindow window) {
061: super (window);
062: if (actionSetId == null) {
063: throw new NullPointerException(
064: "The action set identifier cannot be null"); //$NON-NLS-1$
065: }
066: this .actionSetId = actionSetId;
067: }
068:
069: public final void collectExpressionInfo(final ExpressionInfo info) {
070: super .collectExpressionInfo(info);
071: info.addVariableNameAccess(ISources.ACTIVE_ACTION_SETS_NAME);
072: }
073:
074: protected final int computeHhashCode() {
075: int hashCode = HASH_INITIAL * HASH_FACTOR
076: + hashCode(getWindow());
077: hashCode = hashCode * HASH_FACTOR + hashCode(actionSetId);
078: return hashCode;
079: }
080:
081: public final boolean equals(final Object object) {
082: if (object instanceof LegacyActionSetExpression) {
083: final LegacyActionSetExpression that = (LegacyActionSetExpression) object;
084: return equals(this .actionSetId, that.actionSetId)
085: && equals(this .getWindow(), that.getWindow());
086: }
087:
088: return false;
089: }
090:
091: public final EvaluationResult evaluate(
092: final IEvaluationContext context) throws CoreException {
093: final EvaluationResult result = super .evaluate(context);
094: if (result == EvaluationResult.FALSE) {
095: return result;
096: }
097:
098: // Check the action sets.
099: final Object variable = context
100: .getVariable(ISources.ACTIVE_ACTION_SETS_NAME);
101: if (variable instanceof IActionSetDescriptor[]) {
102: final IActionSetDescriptor[] descriptors = (IActionSetDescriptor[]) variable;
103: for (int i = 0; i < descriptors.length; i++) {
104: final IActionSetDescriptor descriptor = descriptors[i];
105: final String currentId = descriptor.getId();
106: if (actionSetId.equals(currentId)) {
107: return EvaluationResult.TRUE;
108: }
109: }
110: }
111:
112: return EvaluationResult.FALSE;
113: }
114:
115: public final String toString() {
116: final StringBuffer buffer = new StringBuffer();
117: buffer.append("ActionSetExpression("); //$NON-NLS-1$
118: buffer.append(actionSetId);
119: buffer.append(',');
120: buffer.append(getWindow());
121: buffer.append(')');
122: return buffer.toString();
123: }
124: }
|