rewrite CopyCompare to remove its ThreadLocal which causes a sonar code smell

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1896536 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2021-12-30 20:02:03 +00:00
parent 32311e42c2
commit 9a5dec078b
3 changed files with 17 additions and 12 deletions

View File

@ -62,9 +62,8 @@ import org.apache.poi.util.TempFile;
*/ */
@SuppressWarnings({"java:S106","java:S4823"}) @SuppressWarnings({"java:S106","java:S4823"})
public final class CopyCompare { public final class CopyCompare {
private CopyCompare() {}
private static final ThreadLocal<PrintStream> out = ThreadLocal.withInitial(() -> System.out); private PrintStream out = System.out;
/** /**
* Runs the example program. The application expects one or two arguments: * Runs the example program. The application expects one or two arguments:
@ -83,6 +82,10 @@ public final class CopyCompare {
* supported. * supported.
*/ */
public static void main(final String[] args) throws IOException { public static void main(final String[] args) throws IOException {
new CopyCompare().run(args);
}
public void run(String[] args) throws IOException {
String originalFileName = null; String originalFileName = null;
String copyFileName = null; String copyFileName = null;
@ -120,12 +123,12 @@ public final class CopyCompare {
POIFSFileSystem cpfs = new POIFSFileSystem(new File(copyFileName))) { POIFSFileSystem cpfs = new POIFSFileSystem(new File(copyFileName))) {
final DirectoryEntry oRoot = opfs.getRoot(); final DirectoryEntry oRoot = opfs.getRoot();
final DirectoryEntry cRoot = cpfs.getRoot(); final DirectoryEntry cRoot = cpfs.getRoot();
out.get().println(EntryUtils.areDirectoriesIdentical(oRoot, cRoot) ? "Equal" : "Not equal"); out.println(EntryUtils.areDirectoriesIdentical(oRoot, cRoot) ? "Equal" : "Not equal");
} }
} }
public static void setOut(PrintStream ps) { public void setOut(PrintStream ps) {
out.set(ps); out = ps;
} }
private interface InputStreamSupplier { private interface InputStreamSupplier {

View File

@ -33,7 +33,6 @@ import java.util.Set;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.examples.hpsf.CopyCompare; import org.apache.poi.examples.hpsf.CopyCompare;
import org.apache.poi.extractor.POITextExtractor;
import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.HPSFPropertiesOnlyDocument; import org.apache.poi.hpsf.HPSFPropertiesOnlyDocument;
import org.apache.poi.hpsf.PropertySet; import org.apache.poi.hpsf.PropertySet;
@ -129,11 +128,13 @@ public class HPSFFileHandler extends POIFSFileHandler {
public void handleAdditional(File file) throws Exception { public void handleAdditional(File file) throws Exception {
assumeFalse(EXCLUDES_HANDLE_ADD.contains(file.getParentFile().getName()+"/"+file.getName())); assumeFalse(EXCLUDES_HANDLE_ADD.contains(file.getParentFile().getName()+"/"+file.getName()));
UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(); try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream()) {
PrintStream psNew = new PrintStream(bos, true, "ISO-8859-1"); PrintStream psNew = new PrintStream(bos, true, "ISO-8859-1");
CopyCompare.setOut(psNew); CopyCompare copyCompare = new CopyCompare();
CopyCompare.main(new String[]{file.getAbsolutePath(), copyOutput.get().getAbsolutePath()}); copyCompare.setOut(psNew);
assertEquals("Equal" + NL, bos.toString(StandardCharsets.UTF_8)); CopyCompare.main(new String[]{file.getAbsolutePath(), copyOutput.get().getAbsolutePath()});
assertEquals("Equal" + NL, bos.toString(StandardCharsets.UTF_8));
}
} }

View File

@ -56,7 +56,8 @@ public class ThemesTable extends POIXMLDocumentPart implements Themes {
return values()[idx]; return values()[idx];
} }
ThemeElement(int idx, String name) { ThemeElement(int idx, String name) {
this.idx = idx; this.name = name; this.idx = idx;
this.name = name;
} }
public final int idx; public final int idx;
public final String name; public final String name;