blob: 43398f21a9ddb7e699fe049ee2dd924a504786a7 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}