| /******************************************************************************* |
| * Copyright (c) 2009, 2014 Xored Software Inc and others. |
| * 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 |
| * |
| * Contributors: |
| * Xored Software Inc - initial API and implementation and/or initial documentation |
| *******************************************************************************/ |
| package org.eclipse.rcptt.tesla.swt.logging; |
| |
| import org.eclipse.core.internal.jobs.InternalJob; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.jobs.IJobChangeEvent; |
| import org.eclipse.core.runtime.jobs.IJobChangeListener; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.rcptt.reporting.core.ReportHelper; |
| import org.eclipse.rcptt.sherlock.aspects.jobs.internal.IJobsEventListener; |
| import org.eclipse.rcptt.sherlock.core.reporting.IReportBuilder; |
| import org.eclipse.rcptt.tesla.internal.ui.player.UIJobCollector; |
| import org.eclipse.rcptt.tesla.ui.IJobCollector.JobStatus; |
| |
| @SuppressWarnings("restriction") |
| public class JobsInfoSupport implements IJobsEventListener, |
| IJobChangeListener { |
| static { |
| ReportHelper.class.getName(); // Prevents class loading in job listeners, which may cause deadlocks. |
| } |
| |
| private JobsInfoProvider provider; |
| |
| public JobsInfoSupport(JobsInfoProvider jobsEventProvider) { |
| this.provider = jobsEventProvider; |
| } |
| |
| @Override |
| public void jobSchedule(InternalJob job, long delay, boolean reshedule) { |
| jobStart(job); |
| } |
| |
| @Override |
| public void jobChangeStatus(InternalJob job, int newState) { |
| jobUpdate(job); |
| } |
| |
| @Override |
| public void endJob(InternalJob job, IStatus status, boolean notify) { |
| jobFinish(job); |
| } |
| |
| @Override |
| public void jobCanceled(InternalJob job) { |
| jobFinish(job); |
| } |
| |
| @Override |
| public void aboutToRun(IJobChangeEvent event) { |
| } |
| |
| @Override |
| public void awake(IJobChangeEvent event) { |
| } |
| |
| @Override |
| public void done(IJobChangeEvent event) { |
| } |
| |
| @Override |
| public void running(IJobChangeEvent event) { |
| } |
| |
| @Override |
| public void scheduled(IJobChangeEvent event) { |
| } |
| |
| @Override |
| public void sleeping(IJobChangeEvent event) { |
| } |
| |
| public void register() { |
| Job.getJobManager().addJobChangeListener(this); |
| } |
| |
| public void unregister() { |
| Job.getJobManager().removeJobChangeListener(this); |
| } |
| |
| private void jobStart(final InternalJob job) { |
| JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0); |
| if (status.equals(JobStatus.IGNORED)) { |
| return; |
| } |
| IReportBuilder[] builders = provider.getListeners(); |
| for (IReportBuilder builder : builders) { |
| ReportHelper.startWaitInfo(builder.getCurrent(), "job", job.getClass().getName()); |
| } |
| } |
| |
| private void jobFinish(final InternalJob job) { |
| JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0); |
| if (status.equals(JobStatus.IGNORED)) { |
| return; |
| } |
| IReportBuilder[] builders = provider.getListeners(); |
| for (IReportBuilder builder : builders) { |
| ReportHelper.finishWaitInfo(builder.getCurrent(), "job", job.getClass().getName()); |
| } |
| } |
| |
| private void jobUpdate(final InternalJob job) { |
| JobStatus status = UIJobCollector.detectJobStatus((Job) job, 0); |
| if (status.equals(JobStatus.IGNORED)) { |
| return; |
| } |
| IReportBuilder[] builders = provider.getListeners(); |
| for (IReportBuilder builder : builders) { |
| ReportHelper.updateWaitInfo(builder.getCurrent(), "job", job.getClass().getName()); |
| } |
| } |
| |
| public void clear() { |
| |
| } |
| } |