You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2019/10/26 15:42:13 UTC
svn commit: r1869005 - in /jackrabbit/oak/branches/1.4: ./
oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/sort/StringSort.java
Author: reschke
Date: Sat Oct 26 15:42:12 2019
New Revision: 1869005
URL: http://svn.apache.org/viewvc?rev=1869005&view=rev
Log:
OAK-7547: commons: avoid use of Guava beta APIs in StringSort (merged r1833702 into 1.4)
Modified:
jackrabbit/oak/branches/1.4/ (props changed)
jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/sort/StringSort.java
Propchange: jackrabbit/oak/branches/1.4/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1833702
Modified: jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/sort/StringSort.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/sort/StringSort.java?rev=1869005&r1=1869004&r2=1869005&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/sort/StringSort.java (original)
+++ jackrabbit/oak/branches/1.4/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/sort/StringSort.java Sat Oct 26 15:42:12 2019
@@ -19,13 +19,19 @@
package org.apache.jackrabbit.oak.commons.sort;
+import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.io.Reader;
import java.nio.charset.Charset;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
@@ -33,8 +39,6 @@ import java.util.List;
import com.google.common.base.Charsets;
import com.google.common.collect.Lists;
-import com.google.common.io.Closer;
-import com.google.common.io.Files;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
@@ -184,7 +188,7 @@ public class StringSort implements Itera
if (idFile == null) {
idFile = new File(workDir, "strings.txt");
sortedFile = new File(workDir, "strings-sorted.txt");
- writer = Files.newWriter(idFile, charset);
+ writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(idFile), charset));
}
return writer;
}
@@ -210,7 +214,8 @@ public class StringSort implements Itera
}
public Iterator<String> getIterator() throws IOException {
- CloseableIterator itr = new CloseableIterator(Files.newReader(sortedFile, charset));
+ CloseableIterator itr = new CloseableIterator(
+ new BufferedReader(new InputStreamReader(new FileInputStream(sortedFile), charset)));
openedIterators.add(itr);
return itr;
}
@@ -222,21 +227,21 @@ public class StringSort implements Itera
@Override
public void close() throws IOException {
- Closer closer = Closer.create();
+ List<Closeable> closer = new ArrayList<Closeable>();
try {
- //Closing is done in LIFO manner!
- closer.register(new Closeable() {
+ // Closing is done in LIFO manner!
+ closer.add(0, new Closeable() {
@Override
public void close() throws IOException {
FileUtils.deleteDirectory(workDir);
}
});
- closer.register(writer);
+ closer.add(0, writer);
for (CloseableIterator citr : openedIterators) {
- closer.register(citr);
+ closer.add(0, citr);
}
} finally {
- closer.close();
+ closeAll(closer);
}
}
@@ -262,6 +267,25 @@ public class StringSort implements Itera
+ TEMP_DIR_ATTEMPTS + " attempts (tried "
+ baseName + "0 to " + baseName + (TEMP_DIR_ATTEMPTS - 1) + ')');
}
+
+ // inspired by Guava Closer, see
+ // https://google.github.io/guava/releases/19.0/api/docs/com/google/common/io/Closer.html
+ private static void closeAll(List<Closeable> closer) throws IOException {
+ IOException ioex = null;
+ for (Closeable c : closer) {
+ try {
+ c.close();
+ } catch (IOException mostlyIgnored) {
+ if (ioex == null) {
+ ioex = mostlyIgnored;
+ }
+ }
+
+ if (ioex != null) {
+ throw ioex;
+ }
+ }
+ }
}
private static class CloseableIterator extends LineIterator implements Closeable {