diff options
author | Steffen Pingel | 2012-03-02 19:35:11 +0000 |
---|---|---|
committer | David Green | 2012-03-02 19:35:11 +0000 |
commit | 2befecfd0c9ea65a84504ad94eea486e317407cf (patch) | |
tree | d8ae786d9caa90e9abcf7ea5a6978637e207d8ff /org.eclipse.mylyn.tasks.index.core | |
parent | 20cefdff005db68155f001f06733accae2382a1c (diff) | |
download | org.eclipse.mylyn.tasks-2befecfd0c9ea65a84504ad94eea486e317407cf.tar.gz org.eclipse.mylyn.tasks-2befecfd0c9ea65a84504ad94eea486e317407cf.tar.xz org.eclipse.mylyn.tasks-2befecfd0c9ea65a84504ad94eea486e317407cf.zip |
bug 372725: handle changes to task data directory
https://bugs.eclipse.org/bugs/show_bug.cgi?id=372725
Change-Id: I24cc1a042b41a0fc83c28638b78c25fb74a818f1
Diffstat (limited to 'org.eclipse.mylyn.tasks.index.core')
-rw-r--r-- | org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java index 1d6b5af36..00ee23ea9 100644 --- a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java +++ b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java @@ -110,6 +110,7 @@ import org.eclipse.mylyn.tasks.core.data.TaskData; * </p> * * @author David Green + * @author Steffen Pingel */ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeListener, IRepositoryListener { @@ -337,21 +338,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL Assert.isNotNull(indexLocation); this.startupDelay = startupDelay; - if (!indexLocation.exists()) { - rebuildIndex = true; - if (!indexLocation.mkdirs()) { - StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN, - "Cannot create task list index folder: " + indexLocation)); //$NON-NLS-1$ - } - } - if (indexLocation.exists() && indexLocation.isDirectory()) { - try { - directory = new NIOFSDirectory(indexLocation); - } catch (IOException e) { - StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN, - "Cannot create task list index", e)); //$NON-NLS-1$ - } - } + setLocationInternal(indexLocation); initialize(); } @@ -393,6 +380,62 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL this.reindexDelay = reindexDelay; } + public void setLocation(File indexLocation) { + try { + waitUntilIdle(); + } catch (InterruptedException e1) { + // ignore + } + setLocationInternal(indexLocation); + rebuildIndex = true; + scheduleIndexMaintenance(MaintainIndexType.STARTUP); + } + + private void setLocationInternal(File indexLocation) { + final boolean newLocationExists = indexLocation.exists(); + if (!newLocationExists) { + if (!indexLocation.mkdirs()) { + StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN, + "Cannot create task list index folder: " + indexLocation)); //$NON-NLS-1$ + } + } + + Lock writeLock = indexReaderLock.writeLock(); + writeLock.lock(); + try { + synchronized (this) { + if (indexReader != null) { + try { + indexReader.close(); + } catch (IOException e) { + // ignore + } + indexReader = null; + } + + if (indexLocation.exists() && indexLocation.isDirectory()) { + if (directory != null) { + try { + directory.close(); + } catch (IOException e) { + StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN, + "Cannot close index: " + e.getMessage(), e)); //$NON-NLS-1$ + } + } + try { + directory = new NIOFSDirectory(indexLocation); + } catch (IOException e) { + StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN, + "Cannot create task list index", e)); //$NON-NLS-1$ + } + } + + } + } finally { + writeLock.unlock(); + } + } + /** * the default field used to match tasks when unspecified in the query */ |