package org.goko.core.execution.monitor.uiprovider;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.goko.core.common.exception.GkException;
import org.goko.core.common.service.IGokoService;
import org.goko.core.execution.monitor.uiprovider.menu.executionqueue.ClearExecutionQueueAction;
import org.goko.core.execution.monitor.uiprovider.menu.executionqueue.IExecutionQueueContributionItem;
import org.goko.core.execution.monitor.uiprovider.menu.executiontoken.DeleteExecutionTokenAction;
import org.goko.core.gcode.execution.ExecutionQueueType;
import org.goko.core.gcode.execution.ExecutionToken;
import org.goko.core.gcode.execution.ExecutionTokenState;
import org.goko.core.gcode.service.IExecutionService;
import org.goko.core.workspace.bean.IPropertiesPanel;
import org.goko.core.workspace.bean.ProjectContainerUiProvider;
import org.goko.core.workspace.service.IWorkspaceUIService;
public class ExecutionQueueContainerUiProvider extends ProjectContainerUiProvider implements IGokoService {
/** Service ID */
private static final String SERVICE_ID = "org.goko.core.execution.monitor.uiprovider.ExecutionQueueContainerUiProvider";
/** The underlying ExecutionService */
private IExecutionService<ExecutionTokenState, ExecutionToken<ExecutionTokenState>> executionService;
/** The label provider */
private ExecutionQueueContainerLabelProvider labelProvider;
/** List of execution queue provider */
private List<IExecutionQueueContributionItem> lstExecutionQueueContributionItem;
/** Workspace UI Service */
private IWorkspaceUIService workspaceUiService;
public ExecutionQueueContainerUiProvider() {
super("EXECUTIONQUEUE", 20);
this.labelProvider = new ExecutionQueueContainerLabelProvider();
this.lstExecutionQueueContributionItem = new ArrayList<IExecutionQueueContributionItem>();
}
/** (inheritDoc)
* @see org.goko.core.common.service.IGokoService#getServiceId()
*/
@Override
public String getServiceId() throws GkException {
return SERVICE_ID;
}
/** (inheritDoc)
* @see org.goko.core.common.service.IGokoService#start()
*/
@Override
public void start() throws GkException {
workspaceUiService.addProjectContainerUiProvider(this);
}
/** (inheritDoc)
* @see org.goko.core.common.service.IGokoService#stop()
*/
@Override
public void stop() throws GkException {
// TODO Auto-generated method stub
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#providesLabelFor(java.lang.Object)
*/
@Override
public boolean providesLabelFor(Object content) throws GkException {
return this.equals(content) || content instanceof ExecutionToken;
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#getStyledText(java.lang.Object)
*/
@Override
public StyledString getStyledText(Object element) {
return labelProvider.getStyledText(element);
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#getImage(java.lang.Object)
*/
@Override
public Image getImage(Object element) {
return labelProvider.getImage(element);
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#providesConfigurationPanelFor(org.eclipse.jface.viewers.ISelection)
*/
@Override
public boolean providesConfigurationPanelFor(ISelection content) throws GkException {
// TODO Auto-generated method stub
return false;
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#createConfigurationPanelFor(org.eclipse.swt.widgets.Composite, org.eclipse.jface.viewers.ISelection)
*/
@Override
public IPropertiesPanel createConfigurationPanelFor(Composite parent, ISelection content) throws GkException {
return null;
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#providesContentFor(java.lang.Object)
*/
@Override
public boolean providesContentFor(Object content) throws GkException {
return this.equals(content);
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#hasChildren(java.lang.Object)
*/
@Override
public boolean hasChildren(Object content) throws GkException {
if(this.equals(content)){
return CollectionUtils.isNotEmpty(executionService.getExecutionQueue(ExecutionQueueType.DEFAULT).getExecutionToken());
}
return false;
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#getChildren(java.lang.Object)
*/
@Override
public Object[] getChildren(Object content) throws GkException {
if(this.equals(content)){
return executionService.getExecutionQueue(ExecutionQueueType.DEFAULT).getExecutionToken().toArray();
}
return new Object[0];
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#getParent(java.lang.Object)
*/
@Override
public Object getParent(Object content) throws GkException {
// TODO Auto-generated method stub
return null;
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#providesMenuFor(org.eclipse.jface.viewers.ISelection)
*/
@Override
public boolean providesMenuFor(ISelection selection) throws GkException {
IStructuredSelection strSelection = (IStructuredSelection) selection;
Object content = strSelection.getFirstElement();
return this.equals(content) || (content instanceof ExecutionToken);
}
/** (inheritDoc)
* @see org.goko.core.workspace.bean.ProjectContainerUiProvider#createMenuFor(org.eclipse.jface.action.IMenuManager, org.eclipse.jface.viewers.ISelection)
*/
@Override
public void createMenuFor(IMenuManager contextMenu, ISelection selection) throws GkException {
IStructuredSelection strSelection = (IStructuredSelection) selection;
Object content = strSelection.getFirstElement();
if(content instanceof ExecutionToken){
createMenuForExecutionToken(contextMenu, (ExecutionToken<?>)content);
}else if(this.equals(content)){
createMenuForExecutionQueue(contextMenu);
}
}
/**
* Create the menu for an execution token
* @param contextMenu
* @param content
*/
private void createMenuForExecutionToken(IMenuManager contextMenu, ExecutionToken<?> token) {
contextMenu.add(new DeleteExecutionTokenAction(executionService, token.getId()));
}
/**
* Create the menu for the execution queue
* @param contextMenu
* @param content
*/
private void createMenuForExecutionQueue(IMenuManager contextMenu) {
contextMenu.add(new Separator());
contextMenu.add(new ClearExecutionQueueAction(executionService));
contextMenu.add(new Separator());
if(CollectionUtils.isNotEmpty(lstExecutionQueueContributionItem)){
contextMenu.add(new Separator());
for (IExecutionQueueContributionItem contributionItem : lstExecutionQueueContributionItem) {
contextMenu.add(contributionItem.getItem());
}
}
}
public void addExecutionQueueContributionItem(IExecutionQueueContributionItem contribution){
lstExecutionQueueContributionItem.add(contribution);
}
/**
* @param executionService the executionService to set
*/
public void setExecutionService(IExecutionService<ExecutionTokenState, ExecutionToken<ExecutionTokenState>> executionService) {
this.executionService = executionService;
}
/**
* @param workspaceUiService the workspaceUiService to set
*/
public void setWorkspaceUiService(IWorkspaceUIService workspaceUiService) {
this.workspaceUiService = workspaceUiService;
}
}