| /******************************************************************************* |
| * Copyright (c) 2005 The Regents of the University of California. |
| * This material was produced under U.S. Government contract W-7405-ENG-36 |
| * for Los Alamos National Laboratory, which is operated by the University |
| * of California for the U.S. Department of Energy. The U.S. Government has |
| * rights to use, reproduce, and distribute this software. NEITHER THE |
| * GOVERNMENT NOR THE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR |
| * ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified |
| * to produce derivative works, such modified software should be clearly marked, |
| * so as not to confuse it with the version available from LANL. |
| * |
| * Additionally, 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 |
| * |
| * LA-CC 04-115 |
| *******************************************************************************/ |
| package org.eclipse.ptp.ui.managers; |
| |
| import org.eclipse.core.runtime.ListenerList; |
| import org.eclipse.core.runtime.SafeRunner; |
| import org.eclipse.jface.util.SafeRunnable; |
| import org.eclipse.ptp.core.IModelPresentation; |
| import org.eclipse.ptp.core.PTPCorePlugin; |
| import org.eclipse.ptp.core.elements.IPUniverse; |
| import org.eclipse.ptp.core.elements.IResourceManager; |
| import org.eclipse.ptp.ui.IManager; |
| import org.eclipse.ptp.ui.listeners.IJobChangedListener; |
| import org.eclipse.ptp.ui.listeners.ISetListener; |
| import org.eclipse.ptp.ui.model.ElementSet; |
| import org.eclipse.ptp.ui.model.IElement; |
| import org.eclipse.ptp.ui.model.IElementHandler; |
| import org.eclipse.ptp.ui.model.IElementSet; |
| |
| /** |
| * @author Clement chu |
| * |
| */ |
| public abstract class AbstractUIManager implements IManager { |
| protected IModelPresentation modelPresentation = null; |
| protected String cur_set_id = EMPTY_ID; |
| protected ListenerList setListeners = new ListenerList(); |
| protected ListenerList jListeners = new ListenerList(); |
| |
| /** |
| * Constructor |
| */ |
| public AbstractUIManager() { |
| modelPresentation = PTPCorePlugin.getDefault().getModelPresentation(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#addJobListener(org.eclipse.ptp.ui.listeners.IJobListener) |
| */ |
| public void addJobChangedListener(IJobChangedListener jobListener) { |
| jListeners.add(jobListener); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#addSetListener(org.eclipse.ptp.ui.listeners.ISetListener) |
| */ |
| public void addSetListener(ISetListener setListener) { |
| setListeners.add(setListener); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#addToSet(org.eclipse.ptp.ui.model.IElement[], org.eclipse.ptp.ui.model.IElementSet) |
| */ |
| public void addToSet(IElement[] elements, IElementSet set) { |
| set.addElements(elements); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#addToSet(org.eclipse.ptp.ui.model.IElement[], java.lang.String, org.eclipse.ptp.ui.model.IElementHandler) |
| */ |
| public void addToSet(IElement[] elements, String setID, |
| IElementHandler elementHandler) { |
| IElementSet set = (IElementSet) elementHandler.getElementByID(setID); |
| addToSet(elements, set); |
| fireSetEvent(ADD_ELEMENT_TYPE, elements, set, null); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#createSet(org.eclipse.ptp.ui.model.IElement[], java.lang.String, java.lang.String, org.eclipse.ptp.ui.model.IElementHandler) |
| */ |
| public String createSet(IElement[] elements, String setID, String setName, |
| IElementHandler elementHandler) { |
| IElementSet set = new ElementSet(elementHandler, setID, setName); |
| addToSet(elements, set); |
| elementHandler.addElements(new IElement[] { set }); |
| fireSetEvent(CREATE_SET_TYPE, elements, set, null); |
| return set.getID(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#fireJobListener(int, java.lang.String, java.lang.String) |
| */ |
| public void fireJobChangedEvent(final int type, final String cur_job_id, |
| final String pre_job_id) { |
| Object[] array = jListeners.getListeners(); |
| for (int i = 0; i < array.length; i++) { |
| final IJobChangedListener listener = (IJobChangedListener) array[i]; |
| SafeRunner.run(new SafeRunnable() { |
| public void run() { |
| listener.jobChangedEvent(type, cur_job_id, pre_job_id); |
| } |
| }); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#fireEvent(int, org.eclipse.ptp.ui.model.IElement[], org.eclipse.ptp.ui.model.IElementSet, org.eclipse.ptp.ui.model.IElementSet) |
| */ |
| public void fireSetEvent(final int eventType, final IElement[] elements, |
| final IElementSet cur_set, final IElementSet pre_set) { |
| Object[] array = setListeners.getListeners(); |
| for (int i = 0; i < array.length; i++) { |
| final ISetListener setListener = (ISetListener) array[i]; |
| SafeRunner.run(new SafeRunnable() { |
| public void run() { |
| switch (eventType) { |
| case CREATE_SET_TYPE: |
| setListener.createSetEvent(cur_set, elements); |
| break; |
| case DELETE_SET_TYPE: |
| setListener.deleteSetEvent(cur_set); |
| break; |
| case CHANGE_SET_TYPE: |
| setListener.changeSetEvent(cur_set, pre_set); |
| break; |
| case ADD_ELEMENT_TYPE: |
| setListener.addElementsEvent(cur_set, elements); |
| break; |
| case REMOVE_ELEMENT_TYPE: |
| setListener.removeElementsEvent(cur_set, elements); |
| break; |
| } |
| } |
| }); |
| } |
| } |
| |
| /** |
| * Get Resource Managers |
| * @return |
| */ |
| public IResourceManager[] getResourceManagers() { |
| IPUniverse universe = modelPresentation.getUniverse(); |
| if (universe == null) { |
| return new IResourceManager[0]; |
| } |
| return universe.getResourceManagers(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#getStatus(org.eclipse.ptp.ui.model.IElement) |
| */ |
| public int getStatus(IElement element, int index) { |
| return getStatus(element.getID()); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#removeFromSet(org.eclipse.ptp.ui.model.IElement[], java.lang.String, org.eclipse.ptp.ui.model.IElementHandler) |
| */ |
| public void removeFromSet(IElement[] elements, String setID, |
| IElementHandler elementHandler) { |
| IElementSet set = (IElementSet) elementHandler.getElementByID(setID); |
| set.removeElements(elements); |
| fireSetEvent(REMOVE_ELEMENT_TYPE, elements, set, null); |
| if (set.size() == 0) |
| removeSet(setID, elementHandler); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#removeJobListener(org.eclipse.ptp.ui.listeners.IJobListener) |
| */ |
| public void removeJobChangedListener(IJobChangedListener jobListener) { |
| jListeners.remove(jobListener); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#removeSet(java.lang.String, org.eclipse.ptp.ui.model.IElementHandler) |
| */ |
| public void removeSet(String setID, IElementHandler elementHandler) { |
| IElementSet set = (IElementSet) elementHandler.getElementByID(setID); |
| elementHandler.removeElements(new IElement[] { set }); |
| fireSetEvent(DELETE_SET_TYPE, null, set, null); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#removeSetListener(org.eclipse.ptp.ui.listeners.ISetListener) |
| */ |
| public void removeSetListener(ISetListener setListener) { |
| setListeners.remove(setListener); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ptp.ui.IManager#shutdown() |
| */ |
| public void shutdown() { |
| setListeners.clear(); |
| jListeners.clear(); |
| //setListeners = null; |
| //jListeners = null; |
| } |
| } |