Copyright (c) 2005, 2015 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2005, 2015 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.core.commands; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.Objects; import org.eclipse.core.commands.common.NamedHandleObject;

A logical group for a set of commands. A command belongs to exactly one category. The category has no functional effect, but may be used in graphical tools that want to group the set of commands somehow.

Since:3.1
/** * <p> * A logical group for a set of commands. A command belongs to exactly one * category. The category has no functional effect, but may be used in graphical * tools that want to group the set of commands somehow. * </p> * * @since 3.1 */
public final class Category extends NamedHandleObject {
A collection of objects listening to changes to this category. This collection is null if there are no listeners.
/** * A collection of objects listening to changes to this category. This * collection is <code>null</code> if there are no listeners. */
private Collection<ICategoryListener> categoryListeners;
Constructs a new instance of Category based on the given identifier. When a category is first constructed, it is undefined. Category should only be constructed by the CommandManager to ensure that identifier remain unique.
Params:
  • id – The identifier for the category. This value must not be null, and must be unique amongst all categories.
/** * Constructs a new instance of <code>Category</code> based on the given * identifier. When a category is first constructed, it is undefined. * Category should only be constructed by the <code>CommandManager</code> * to ensure that identifier remain unique. * * @param id * The identifier for the category. This value must not be * <code>null</code>, and must be unique amongst all * categories. */
Category(final String id) { super(id); }
Adds a listener to this category that will be notified when this category's state changes.
Params:
  • categoryListener – The listener to be added; must not be null.
/** * Adds a listener to this category that will be notified when this * category's state changes. * * @param categoryListener * The listener to be added; must not be <code>null</code>. */
public final void addCategoryListener( final ICategoryListener categoryListener) { if (categoryListener == null) { throw new NullPointerException(); } if (categoryListeners == null) { categoryListeners = new ArrayList<>(); } if (!categoryListeners.contains(categoryListener)) { categoryListeners.add(categoryListener); } }

Defines this category by giving it a name, and possibly a description as well. The defined property automatically becomes true.

Notification is sent to all listeners that something has changed.

Params:
  • name – The name of this command; must not be null.
  • description – The description for this command; may be null.
/** * <p> * Defines this category by giving it a name, and possibly a description as * well. The defined property automatically becomes <code>true</code>. * </p> * <p> * Notification is sent to all listeners that something has changed. * </p> * * @param name * The name of this command; must not be <code>null</code>. * @param description * The description for this command; may be <code>null</code>. */
public final void define(final String name, final String description) { if (name == null) { throw new NullPointerException("The name of a command cannot be null"); //$NON-NLS-1$ } final boolean definedChanged = !this.defined; this.defined = true; final boolean nameChanged = !Objects.equals(this.name, name); this.name = name; final boolean descriptionChanged = !Objects.equals(this.description, description); this.description = description; fireCategoryChanged(new CategoryEvent(this, definedChanged, descriptionChanged, nameChanged)); }
Notifies the listeners for this category that it has changed in some way.
Params:
  • categoryEvent – The event to send to all of the listener; must not be null.
/** * Notifies the listeners for this category that it has changed in some way. * * @param categoryEvent * The event to send to all of the listener; must not be * <code>null</code>. */
private final void fireCategoryChanged(final CategoryEvent categoryEvent) { if (categoryEvent == null) { throw new NullPointerException(); } if (categoryListeners != null) { final Iterator<ICategoryListener> listenerItr = categoryListeners.iterator(); while (listenerItr.hasNext()) { final ICategoryListener listener = listenerItr.next(); listener.categoryChanged(categoryEvent); } } }
Removes a listener from this category.
Params:
  • categoryListener – The listener to be removed; must not be null.
/** * Removes a listener from this category. * * @param categoryListener * The listener to be removed; must not be <code>null</code>. * */
public final void removeCategoryListener( final ICategoryListener categoryListener) { if (categoryListener == null) { throw new NullPointerException(); } if (categoryListeners != null) { categoryListeners.remove(categoryListener); } } @Override public String toString() { if (string == null) { final StringBuilder stringBuffer = new StringBuilder("Category("); //$NON-NLS-1$ stringBuffer.append(id); stringBuffer.append(','); stringBuffer.append(name); stringBuffer.append(','); stringBuffer.append(description); stringBuffer.append(','); stringBuffer.append(defined); stringBuffer.append(')'); string = stringBuffer.toString(); } return string; } @Override public void undefine() { string = null; final boolean definedChanged = defined; defined = false; final boolean nameChanged = name != null; name = null; final boolean descriptionChanged = description != null; description = null; fireCategoryChanged(new CategoryEvent(this, definedChanged, descriptionChanged, nameChanged)); } }