blob: 1f6020bce1f95779a0f5862e204d05abdf4b2fc2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.commands;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.internal.util.Util;
/**
* </p>
* An instance of this class represents a request to handle a command. A handler
* submission specifies a list of conditions under which it would be appropriate
* for a particular command to have a particular handler. These conditions
* include things like the active part or the active shell. So, it is possible
* to say things like: "when my part is active, please consider calling these
* classes when you want to perform a cut, copy or paste".
* </p>
* <p>
* The workbench considers all of the submissions it has received and choses the
* ones it views as the best possible match.
* </p>
* <p>
* This class is not intended to be extended by clients.
* </p>
* <p>
* Note: this class has a natural ordering that is inconsistent with equals.
* </p>
*
* @since 3.0
* @see org.eclipse.ui.commands.IWorkbenchCommandSupport
* @deprecated Please use <code>IHandlerService.activateHandler</code>
* instead.
* @see org.eclipse.ui.handlers.IHandlerService
*/
public final class HandlerSubmission implements Comparable {
/**
* The part identifier for the part that should be active before this
* submission can be considered. This value can be <code>null</code>, which
* indicates that it should match any part.
*/
private final String activePartId;
/**
* The shell that must be active before this submission can be considered.
* This value can be <code>null</code>, which indicates that it should match
* any shell.
*/
private final Shell activeShell;
/**
* The workbench site that must be active before this submission can be
* considered. This value can be <code>null</code>, which indicates that it
* should match an workbench part site.
*/
private final IWorkbenchPartSite activeWorkbenchPartSite;
/**
* The identifier for the command which the submitted handler handles. This
* value cannot be <code>null</code>.
*/
private final String commandId;
/**
* The handler being submitted. This value cannot be <code>null</code>.
*/
private final IHandler handler;
/**
* The priority for this submission. In the event of all other factors
* being equal, the priority will be considered in an attempt to resolve
* conflicts. This value cannot be <code>null</code>.
*/
private final Priority priority;
/**
* A lazily computed cache of the string representation of this submission.
* This value is computed once; before it is computed, it is
* <code>null</code>.
*/
private transient String string;
/**
* Creates a new instance of this class.
*
* @param activePartId
* the identifier of the part that must be active for this
* request to be considered. May be <code>null</code>.
* @param activeShell
* the shell that must be active for this request to be
* considered. May be <code>null</code>.
* @param activeWorkbenchPartSite
* the workbench part site of the part that must be active for
* this request to be considered. May be <code>null</code>.
* @param commandId
* the identifier of the command to be handled. Must not be
* <code>null</code>.
* @param handler
* the handler. Must not be <code>null</code>.
* @param priority
* the priority. Must not be <code>null</code>.
*/
public HandlerSubmission(String activePartId, Shell activeShell,
IWorkbenchPartSite activeWorkbenchPartSite, String commandId,
IHandler handler, Priority priority) {
if (commandId == null || handler == null || priority == null) {
throw new NullPointerException();
}
this.activePartId = activePartId;
this.activeShell = activeShell;
this.activeWorkbenchPartSite = activeWorkbenchPartSite;
this.commandId = commandId;
this.handler = handler;
this.priority = priority;
}
/**
* @see Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Object object) {
HandlerSubmission castedObject = (HandlerSubmission) object;
int compareTo = Util.compare(activeWorkbenchPartSite,
castedObject.activeWorkbenchPartSite);
if (compareTo == 0) {
compareTo = Util.compare(activePartId, castedObject.activePartId);
if (compareTo == 0) {
compareTo = Util.compare(activeShell, castedObject.activeShell);
if (compareTo == 0) {
compareTo = Util.compare(priority, castedObject.priority);
if (compareTo == 0) {
compareTo = Util.compare(commandId,
castedObject.commandId);
if (compareTo == 0) {
compareTo = Util.compare(handler,
castedObject.handler);
}
}
}
}
}
return compareTo;
}
/**
* Returns the identifier of the part that must be active for this request
* to be considered.
*
* @return the identifier of the part that must be active for this request
* to be considered. May be <code>null</code>.
*/
public String getActivePartId() {
return activePartId;
}
/**
* Returns the shell that must be active for this request to be considered.
*
* @return the shell that must be active for this request to be considered.
* May be <code>null</code>.
*/
public Shell getActiveShell() {
return activeShell;
}
/**
* Returns the workbench part site of the part that must be active for this
* request to be considered.
*
* @return the workbench part site of the part that must be active for this
* request to be considered. May be <code>null</code>.
*/
public IWorkbenchPartSite getActiveWorkbenchPartSite() {
return activeWorkbenchPartSite;
}
/**
* Returns the identifier of the command to be handled.
*
* @return the identifier of the command to be handled. Guaranteed not to be
* <code>null</code>.
*/
public String getCommandId() {
return commandId;
}
/**
* Returns the handler.
*
* @return the handler. Guaranteed not to be <code>null</code>.
*/
public IHandler getHandler() {
return handler;
}
/**
* Returns the priority.
*
* @return the priority. Guaranteed not to be <code>null</code>.
*/
public Priority getPriority() {
return priority;
}
/**
* @see Object#toString()
*/
public String toString() {
if (string == null) {
final StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("[activePartId="); //$NON-NLS-1$
stringBuffer.append(activePartId);
stringBuffer.append(",activeShell="); //$NON-NLS-1$
stringBuffer.append(activeShell);
stringBuffer.append(",activeWorkbenchSite="); //$NON-NLS-1$
stringBuffer.append(activeWorkbenchPartSite);
stringBuffer.append(",commandId="); //$NON-NLS-1$
stringBuffer.append(commandId);
stringBuffer.append(",handler="); //$NON-NLS-1$
stringBuffer.append(handler);
stringBuffer.append(",priority="); //$NON-NLS-1$
stringBuffer.append(priority);
stringBuffer.append(']');
string = stringBuffer.toString();
}
return string;
}
}