| /******************************************************************************* |
| * Copyright (c) 2005, 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.internal; |
| |
| import java.util.ArrayList; |
| |
| import org.eclipse.core.runtime.Assert; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.ui.IMemento; |
| import org.eclipse.ui.IPersistableElement; |
| import org.eclipse.ui.IWorkingSet; |
| import org.eclipse.ui.IWorkingSetManager; |
| import org.eclipse.ui.internal.util.Util; |
| |
| /** |
| * Abstract baseclass for IWorkingSet implementations. |
| * |
| * @since 3.2 |
| */ |
| public abstract class AbstractWorkingSet implements IAdaptable, IWorkingSet { |
| |
| protected static final String FACTORY_ID = "org.eclipse.ui.internal.WorkingSetFactory"; //$NON-NLS-1$ |
| |
| static final String TAG_AGGREGATE = "aggregate"; //$NON-NLS-1$ |
| |
| private String name; |
| |
| protected ArrayList elements; |
| |
| private IWorkingSetManager manager; |
| |
| protected IMemento workingSetMemento; |
| |
| private String label; |
| |
| /** |
| * Whether or not the label value should follow the name value. It should do |
| * this until a call to setLabel() differentiates it from the name. |
| */ |
| private boolean labelBoundToName; |
| |
| /** |
| * Create a new instance of this class |
| * |
| * @param name the unique name for this working set |
| * @param label the user-friendly name for this working set |
| */ |
| public AbstractWorkingSet(String name, String label) { |
| Assert.isNotNull(name, "name must not be null"); //$NON-NLS-1$ |
| this.name = name; |
| this.label = label; |
| labelBoundToName = Util.equals(name, label); |
| } |
| |
| /** |
| * Returns the receiver if the requested type is either IWorkingSet |
| * or IPersistableElement. |
| * |
| * @param adapter the requested type |
| * @return the receiver if the requested type is either IWorkingSet |
| * or IPersistableElement. |
| */ |
| public Object getAdapter(Class adapter) { |
| if (adapter == IWorkingSet.class |
| || adapter == IPersistableElement.class) { |
| return this; |
| } |
| return Platform.getAdapterManager().getAdapter(this, adapter); |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| public void setName(String newName) { |
| Assert.isNotNull(newName, "Working set name must not be null"); //$NON-NLS-1$ |
| |
| name = newName; |
| fireWorkingSetChanged(IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE, null); |
| |
| if (labelBoundToName) { |
| label = newName; |
| fireWorkingSetChanged(IWorkingSetManager.CHANGE_WORKING_SET_LABEL_CHANGE, null); |
| } |
| } |
| |
| /** |
| * Connect this working set to a manger. |
| * |
| * @param manager the manager to connect to |
| */ |
| public void connect(IWorkingSetManager manager) { |
| Assert.isTrue(this.manager == null, "A working set can only be connected to one manager"); //$NON-NLS-1$ |
| this.manager= manager; |
| } |
| |
| /** |
| * Disconnet this working set from its manager, if any. |
| */ |
| public void disconnect() { |
| this.manager= null; |
| } |
| |
| protected void fireWorkingSetChanged(String property, Object oldValue) { |
| AbstractWorkingSetManager receiver= manager != null |
| ? (AbstractWorkingSetManager)manager |
| : (AbstractWorkingSetManager)WorkbenchPlugin.getDefault().getWorkingSetManager(); |
| receiver.workingSetChanged(this, property, oldValue); |
| } |
| |
| /** |
| * Create a copy of the elements to store in the receiver. |
| * |
| * @param elements the elements to store a copy of in the |
| * receiver. |
| */ |
| protected void internalSetElements(IAdaptable[] newElements) { |
| Assert.isNotNull(newElements, |
| "Working set elements array must not be null"); //$NON-NLS-1$ |
| |
| elements = new ArrayList(newElements.length); |
| for (int i = 0; i < newElements.length; i++) { |
| elements.add(newElements[i]); |
| } |
| } |
| |
| public IAdaptable[] getElements() { |
| ArrayList list = getElementsArray(); |
| return (IAdaptable[]) list.toArray(new IAdaptable[list.size()]); |
| } |
| |
| /** |
| * Returns the elements array list. Lazily restores the elements from |
| * persistence memento. |
| * |
| * @return the elements array list |
| */ |
| protected ArrayList getElementsArray() { |
| if (elements == null) { |
| restoreWorkingSet(); |
| workingSetMemento = null; |
| } |
| return elements; |
| } |
| |
| abstract void restoreWorkingSet(); |
| |
| protected IWorkingSetManager getManager() { |
| return manager; |
| } |
| |
| public String getFactoryId() { |
| return FACTORY_ID; |
| } |
| |
| public String getLabel() { |
| return label; |
| } |
| |
| public void setLabel(String label) { |
| this.label = label == null ? getName() : label; |
| labelBoundToName = Util.equals(label, name); // rebind the label to the name |
| |
| fireWorkingSetChanged( |
| IWorkingSetManager.CHANGE_WORKING_SET_LABEL_CHANGE, null); |
| } |
| |
| public boolean isEmpty() { |
| return getElementsArray().isEmpty(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.ui.IWorkingSet#getImage() |
| */ |
| public final ImageDescriptor getImage() { |
| return getImageDescriptor(); |
| } |
| } |