/**
*
*/
package goko.dialog;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.wb.swt.SWTResourceManager;
import org.goko.common.dialog.GkDialog;
/**
* Unitary element used to display the progress of a single job
*
* @author PsyKo
*
*/
public class JobProgressElement extends Composite implements IProgressMonitor,IJobChangeListener {
private UISynchronize sync;
private ProgressBar jobProgressBar;
private Label lblTaskName;
private GokoProgressDialog parentMonitor;
private Job job;
private Label lblJobName;
/**
* @param parent
* @param style
*/
public JobProgressElement(Composite parent, int style) {
super(parent, style);
createContent();
}
public JobProgressElement(Composite parent, int style, UISynchronize sync, Job job, GokoProgressDialog parentMonitor) {
super(parent, style);
this.sync = sync;
this.parentMonitor = parentMonitor;
this.job = job;
createContent();
job.addJobChangeListener(this);
}
private void createContent(){
setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.horizontalSpacing = 0;
gridLayout.marginWidth = 0;
gridLayout.marginHeight = 0;
gridLayout.verticalSpacing = 2;
setLayout(gridLayout);
lblJobName = new Label(this, SWT.NONE);
GridData gd_lblJobName = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
gd_lblJobName.verticalIndent = 2;
gd_lblJobName.horizontalIndent = 2;
lblJobName.setLayoutData(gd_lblJobName);
lblJobName.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
lblJobName.setText(job.getName());
jobProgressBar = new ProgressBar(this, SWT.NONE);
jobProgressBar.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
lblTaskName = new Label(this, SWT.NONE);
lblTaskName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
lblTaskName.setText("taskName");
lblTaskName.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL));
lblTaskName.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
Label label = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, int)
*/
@Override
public void beginTask(final String name, final int totalWork) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
parentMonitor.requestShow();
jobProgressBar.setSelection(0);
jobProgressBar.setMaximum(totalWork);
lblTaskName.setText(name);
}
}
});
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#done()
*/
@Override
public void done() {
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double)
*/
@Override
public void internalWorked(final double work) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
jobProgressBar.setSelection((int) (jobProgressBar.getSelection()+work));
}
}
});
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#isCanceled()
*/
@Override
public boolean isCanceled() {
return false;
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean)
*/
@Override
public void setCanceled(boolean value) {
// TODO Auto-generated method stub
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(java.lang.String)
*/
@Override
public void setTaskName(final String name) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
lblTaskName.setText(name);
}
}
});
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#subTask(java.lang.String)
*/
@Override
public void subTask(final String name) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
lblTaskName.setText(name);
}
}
});
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.IProgressMonitor#worked(int)
*/
@Override
public void worked(final int work) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
jobProgressBar.setSelection(jobProgressBar.getSelection() + work);
}
}
});
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.jobs.IJobChangeListener#aboutToRun(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
@Override
public void aboutToRun(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.jobs.IJobChangeListener#awake(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
@Override
public void awake(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.jobs.IJobChangeListener#done(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
@Override
public void done(final IJobChangeEvent event) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
if(event.getResult() != null && Status.OK_STATUS.equals(event.getResult())){
lblTaskName.setText("Complete " +job.getName());
}
if(event.getResult() != null && event.getResult().getSeverity() == Status.ERROR){
lblTaskName.setText("Error " +job.getName());
GkDialog.openDialog(null, event.getResult());
}
}
}
});
event.getJob().removeJobChangeListener(this);
parentMonitor.remove(this);
}
/** (inheritDoc)
* @see org.eclipse.swt.widgets.Widget#dispose()
*/
@Override
public void dispose() {
super.dispose();
if(job != null){
job.removeJobChangeListener(this);
}
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.jobs.IJobChangeListener#running(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
@Override
public void running(IJobChangeEvent event) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(!isDisposed()){
lblTaskName.setText("Running " +job.getName());
}
}
});
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.jobs.IJobChangeListener#scheduled(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
@Override
public void scheduled(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
/** (inheritDoc)
* @see org.eclipse.core.runtime.jobs.IJobChangeListener#sleeping(org.eclipse.core.runtime.jobs.IJobChangeEvent)
*/
@Override
public void sleeping(IJobChangeEvent event) {
// TODO Auto-generated method stub
}
/**
* @return the job
*/
public Job getJob() {
return job;
}
/**
* @param job the job to set
*/
public void setJob(Job job) {
this.job = job;
}
}