/**
* Copyright (C) Intersect 2012.
*
* This module contains Proprietary Information of Intersect,
* and should be treated as Confidential.
*/
package au.org.intersect.exsite9.jobs;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import au.org.intersect.exsite9.domain.Folder;
import au.org.intersect.exsite9.domain.Project;
import au.org.intersect.exsite9.service.IResearchFileService;
import au.org.intersect.exsite9.service.IProjectManager;
import au.org.intersect.exsite9.view.ProjectExplorerView;
import au.org.intersect.exsite9.view.ViewUtils;
/**
* Checks for new files either within a particular watched folder of a project or across all of the watched folders of a project
*/
public class IdentifyAllNewFilesForProjectJob extends Job
{
private static final Logger LOG = Logger.getLogger(IdentifyAllNewFilesForProjectJob.class);
private static final String jobName = "IdentifyAllNewFilesForProject";
private final Folder folder;
public IdentifyAllNewFilesForProjectJob()
{
super(jobName);
this.folder = null;
}
public IdentifyAllNewFilesForProjectJob(Folder folder)
{
super(jobName);
this.folder = folder;
}
@Override
protected IStatus run(IProgressMonitor monitor)
{
// Only allow one instance of the job to run at a time.
if(!SemaphoreManager.getBackgroundJobSemaphore().tryAcquire())
{
LOG.info("Finding files cancelled due to already running process.");
return Status.CANCEL_STATUS;
}
try
{
final IProjectManager projectManager = (IProjectManager) PlatformUI.getWorkbench().getService(IProjectManager.class);
final Project project = projectManager.getCurrentProject();
if (project == null || project.getId() == null)
{
return Status.CANCEL_STATUS;
}
monitor.beginTask("Indentify files...", IProgressMonitor.UNKNOWN);
final IResearchFileService fileService = (IResearchFileService) PlatformUI.getWorkbench().getService(IResearchFileService.class);
if (folder == null)
{
fileService.identifyNewFilesForProject(project);
}
else
{
fileService.identifyNewFilesForFolder(project, this.folder);
}
// Refresh the project explorer view in the ui thread
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
final ProjectExplorerView view = (ProjectExplorerView) ViewUtils.getViewByID(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), ProjectExplorerView.ID);
view.refresh();
}
});
return Status.OK_STATUS;
}
finally
{
monitor.done();
SemaphoreManager.getBackgroundJobSemaphore().release();
}
}
}