Java tutorial
/****************************************************************************** * Copyright (c) 2007-2008 g-Eclipse consortium * 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 * * Initial development of the original code was made for * project g-Eclipse founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributor(s): * PSNC: * - Katarzyna Bylec (katis@man.poznan.pl) * - Szymon Mueller *****************************************************************************/ package eu.geclipse.servicejob.ui.views; import java.net.URL; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IBaseLabelProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import eu.geclipse.core.model.GridModel; import eu.geclipse.core.model.IGridElement; import eu.geclipse.core.model.IGridElementManager; import eu.geclipse.core.model.IGridModelEvent; import eu.geclipse.core.model.IServiceJob; import eu.geclipse.core.model.IServiceJobStatusListener; import eu.geclipse.servicejob.ui.Activator; import eu.geclipse.servicejob.ui.actions.OpenServiceJobDialogAction; import eu.geclipse.servicejob.ui.providers.ServiceJobContentProvider; import eu.geclipse.servicejob.ui.providers.ServiceJobLabelProvider; import eu.geclipse.servicejob.ui.wizard.JobSubmissionServiceWizard; import eu.geclipse.ui.views.ElementManagerViewPart; /** * View responsible for displaying managed Operator's Jobs. */ public class ServiceJobView extends ElementManagerViewPart implements IServiceJobStatusListener, ISelectionProvider, ISelectionChangedListener { boolean refreshedFirstTime; private OpenServiceJobDialogAction wizardAction; private StructuredViewer myViewer; private Action runJobAction; @Override protected IGridElementManager getManager() { return GridModel.getServiceJobManager(); } @Override protected boolean createTreeColumns(final Tree tree) { TreeColumn nameColumn = new TreeColumn(tree, SWT.NONE); nameColumn.setText("Name"); //$NON-NLS-1$ nameColumn.setAlignment(SWT.LEFT); nameColumn.setWidth(160); TreeColumn projectColumn = new TreeColumn(tree, SWT.NONE); projectColumn.setText("Project"); //$NON-NLS-1$ projectColumn.setAlignment(SWT.LEFT); projectColumn.setWidth(100); TreeColumn statusColumn = new TreeColumn(tree, SWT.NONE); statusColumn.setText(Messages.getString("ServiceJobsView.status")); //$NON-NLS-1$ statusColumn.setAlignment(SWT.LEFT); statusColumn.setWidth(130); TreeColumn dateColumn = new TreeColumn(tree, SWT.NONE); dateColumn.setText(Messages.getString("ServiceJobsView.operator_job_date")); //$NON-NLS-1$ dateColumn.setAlignment(SWT.LEFT); dateColumn.setWidth(130); TreeColumn typeColumn = new TreeColumn(tree, SWT.NONE); typeColumn.setText(Messages.getString("ServiceJobsView.type")); //$NON-NLS-1$ typeColumn.setAlignment(SWT.LEFT); typeColumn.setWidth(60); return true; } @Override public void gridModelChanged(final IGridModelEvent event) { super.gridModelChanged(event); if (event.getType() == IGridModelEvent.ELEMENTS_CHANGED || event.getType() == IGridModelEvent.ELEMENTS_ADDED || event.getType() == IGridModelEvent.ELEMENTS_REMOVED) { IGridElement[] removedElements = event.getElements(); Control control = getViewer().getControl(); for (IGridElement elem : removedElements) { if (elem instanceof IServiceJob) { if (!control.isDisposed()) { Display display = control.getDisplay(); display.asyncExec(new Runnable() { public void run() { if (ServiceJobView.this.refreshedFirstTime) { ServiceJobView.this.getViewer().refresh(true); ServiceJobView.this.refreshedFirstTime = false; } ServiceJobView.this.getViewer().refresh(true); } }); refreshViewer(); } } } } } @Override protected IBaseLabelProvider createLabelProvider() { return new ServiceJobLabelProvider(); // return super.createLabelProvider(); } @Override protected IContentProvider createContentProvider() { return new ServiceJobContentProvider(); } @Override public void init(final IViewSite site) throws PartInitException { super.init(site); GridModel.getServiceJobManager().addServiceJobStatusListener(this); addSelectionChangedListener(this); } @Override protected void initViewer(final StructuredViewer viewer) { super.initViewer(viewer); this.myViewer = viewer; this.myViewer.addSelectionChangedListener(this); } @Override public void createPartControl(final Composite parent) { super.createPartControl(parent); createButtons(); createMenu(); getSite().setSelectionProvider(this.myViewer); this.refreshedFirstTime = true; } private void createButtons() { IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); this.wizardAction = new OpenServiceJobDialogAction(); this.wizardAction.setToolTipText(Messages.getString("ServiceJobsView.new_operators_job_wizard")); //$NON-NLS-1$ ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages(); this.wizardAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_NEW_WIZARD)); URL runURL = Activator.getDefault().getBundle().getEntry("icons/obj16/debugt_obj.gif"); //$NON-NLS-1$ ImageDescriptor runDesc = ImageDescriptor.createFromURL(runURL); URL runDisabledURL = Activator.getDefault().getBundle().getEntry("icons/obj16/debugt_obj_disabled1.gif"); //$NON-NLS-1$ ImageDescriptor runDisabledDesc = ImageDescriptor.createFromURL(runDisabledURL); this.runJobAction = new Action() { @Override public void run() { ISelection sel = ServiceJobView.this.getSelection(); if (!sel.isEmpty()) { if (sel instanceof IStructuredSelection) { IStructuredSelection sSel = (IStructuredSelection) sel; for (Object obj : sSel.toList()) { if (obj instanceof IServiceJob) { IServiceJob serviceJob = (IServiceJob) obj; if (serviceJob.needsSubmissionWizard()) { JobSubmissionServiceWizard serviceWizard = new JobSubmissionServiceWizard( serviceJob.getParent().getProject().getVO()); WizardDialog dialog = new WizardDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), serviceWizard); if (dialog.open() == WizardDialog.OK) { serviceJob.setSubmissionService(serviceWizard.getSelectedService()); serviceJob.run(); } } else { serviceJob.run(); } } } } } super.run(); } }; this.runJobAction.setImageDescriptor(runDesc); this.runJobAction.setDisabledImageDescriptor(runDisabledDesc); this.runJobAction.setEnabled(!getSelection().isEmpty()); this.runJobAction.setToolTipText(Messages.getString("ServiceJobsView.run_button_tooltip")); mgr.add(this.runJobAction); mgr.add(this.wizardAction); refreshViewer(); } private void createMenu() { // Empty } public void statusChanged(final IServiceJob serviceJob) { // ServiceJobDecorator decorator = ServiceJobDecorator.getDecorator(); // if( decorator != null ) { // decorator.refresh( serviceJob ); // } refreshViewer(serviceJob); } public void addSelectionChangedListener(final ISelectionChangedListener listener) { // empty implementation } public ISelection getSelection() { return this.myViewer.getSelection(); } public void removeSelectionChangedListener(final ISelectionChangedListener listener) { // empty implementation } public void setSelection(final ISelection selection) { this.myViewer.setSelection(selection); } public void selectionChanged(final SelectionChangedEvent event) { this.runJobAction.setEnabled(!getSelection().isEmpty()); } }