///******************************************************************************* // * Copyright (c) 2004, 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.jface.bindings; // //import java.util.HashSet; //import java.util.Iterator; //import java.util.Set; // //import org.eclipse.core.commands.common.NamedHandleObject; //import org.eclipse.core.commands.common.NotDefinedException; //import org.eclipse.jface.util.Util; // ///** // * <p> // * An instance of <code>IScheme</code> is a handle representing a binding // * scheme as defined by the extension point <code>org.eclipse.ui.bindings</code>. // * The identifier of the handle is the identifier of the scheme being represented. // * </p> // * <p> // * An instance of <code>IScheme</code> can be obtained from an instance of // * <code>ICommandManager</code> for any identifier, whether or not a scheme // * with that identifier is defined in the plugin registry. // * </p> // * <p> // * The handle-based nature of this API allows it to work well with runtime // * plugin activation and deactivation. If a scheme is defined, that means that // * its corresponding plug-in is active. If the plug-in is then deactivated, the // * scheme will still exist but it will be undefined. An attempt to use an // * undefined scheme will result in a <code>NotDefinedException</code> // * being thrown. // * </p> // * <p> // * This class is not intended to be extended by clients. // * </p> // * // * @since 1.0 // * @see ISchemeListener // * @see org.eclipse.core.commands.CommandManager // */ //public final class Scheme extends NamedHandleObject implements Comparable { // // /** // * The collection of all objects listening to changes on this scheme. This // * value is <code>null</code> if there are no listeners. // */ // private Set listeners = null; // // /** // * The parent identifier for this scheme. This is the identifier of the // * scheme from which this scheme inherits some of its bindings. This value // * can be <code>null</code> if the scheme has no parent. // */ // private String parentId = null; // // /** // * Constructs a new instance of <code>Scheme</code> with an identifier. // * // * @param id // * The identifier to create; must not be <code>null</code>. // */ // Scheme(final String id) { // super(id); // } // // /** // * Registers an instance of <code>ISchemeListener</code> to listen for // * changes to attributes of this instance. // * // * @param schemeListener // * the instance of <code>ISchemeListener</code> to register. // * Must not be <code>null</code>. If an attempt is made to // * register an instance of <code>ISchemeListener</code> which // * is already registered with this instance, no operation is // * performed. // */ // public final void addSchemeListener(final ISchemeListener schemeListener) { // if (schemeListener == null) { // throw new NullPointerException("Can't add a null scheme listener."); //$NON-NLS-1$ // } // // if (listeners == null) { // listeners = new HashSet(); // } // // listeners.add(schemeListener); // } // // /* // * (non-Javadoc) // * // * @see java.lang.Comparable#compareTo(java.lang.Object) // */ // public final int compareTo(final Object object) { // final Scheme scheme = (Scheme) object; // int compareTo = Util.compare(this.id, scheme.id); // if (compareTo == 0) { // compareTo = Util.compare(this.name, scheme.name); // if (compareTo == 0) { // compareTo = Util.compare(this.parentId, scheme.parentId); // if (compareTo == 0) { // compareTo = Util.compare(this.description, // scheme.description); // if (compareTo == 0) { // compareTo = Util.compare(this.defined, scheme.defined); // } // } // } // } // // return compareTo; // } // // /** // * <p> // * Defines this scheme by giving it a name, and possibly a description and a // * parent identifier as well. The defined property for the scheme automatically // * becomes <code>true</code>. // * </p> // * <p> // * Notification is sent to all listeners that something has changed. // * </p> // * // * @param name // * The name of this scheme; must not be <code>null</code>. // * @param description // * The description for this scheme; may be <code>null</code>. // * @param parentId // * The parent identifier for this scheme; may be // * <code>null</code>. // */ // public final void define(final String name, final String description, // final String parentId) { // if (name == null) { // throw new NullPointerException( // "The name of a scheme cannot be null"); //$NON-NLS-1$ // } // // final boolean definedChanged = !this.defined; // this.defined = true; // // final boolean nameChanged = !Util.equals(this.name, name); // this.name = name; // // final boolean descriptionChanged = !Util.equals(this.description, // description); // this.description = description; // // final boolean parentIdChanged = !Util.equals(this.parentId, parentId); // this.parentId = parentId; // // fireSchemeChanged(new SchemeEvent(this, definedChanged, nameChanged, // descriptionChanged, parentIdChanged)); // } // // /** // * Notifies all listeners that this scheme has changed. This sends the given // * event to all of the listeners, if any. // * // * @param event // * The event to send to the listeners; must not be // * <code>null</code>. // */ // private final void fireSchemeChanged(final SchemeEvent event) { // if (event == null) { // throw new NullPointerException( // "Cannot send a null event to listeners."); //$NON-NLS-1$ // } // // if (listeners == null) { // return; // } // // final Iterator listenerItr = listeners.iterator(); // while (listenerItr.hasNext()) { // final ISchemeListener listener = (ISchemeListener) listenerItr // .next(); // listener.schemeChanged(event); // } // } // // /** // * <p> // * Returns the identifier of the parent of the scheme represented by this // * handle. // * </p> // * <p> // * Notification is sent to all registered listeners if this attribute // * changes. // * </p> // * // * @return the identifier of the parent of the scheme represented by this // * handle. May be <code>null</code>. // * @throws NotDefinedException // * if the scheme represented by this handle is not defined. // */ // public final String getParentId() throws NotDefinedException { // if (!defined) { // throw new NotDefinedException( // "Cannot get the parent identifier from an undefined scheme. " //$NON-NLS-1$ // + id); // } // // return parentId; // } // // /** // * Unregisters an instance of <code>ISchemeListener</code> listening for // * changes to attributes of this instance. // * // * @param schemeListener // * the instance of <code>ISchemeListener</code> to unregister. // * Must not be <code>null</code>. If an attempt is made to // * unregister an instance of <code>ISchemeListener</code> which // * is not already registered with this instance, no operation is // * performed. // */ // public final void removeSchemeListener(final ISchemeListener schemeListener) { // if (schemeListener == null) { // throw new NullPointerException("Cannot remove a null listener."); //$NON-NLS-1$ // } // // if (listeners == null) { // return; // } // // listeners.remove(schemeListener); // // if (listeners.isEmpty()) { // listeners = null; // } // } // // /** // * The string representation of this command -- for debugging purposes only. // * This string should not be shown to an end user. // * // * @return The string representation; never <code>null</code>. // */ // public final String toString() { // if (string == null) { // final StringBuffer stringBuffer = new StringBuffer(); // stringBuffer.append("Scheme("); //$NON-NLS-1$ // stringBuffer.append(id); // stringBuffer.append(','); // stringBuffer.append(name); // stringBuffer.append(','); // stringBuffer.append(description); // stringBuffer.append(','); // stringBuffer.append(parentId); // stringBuffer.append(','); // stringBuffer.append(defined); // stringBuffer.append(')'); // string = stringBuffer.toString(); // } // return string; // } // // /** // * Makes this scheme become undefined. This has the side effect of changing // * the name, description and parent identifier to <code>null</code>. // * Notification is sent to all listeners. // */ // public final void undefine() { // string = null; // // final boolean definedChanged = defined; // defined = false; // // final boolean nameChanged = name != null; // name = null; // // final boolean descriptionChanged = description != null; // description = null; // // final boolean parentIdChanged = parentId != null; // parentId = null; // // fireSchemeChanged(new SchemeEvent(this, definedChanged, nameChanged, // descriptionChanged, parentIdChanged)); // } //}