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