|
Lines 28-33
Link Here
|
| 28 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; |
28 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; |
| 29 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; |
29 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; |
| 30 |
import org.eclipse.mylyn.tasks.core.AbstractTask; |
30 |
import org.eclipse.mylyn.tasks.core.AbstractTask; |
|
|
31 |
import org.eclipse.mylyn.tasks.core.QueryHitCollector; |
| 31 |
import org.eclipse.mylyn.tasks.core.RepositoryTaskAttribute; |
32 |
import org.eclipse.mylyn.tasks.core.RepositoryTaskAttribute; |
| 32 |
import org.eclipse.mylyn.tasks.core.RepositoryTaskData; |
33 |
import org.eclipse.mylyn.tasks.core.RepositoryTaskData; |
| 33 |
import org.eclipse.mylyn.tasks.core.getAllCategories; |
34 |
import org.eclipse.mylyn.tasks.core.getAllCategories; |
|
Lines 103-119
Link Here
|
| 103 |
*/ |
104 |
*/ |
| 104 |
public final Job synchronize(AbstractRepositoryConnector connector, final AbstractRepositoryQuery repositoryQuery, |
105 |
public final Job synchronize(AbstractRepositoryConnector connector, final AbstractRepositoryQuery repositoryQuery, |
| 105 |
IJobChangeListener listener, boolean forceSync) { |
106 |
IJobChangeListener listener, boolean forceSync) { |
| 106 |
HashSet<AbstractRepositoryQuery> items = new HashSet<AbstractRepositoryQuery>(); |
107 |
return synchronize(connector, Collections.singleton(repositoryQuery), listener, Job.LONG, 0, forceSync, null); |
| 107 |
items.add(repositoryQuery); |
|
|
| 108 |
return synchronize(connector, items, listener, Job.LONG, 0, true, forceSync); |
| 109 |
} |
108 |
} |
| 110 |
|
109 |
|
| 111 |
public final Job synchronize(AbstractRepositoryConnector connector, |
110 |
public final Job synchronize(AbstractRepositoryConnector connector, |
| 112 |
final Set<AbstractRepositoryQuery> repositoryQueries, final IJobChangeListener listener, int priority, |
111 |
final Set<AbstractRepositoryQuery> repositoryQueries, final IJobChangeListener listener, int priority, |
| 113 |
long delay, boolean syncChangedTasks, boolean userForcedSync) { |
112 |
long delay, boolean userForcedSync, Set<AbstractTask> changedTasks) { |
| 114 |
getAllCategories taskList = TasksUiPlugin.getTaskListManager().getTaskList(); |
113 |
getAllCategories taskList = TasksUiPlugin.getTaskListManager().getTaskList(); |
| 115 |
final SynchronizeQueryJob job = new SynchronizeQueryJob(this, connector, repositoryQueries, taskList); |
114 |
final SynchronizeQueryJob job = new SynchronizeQueryJob(this, connector, repositoryQueries, taskList, changedTasks); |
| 116 |
job.setSynchChangedTasks(syncChangedTasks); |
115 |
// job.setSynchChangedTasks(syncChangedTasks); |
| 117 |
job.setForced(userForcedSync); |
116 |
job.setForced(userForcedSync); |
| 118 |
for (AbstractRepositoryQuery repositoryQuery : repositoryQueries) { |
117 |
for (AbstractRepositoryQuery repositoryQuery : repositoryQueries) { |
| 119 |
repositoryQuery.setCurrentlySynchronizing(true); |
118 |
repositoryQuery.setCurrentlySynchronizing(true); |
|
Lines 143-164
Link Here
|
| 143 |
* Synchronizes only those tasks that have changed since the last time the |
142 |
* Synchronizes only those tasks that have changed since the last time the |
| 144 |
* given repository was synchronized. Calls to this method update |
143 |
* given repository was synchronized. Calls to this method update |
| 145 |
* TaskRepository.syncTime. |
144 |
* TaskRepository.syncTime. |
|
|
145 |
* |
| 146 |
* @return tasks updated, or <code>null</code>, if there is no updated tasks found. |
| 146 |
*/ |
147 |
*/ |
| 147 |
public final void synchronizeChanged(final AbstractRepositoryConnector connector, final TaskRepository repository) { |
148 |
public final Set<AbstractTask> synchronizeChanged(final AbstractRepositoryConnector connector, |
|
|
149 |
final TaskRepository repository, IProgressMonitor monitor) { |
| 148 |
if (connector.getTaskDataHandler() != null) { |
150 |
if (connector.getTaskDataHandler() != null) { |
| 149 |
final SynchronizeChangedTasksJob getChangedTasksJob = new SynchronizeChangedTasksJob(connector, repository); |
151 |
|
| 150 |
getChangedTasksJob.setSystem(true); |
152 |
// THIS IS ONLY CALLED FROM OTHER JOBS, SO PROBABLY NO NEED TO CREATE ANOTHER NESTED JOB |
| 151 |
getChangedTasksJob.setRule(new RepositoryMutexRule(repository)); |
153 |
// final SynchronizeChangedTasksJob getChangedTasksJob = new SynchronizeChangedTasksJob(connector, repository); |
| 152 |
if (!forceSyncExecForTesting) { |
154 |
// getChangedTasksJob.setSystem(true); |
| 153 |
getChangedTasksJob.schedule(); |
155 |
// getChangedTasksJob.setRule(new RepositoryMutexRule(repository)); |
| 154 |
} else { |
156 |
// if (!forceSyncExecForTesting) { |
| 155 |
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { |
157 |
// getChangedTasksJob.schedule(); |
| 156 |
public void run() { |
158 |
// } else { |
| 157 |
getChangedTasksJob.run(new NullProgressMonitor()); |
159 |
// PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { |
|
|
160 |
// public void run() { |
| 161 |
// getChangedTasksJob.run(new NullProgressMonitor()); |
| 162 |
// } |
| 163 |
// }); |
| 164 |
// } |
| 165 |
|
| 166 |
getAllCategories taskList = TasksUiPlugin.getTaskListManager().getTaskList(); |
| 167 |
Set<AbstractTask> repositoryTasks = Collections.unmodifiableSet(taskList |
| 168 |
.getRepositoryTasks(repository.getUrl())); |
| 169 |
|
| 170 |
try { |
| 171 |
// XXX not sure if it is using right TaskFactory |
| 172 |
QueryHitCollector collector = new QueryHitCollector(taskList, new TaskFactory(repository)); |
| 173 |
|
| 174 |
final Set<AbstractTask> changedTasks = connector.getChangedSinceLastSync(repository, repositoryTasks, monitor, collector); |
| 175 |
if (changedTasks == null) { |
| 176 |
return changedTasks; |
| 177 |
} |
| 178 |
|
| 179 |
synchronize(connector, changedTasks, false, new JobChangeAdapter() { |
| 180 |
@Override |
| 181 |
public void done(IJobChangeEvent event) { |
| 182 |
if (!Platform.isRunning() || TasksUiPlugin.getRepositoryManager() == null) { |
| 183 |
return; |
| 184 |
} |
| 185 |
TasksUiPlugin.getRepositoryManager().setSyncTime(repository, |
| 186 |
connector.getLastSyncTimestamp(repository, changedTasks), |
| 187 |
TasksUiPlugin.getDefault().getRepositoriesFilePath()); |
| 158 |
} |
188 |
} |
| 159 |
}); |
189 |
}); |
|
|
190 |
|
| 191 |
return changedTasks; |
| 192 |
|
| 193 |
} catch (final CoreException e) { |
| 194 |
// ignore, indicates working offline |
| 195 |
// error reported in ui (tooltip and warning icon) |
| 160 |
} |
196 |
} |
| 161 |
} |
197 |
} |
|
|
198 |
return null; |
| 162 |
} |
199 |
} |
| 163 |
|
200 |
|
| 164 |
private class SynchronizeChangedTasksJob extends Job { |
201 |
private class SynchronizeChangedTasksJob extends Job { |
|
Lines 182-194
Link Here
|
| 182 |
.getRepositoryTasks(repository.getUrl())); |
219 |
.getRepositoryTasks(repository.getUrl())); |
| 183 |
|
220 |
|
| 184 |
try { |
221 |
try { |
| 185 |
changedTasks = connector.getChangedSinceLastSync(repository, repositoryTasks, monitor); |
222 |
QueryHitCollector collector = new QueryHitCollector(taskList, new TaskFactory(repository)); |
|
|
223 |
|
| 224 |
changedTasks = connector.getChangedSinceLastSync(repository, repositoryTasks, monitor, collector); |
| 186 |
|
225 |
|
| 187 |
if (changedTasks == null || changedTasks.size() == 0) { |
226 |
if (changedTasks == null || changedTasks.size() == 0) { |
| 188 |
return Status.OK_STATUS; |
227 |
return Status.OK_STATUS; |
| 189 |
} |
228 |
} |
|
|
229 |
|
| 230 |
final Set<AbstractTask> taskHits = collector.getTaskHits(); |
| 231 |
if(taskHits.isEmpty()) { |
| 232 |
return Status.OK_STATUS; |
| 233 |
} |
| 190 |
|
234 |
|
| 191 |
synchronize(connector, changedTasks, false, new JobChangeAdapter() { |
235 |
synchronize(connector, taskHits, false, new JobChangeAdapter() { |
| 192 |
|
236 |
|
| 193 |
@Override |
237 |
@Override |
| 194 |
public void done(IJobChangeEvent event) { |
238 |
public void done(IJobChangeEvent event) { |
|
Lines 196-202
Link Here
|
| 196 |
return; |
240 |
return; |
| 197 |
} |
241 |
} |
| 198 |
TasksUiPlugin.getRepositoryManager().setSyncTime(repository, |
242 |
TasksUiPlugin.getRepositoryManager().setSyncTime(repository, |
| 199 |
connector.getLastSyncTimestamp(repository, changedTasks), |
243 |
connector.getLastSyncTimestamp(repository, taskHits), |
| 200 |
TasksUiPlugin.getDefault().getRepositoriesFilePath()); |
244 |
TasksUiPlugin.getDefault().getRepositoriesFilePath()); |
| 201 |
} |
245 |
} |
| 202 |
}); |
246 |
}); |