From 04b2773baee1007413d78514c09c8392d3797dfb Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Sat, 30 Sep 2023 10:44:29 -0400 Subject: [PATCH] Reuse Commons IO --- pom.xml | 1 - .../org/apache/commons/csv/CSVFormat.java | 2 + .../org/apache/commons/csv/CSVParser.java | 8 +- .../org/apache/commons/csv/CSVPrinter.java | 17 +- .../java/org/apache/commons/csv/IOUtils.java | 147 ------------------ .../apache/commons/csv/CSVPrinterTest.java | 1 + .../org/apache/commons/csv/IOUtilsTest.java | 33 ---- 7 files changed, 21 insertions(+), 188 deletions(-) delete mode 100644 src/main/java/org/apache/commons/csv/IOUtils.java delete mode 100644 src/test/java/org/apache/commons/csv/IOUtilsTest.java diff --git a/pom.xml b/pom.xml index 243954bc..e8297b0d 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,6 @@ commons-io commons-io 2.14.0 - test org.apache.commons diff --git a/src/main/java/org/apache/commons/csv/CSVFormat.java b/src/main/java/org/apache/commons/csv/CSVFormat.java index d6218213..c89d6d4e 100644 --- a/src/main/java/org/apache/commons/csv/CSVFormat.java +++ b/src/main/java/org/apache/commons/csv/CSVFormat.java @@ -48,6 +48,8 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import org.apache.commons.io.IOUtils; + /** * Specifies the format of a CSV file for parsing and writing. * diff --git a/src/main/java/org/apache/commons/csv/CSVParser.java b/src/main/java/org/apache/commons/csv/CSVParser.java index 4ce3774b..85c7d8ea 100644 --- a/src/main/java/org/apache/commons/csv/CSVParser.java +++ b/src/main/java/org/apache/commons/csv/CSVParser.java @@ -47,6 +47,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; +import org.apache.commons.io.function.Uncheck; + /** * Parses CSV files according to the specified format. * @@ -144,11 +146,7 @@ public final class CSVParser implements Iterable, Closeable { private CSVRecord current; private CSVRecord getNextRecord() { - try { - return CSVParser.this.nextRecord(); - } catch (final IOException e) { - throw new UncheckedIOException("Exception reading next record: " + e.toString(), e); - } + return Uncheck.get(CSVParser.this::nextRecord); } @Override diff --git a/src/main/java/org/apache/commons/csv/CSVPrinter.java b/src/main/java/org/apache/commons/csv/CSVPrinter.java index 421de13e..39ddb51d 100644 --- a/src/main/java/org/apache/commons/csv/CSVPrinter.java +++ b/src/main/java/org/apache/commons/csv/CSVPrinter.java @@ -70,6 +70,19 @@ import java.util.stream.Stream; */ public final class CSVPrinter implements Flushable, Closeable { + /** + * Throws the given throwable. + * + * @param The throwable cast type. + * @param throwable The throwable to rethrow. + * @return nothing because we throw. + * @throws T Always thrown. + */ + @SuppressWarnings("unchecked") + private static RuntimeException rethrow(final Throwable throwable) throws T { + throw (T) throwable; + } + /** The place that the values get written. */ private final Appendable appendable; @@ -300,7 +313,7 @@ public final class CSVPrinter implements Flushable, Closeable { try { print(t); } catch (final IOException e) { - throw IOUtils.rethrow(e); + throw rethrow(e); } }); println(); @@ -489,7 +502,7 @@ public final class CSVPrinter implements Flushable, Closeable { try { printRecordObject(t); } catch (final IOException e) { - throw IOUtils.rethrow(e); + throw rethrow(e); } }); } diff --git a/src/main/java/org/apache/commons/csv/IOUtils.java b/src/main/java/org/apache/commons/csv/IOUtils.java deleted file mode 100644 index 4fb7120f..00000000 --- a/src/main/java/org/apache/commons/csv/IOUtils.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.csv; - -import java.io.IOException; -import java.io.Reader; -import java.io.Writer; -import java.nio.Buffer; -import java.nio.CharBuffer; - -/** Copied from Apache Commons IO. */ -final class IOUtils { - - /** - * The default buffer size ({@value}). - */ - static final int DEFAULT_BUFFER_SIZE = 1024 * 4; - - /** - * Represents the end-of-file (or stream). - */ - private static final int EOF = -1; - - /** - * Copies chars from a large (over 2GB) {@code Reader} to an {@code Appendable}. - *

- * This method buffers the input internally, so there is no need to use a - * {@code BufferedReader}. - *

- * The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}. - * - * @param input the {@code Reader} to read from - * @param output the {@code Appendable} to append to - * @return the number of characters copied - * @throws NullPointerException if the input or output is null - * @throws IOException if an I/O error occurs - * @since 2.7 - */ - static long copy(final Reader input, final Appendable output) throws IOException { - return copy(input, output, CharBuffer.allocate(DEFAULT_BUFFER_SIZE)); - } - - /** - * Copies chars from a large (over 2GB) {@code Reader} to an {@code Appendable}. - *

- * This method uses the provided buffer, so there is no need to use a - * {@code BufferedReader}. - *

- * - * @param input the {@code Reader} to read from - * @param output the {@code Appendable} to write to - * @param buffer the buffer to be used for the copy - * @return the number of characters copied - * @throws NullPointerException if the input or output is null - * @throws IOException if an I/O error occurs - * @since 2.7 - */ - static long copy(final Reader input, final Appendable output, final CharBuffer buffer) throws IOException { - long count = 0; - int n; - while (EOF != (n = input.read(buffer))) { - ((Buffer) buffer).flip(); - output.append(buffer, 0, n); - count += n; - } - return count; - } - - /** - * Copies chars from a large (over 2GB) {@code Reader} to a {@code Writer}. - *

- * This method buffers the input internally, so there is no need to use a - * {@code BufferedReader}. - *

- *

- * The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}. - *

- * - * @param input the {@code Reader} to read from - * @param output the {@code Writer} to write to - * @return the number of characters copied - * @throws NullPointerException if the input or output is null - * @throws IOException if an I/O error occurs - * @since 1.3 - */ - static long copyLarge(final Reader input, final Writer output) throws IOException { - return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]); - } - - /** - * Copies chars from a large (over 2GB) {@code Reader} to a {@code Writer}. - *

- * This method uses the provided buffer, so there is no need to use a - * {@code BufferedReader}. - *

- * - * @param input the {@code Reader} to read from - * @param output the {@code Writer} to write to - * @param buffer the buffer to be used for the copy - * @return the number of characters copied - * @throws NullPointerException if the input or output is null - * @throws IOException if an I/O error occurs - * @since 2.2 - */ - static long copyLarge(final Reader input, final Writer output, final char[] buffer) throws IOException { - long count = 0; - int n; - while (EOF != (n = input.read(buffer))) { - output.write(buffer, 0, n); - count += n; - } - return count; - } - - /** - * Throws the given throwable. - * - * @param The throwable cast type. - * @param throwable The throwable to rethrow. - * @return nothing because we throw. - * @throws T Always thrown. - */ - @SuppressWarnings("unchecked") - static RuntimeException rethrow(final Throwable throwable) throws T { - throw (T) throwable; - } - - /** No instances. */ - private IOUtils() { - // Noop - } - -} diff --git a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java index 33179246..6cc542dd 100644 --- a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java +++ b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java @@ -61,6 +61,7 @@ import java.util.Vector; import java.util.stream.Stream; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.NullOutputStream; import org.apache.commons.lang3.StringUtils; import org.h2.tools.SimpleResultSet; diff --git a/src/test/java/org/apache/commons/csv/IOUtilsTest.java b/src/test/java/org/apache/commons/csv/IOUtilsTest.java deleted file mode 100644 index 689fd195..00000000 --- a/src/test/java/org/apache/commons/csv/IOUtilsTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.commons.csv; - -import static org.junit.jupiter.api.Assertions.assertThrowsExactly; - -import java.io.IOException; - -import org.junit.jupiter.api.Test; - -public class IOUtilsTest { - - @Test - public void testRethrow() { - assertThrowsExactly(IOException.class, () -> IOUtils.rethrow(new IOException())); - } - -}