blob: 197ccdc4f5a0243598fc21c9a739a8c17c432664 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui;
import java.util.Collections;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.mylyn.internal.tasks.core.ITaskJobFactory;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.sync.SynchronizationJob;
/**
* @author Steffen Pingel
*/
public class TaskListSynchronizationScheduler {
private long interval;
private final ITaskJobFactory jobFactory;
private SynchronizationJob refreshJob;
public TaskListSynchronizationScheduler(ITaskJobFactory jobFactory) {
this.jobFactory = jobFactory;
}
private SynchronizationJob createRefreshJob() {
SynchronizationJob job = jobFactory.createSynchronizeRepositoriesJob(null);
job.setUser(false);
job.setFullSynchronization(true);
return job;
}
public synchronized SynchronizationJob getRefreshJob() {
return refreshJob;
}
private synchronized void reschedule() {
if (this.interval != 0) {
refreshJob.schedule(interval);
}
}
public synchronized void setInterval(long interval) {
setInterval(interval, interval);
}
public synchronized void setInterval(long delay, long interval) {
if (this.interval != interval) {
this.interval = interval;
if (refreshJob != null) {
refreshJob.cancel();
refreshJob = null;
}
if (interval > 0) {
refreshJob = createRefreshJob();
refreshJob.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
reschedule();
}
});
refreshJob.schedule(delay);
}
}
}
public SynchronizationJob synchronize(TaskRepository repository) {
// TODO check if a synchronization for repository is already running
SynchronizationJob job = jobFactory.createSynchronizeRepositoriesJob(Collections.singleton(repository));
job.setUser(false);
job.setFullSynchronization(false);
job.schedule();
return job;
}
}