|
|
c34739c |
From 23466c86ec128a29f0226236219c429e26690b43 Mon Sep 17 00:00:00 2001
|
|
|
c34739c |
From: Alexander Kurtakov <akurtako@redhat.com>
|
|
|
c34739c |
Date: Wed, 24 Jun 2015 09:02:55 +0300
|
|
|
c34739c |
Subject: [PATCH] Compile with Lucene 5.
|
|
|
c34739c |
|
|
|
c34739c |
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
|
|
|
c34739c |
---
|
|
|
c34739c |
.../META-INF/MANIFEST.MF | 4 +-
|
|
|
c34739c |
.../internal/tasks/index/core/TaskAnalyzer.java | 20 +--
|
|
|
c34739c |
.../internal/tasks/index/core/TaskListIndex.java | 146 +++++++++++----------
|
|
|
c34739c |
3 files changed, 90 insertions(+), 80 deletions(-)
|
|
|
c34739c |
|
|
|
8ee4213 |
diff --git a/org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF
|
|
|
c34739c |
index 2a3b1f8..78c5cfa 100644
|
|
|
aefb48a |
--- a/org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF
|
|
|
aefb48a |
+++ b/org.eclipse.mylyn.tasks.index.core/META-INF/MANIFEST.MF
|
|
|
8ee4213 |
@@ -7,7 +7,9 @@ Bundle-Vendor: %Bundle-Vendor
|
|
|
8ee4213 |
Require-Bundle: org.eclipse.core.runtime,
|
|
|
8ee4213 |
org.eclipse.mylyn.tasks.core;bundle-version="3.8.0",
|
|
|
8ee4213 |
org.eclipse.mylyn.commons.core;bundle-version="3.8.0",
|
|
|
8ee4213 |
- org.apache.lucene.core;bundle-version="[2.9.1,3.7.0)"
|
|
|
c34739c |
+ org.apache.lucene.core;bundle-version="[5.0.0,6.0.0)",
|
|
|
c34739c |
+ org.apache.lucene.queryparser;bundle-version="[5.0.0,6.0.0)",
|
|
|
c34739c |
+ org.apache.lucene.analyzers-common;bundle-version="[5.0.0,6.0.0)"
|
|
|
f105a74 |
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
|
|
8ee4213 |
Bundle-ActivationPolicy: lazy
|
|
|
8ee4213 |
Export-Package: org.eclipse.mylyn.internal.tasks.index.core;x-internal:=true
|
|
|
8ee4213 |
diff --git a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java
|
|
|
aefb48a |
index b1b88c1..581d390 100644
|
|
|
aefb48a |
--- a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java
|
|
|
aefb48a |
+++ b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskAnalyzer.java
|
|
|
aefb48a |
@@ -11,23 +11,27 @@
|
|
|
8ee4213 |
*******************************************************************************/
|
|
|
8ee4213 |
package org.eclipse.mylyn.internal.tasks.index.core;
|
|
|
8ee4213 |
|
|
|
8ee4213 |
-import org.apache.lucene.analysis.KeywordAnalyzer;
|
|
|
8ee4213 |
-import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;
|
|
|
8ee4213 |
+import java.util.HashMap;
|
|
|
8ee4213 |
+import java.util.Map;
|
|
|
8ee4213 |
+
|
|
|
8ee4213 |
+import org.apache.lucene.analysis.Analyzer;
|
|
|
8ee4213 |
+import org.apache.lucene.analysis.core.KeywordAnalyzer;
|
|
|
8ee4213 |
+import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
|
|
|
8ee4213 |
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
|
|
aefb48a |
-import org.apache.lucene.util.Version;
|
|
|
8ee4213 |
|
|
|
aefb48a |
/**
|
|
|
aefb48a |
* An analyzer that is aware of task fields
|
|
|
aefb48a |
- *
|
|
|
aefb48a |
+ *
|
|
|
aefb48a |
* @author David Green
|
|
|
aefb48a |
*/
|
|
|
8ee4213 |
class TaskAnalyzer {
|
|
|
8ee4213 |
|
|
|
8ee4213 |
public static PerFieldAnalyzerWrapper instance() {
|
|
|
8ee4213 |
- PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(Version.LUCENE_CURRENT));
|
|
|
8ee4213 |
- wrapper.addAnalyzer(TaskListIndex.FIELD_IDENTIFIER.getIndexKey(), new KeywordAnalyzer());
|
|
|
8ee4213 |
- wrapper.addAnalyzer(TaskListIndex.FIELD_TASK_KEY.getIndexKey(), new KeywordAnalyzer());
|
|
|
8ee4213 |
- wrapper.addAnalyzer(TaskListIndex.FIELD_REPOSITORY_URL.getIndexKey(), new KeywordAnalyzer());
|
|
|
8ee4213 |
+ Map<String, Analyzer> analyzerPerField = new HashMap<String, Analyzer>();
|
|
|
8ee4213 |
+ analyzerPerField.put(TaskListIndex.FIELD_IDENTIFIER.getIndexKey(), new KeywordAnalyzer());
|
|
|
8ee4213 |
+ analyzerPerField.put(TaskListIndex.FIELD_TASK_KEY.getIndexKey(), new KeywordAnalyzer());
|
|
|
8ee4213 |
+ analyzerPerField.put(TaskListIndex.FIELD_REPOSITORY_URL.getIndexKey(), new KeywordAnalyzer());
|
|
|
aefb48a |
+ PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer(), analyzerPerField);
|
|
|
8ee4213 |
return wrapper;
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
}
|
|
|
aefb48a |
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
|
|
|
c34739c |
index 90acbd2..78d8c0c 100644
|
|
|
aefb48a |
--- a/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java
|
|
|
aefb48a |
+++ b/org.eclipse.mylyn.tasks.index.core/src/org/eclipse/mylyn/internal/tasks/index/core/TaskListIndex.java
|
|
|
c34739c |
@@ -17,6 +17,12 @@ import static org.eclipse.mylyn.tasks.core.data.TaskAttribute.META_INDEXED_AS_CO
|
|
|
c34739c |
import java.io.File;
|
|
|
c34739c |
import java.io.FileNotFoundException;
|
|
|
c34739c |
import java.io.IOException;
|
|
|
c34739c |
+import java.nio.file.FileVisitResult;
|
|
|
c34739c |
+import java.nio.file.Files;
|
|
|
c34739c |
+import java.nio.file.Path;
|
|
|
c34739c |
+import java.nio.file.Paths;
|
|
|
c34739c |
+import java.nio.file.SimpleFileVisitor;
|
|
|
c34739c |
+import java.nio.file.attribute.BasicFileAttributes;
|
|
|
c34739c |
import java.util.ArrayList;
|
|
|
c34739c |
import java.util.Collection;
|
|
|
c34739c |
import java.util.Collections;
|
|
|
c34739c |
@@ -36,14 +42,18 @@ import java.util.logging.Logger;
|
|
|
aefb48a |
import org.apache.lucene.document.DateTools;
|
|
|
aefb48a |
import org.apache.lucene.document.DateTools.Resolution;
|
|
|
8ee4213 |
import org.apache.lucene.document.Document;
|
|
|
aefb48a |
-import org.apache.lucene.document.Field;
|
|
|
8ee4213 |
import org.apache.lucene.document.Field.Store;
|
|
|
8ee4213 |
+import org.apache.lucene.document.StringField;
|
|
|
aefb48a |
+import org.apache.lucene.document.TextField;
|
|
|
8ee4213 |
import org.apache.lucene.index.CorruptIndexException;
|
|
|
8ee4213 |
+import org.apache.lucene.index.DirectoryReader;
|
|
|
8ee4213 |
import org.apache.lucene.index.IndexReader;
|
|
|
8ee4213 |
import org.apache.lucene.index.IndexWriter;
|
|
|
8ee4213 |
+import org.apache.lucene.index.IndexWriterConfig;
|
|
|
8ee4213 |
+import org.apache.lucene.index.IndexableField;
|
|
|
8ee4213 |
import org.apache.lucene.index.Term;
|
|
|
8ee4213 |
-import org.apache.lucene.queryParser.ParseException;
|
|
|
8ee4213 |
-import org.apache.lucene.queryParser.QueryParser;
|
|
|
8ee4213 |
+import org.apache.lucene.queryparser.classic.ParseException;
|
|
|
8ee4213 |
+import org.apache.lucene.queryparser.classic.QueryParser;
|
|
|
8ee4213 |
import org.apache.lucene.search.BooleanClause;
|
|
|
8ee4213 |
import org.apache.lucene.search.BooleanClause.Occur;
|
|
|
8ee4213 |
import org.apache.lucene.search.BooleanQuery;
|
|
|
c34739c |
@@ -57,7 +67,7 @@ import org.apache.lucene.store.Directory;
|
|
|
aefb48a |
import org.apache.lucene.store.FSDirectory;
|
|
|
aefb48a |
import org.apache.lucene.store.LockObtainFailedException;
|
|
|
aefb48a |
import org.apache.lucene.store.NIOFSDirectory;
|
|
|
c34739c |
-import org.apache.lucene.util.Version;
|
|
|
aefb48a |
+import org.apache.lucene.util.InfoStream;
|
|
|
aefb48a |
import org.eclipse.core.runtime.Assert;
|
|
|
aefb48a |
import org.eclipse.core.runtime.CoreException;
|
|
|
c34739c |
import org.eclipse.core.runtime.IProgressMonitor;
|
|
|
c34739c |
@@ -437,7 +450,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
c34739c |
}
|
|
|
c34739c |
}
|
|
|
c34739c |
try {
|
|
|
c34739c |
- directory = new NIOFSDirectory(indexLocation);
|
|
|
c34739c |
+ directory = new NIOFSDirectory(Paths.get(indexLocation.toURI()));
|
|
|
c34739c |
} catch (IOException e) {
|
|
|
c34739c |
StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN,
|
|
|
c34739c |
"Cannot create task list index", e)); //$NON-NLS-1$
|
|
|
c34739c |
@@ -591,12 +604,6 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
8ee4213 |
} catch (IOException e) {
|
|
|
8ee4213 |
StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN,
|
|
|
8ee4213 |
"Unexpected failure within task list index", e)); //$NON-NLS-1$
|
|
|
8ee4213 |
- } finally {
|
|
|
8ee4213 |
- try {
|
|
|
8ee4213 |
- indexSearcher.close();
|
|
|
8ee4213 |
- } catch (IOException e) {
|
|
|
8ee4213 |
- // ignore
|
|
|
8ee4213 |
- }
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
|
|
|
8ee4213 |
} else {
|
|
|
c34739c |
@@ -674,12 +681,6 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
8ee4213 |
} catch (IOException e) {
|
|
|
8ee4213 |
StatusHandler.log(new Status(IStatus.ERROR, TasksIndexCore.ID_PLUGIN,
|
|
|
8ee4213 |
"Unexpected failure within task list index", e)); //$NON-NLS-1$
|
|
|
8ee4213 |
- } finally {
|
|
|
8ee4213 |
- try {
|
|
|
8ee4213 |
- indexSearcher.close();
|
|
|
8ee4213 |
- } catch (IOException e) {
|
|
|
8ee4213 |
- // ignore
|
|
|
8ee4213 |
- }
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
} finally {
|
|
|
c34739c |
@@ -696,7 +697,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
aefb48a |
if (!hasBooleanSpecifiers && defaultField.equals(FIELD_SUMMARY) && !containsSpecialCharacters(patternString)) {
|
|
|
aefb48a |
return new PrefixQuery(new Term(defaultField.getIndexKey(), patternString));
|
|
|
aefb48a |
}
|
|
|
aefb48a |
- QueryParser qp = new QueryParser(Version.LUCENE_CURRENT, defaultField.getIndexKey(), TaskAnalyzer.instance());
|
|
|
aefb48a |
+ QueryParser qp = new QueryParser(defaultField.getIndexKey(), TaskAnalyzer.instance());
|
|
|
aefb48a |
Query q;
|
|
|
aefb48a |
try {
|
|
|
aefb48a |
q = qp.parse(patternString);
|
|
|
c34739c |
@@ -769,7 +770,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
8ee4213 |
try {
|
|
|
8ee4213 |
synchronized (this) {
|
|
|
8ee4213 |
if (indexReader == null) {
|
|
|
8ee4213 |
- indexReader = IndexReader.open(directory, true);
|
|
|
8ee4213 |
+ indexReader = DirectoryReader.open(directory);
|
|
|
8ee4213 |
lastResults = null;
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
return indexReader;
|
|
|
c34739c |
@@ -983,15 +984,14 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
8ee4213 |
if (value == null) {
|
|
|
8ee4213 |
return;
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
- Field field = document.getField(indexField.getIndexKey());
|
|
|
8ee4213 |
+ IndexableField field = document.getField(indexField.getIndexKey());
|
|
|
8ee4213 |
if (field == null) {
|
|
|
aefb48a |
- field = new Field(indexField.getIndexKey(), value, Store.YES,
|
|
|
aefb48a |
- org.apache.lucene.document.Field.Index.ANALYZED);
|
|
|
aefb48a |
+ field = new TextField(indexField.getIndexKey(), value, Store.YES);
|
|
|
aefb48a |
document.add(field);
|
|
|
8ee4213 |
} else {
|
|
|
8ee4213 |
String existingValue = field.stringValue();
|
|
|
8ee4213 |
if (!indexField.equals(FIELD_PERSON) || !existingValue.contains(value)) {
|
|
|
8ee4213 |
- field.setValue(existingValue + " " + value); //$NON-NLS-1$
|
|
|
8ee4213 |
+ document.add(new StringField(field.name(), existingValue + " " + value, Store.YES)); //$NON-NLS-1$
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
}
|
|
|
8011d3c |
@@ -1004,13 +1004,12 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
8ee4213 |
// move the date by the GMT offset if there is any
|
|
|
8ee4213 |
|
|
|
8ee4213 |
String value = DateTools.dateToString(date, Resolution.HOUR);
|
|
|
8ee4213 |
- Field field = document.getField(indexField.getIndexKey());
|
|
|
8ee4213 |
+ IndexableField field = document.getField(indexField.getIndexKey());
|
|
|
8ee4213 |
if (field == null) {
|
|
|
aefb48a |
- field = new Field(indexField.getIndexKey(), value, Store.YES,
|
|
|
aefb48a |
- org.apache.lucene.document.Field.Index.ANALYZED);
|
|
|
aefb48a |
+ field = new TextField(indexField.getIndexKey(), value, Store.YES);
|
|
|
8ee4213 |
document.add(field);
|
|
|
8ee4213 |
} else {
|
|
|
8ee4213 |
- field.setValue(value);
|
|
|
8ee4213 |
+ document.add(new StringField(field.name(), value, Store.YES));
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
}
|
|
|
8ee4213 |
|
|
|
c34739c |
@@ -1069,7 +1068,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
8ee4213 |
try {
|
|
|
8ee4213 |
if (!rebuildIndex) {
|
|
|
8ee4213 |
try {
|
|
|
8ee4213 |
- IndexReader reader = IndexReader.open(directory, false);
|
|
|
8ee4213 |
+ IndexReader reader = DirectoryReader.open(directory);
|
|
|
8ee4213 |
reader.close();
|
|
|
8ee4213 |
} catch (CorruptIndexException e) {
|
|
|
8ee4213 |
rebuildIndex = true;
|
|
|
c34739c |
@@ -1216,7 +1215,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
bb6e17f |
writer = createIndexWriter(true);
|
|
|
bb6e17f |
} catch (CorruptIndexException e) {
|
|
|
bb6e17f |
if (directory instanceof FSDirectory) {
|
|
|
bb6e17f |
- cleanDirectory(((FSDirectory) directory).getFile());
|
|
|
bb6e17f |
+ cleanDirectory(((FSDirectory) directory).getDirectory());
|
|
|
bb6e17f |
writer = createIndexWriter(true);
|
|
|
bb6e17f |
} else {
|
|
|
bb6e17f |
throw e;
|
|
|
c34739c |
@@ -1248,23 +1247,29 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
c34739c |
return multiStatus;
|
|
|
c34739c |
}
|
|
|
c34739c |
|
|
|
c34739c |
- private void cleanDirectory(File file) throws IOException {
|
|
|
c34739c |
- if (file.exists()) {
|
|
|
c34739c |
- File[] children = file.listFiles();
|
|
|
c34739c |
- if (children != null) {
|
|
|
c34739c |
- for (File child : children) {
|
|
|
c34739c |
- if (child.isDirectory()) {
|
|
|
c34739c |
- cleanDirectory(child);
|
|
|
c34739c |
- }
|
|
|
c34739c |
- child.delete();
|
|
|
c34739c |
+ private void cleanDirectory(Path file) throws IOException {
|
|
|
c34739c |
+ if (Files.exists(file)) {
|
|
|
c34739c |
+ Files.walkFileTree(file, new SimpleFileVisitor<Path>() {
|
|
|
c34739c |
+ @Override
|
|
|
c34739c |
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
|
|
c34739c |
+ Files.delete(file);
|
|
|
c34739c |
+ return FileVisitResult.CONTINUE;
|
|
|
c34739c |
}
|
|
|
c34739c |
- }
|
|
|
c34739c |
+
|
|
|
c34739c |
+ @Override
|
|
|
c34739c |
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
|
|
|
c34739c |
+ Files.delete(dir);
|
|
|
c34739c |
+ return FileVisitResult.CONTINUE;
|
|
|
c34739c |
+ }
|
|
|
c34739c |
+ });
|
|
|
c34739c |
}
|
|
|
c34739c |
}
|
|
|
8ee4213 |
|
|
|
8011d3c |
protected IndexWriter createIndexWriter(boolean create)
|
|
|
8011d3c |
throws CorruptIndexException, LockObtainFailedException, IOException {
|
|
|
bb6e17f |
- return new IndexWriter(directory, TaskAnalyzer.instance(), create, IndexWriter.MaxFieldLength.UNLIMITED);
|
|
|
c34739c |
+ IndexWriterConfig writerConfig = new IndexWriterConfig(TaskAnalyzer.instance());
|
|
|
aefb48a |
+ writerConfig.setInfoStream(InfoStream.NO_OUTPUT);
|
|
|
aefb48a |
+ return new IndexWriter(directory, writerConfig);
|
|
|
bb6e17f |
}
|
|
|
8ee4213 |
|
|
|
bb6e17f |
/**
|
|
|
c34739c |
@@ -1283,8 +1288,7 @@ public class TaskListIndex implements ITaskDataManagerListener, ITaskListChangeL
|
|
|
aefb48a |
|
|
|
aefb48a |
Document document = new Document();
|
|
|
aefb48a |
|
|
|
aefb48a |
- document.add(new Field(FIELD_IDENTIFIER.getIndexKey(), task.getHandleIdentifier(), Store.YES,
|
|
|
aefb48a |
- org.apache.lucene.document.Field.Index.ANALYZED));
|
|
|
aefb48a |
+ document.add(new TextField(FIELD_IDENTIFIER.getIndexKey(), task.getHandleIdentifier(), Store.YES));
|
|
|
aefb48a |
if (taskData == null) {
|
|
|
aefb48a |
if ("local".equals(((AbstractTask) task).getConnectorKind())) { //$NON-NLS-1$
|
|
|
aefb48a |
addIndexedAttributes(document, task);
|
|
|
c34739c |
--
|
|
|
c34739c |
2.4.3
|
|
|
c34739c |
|