diff --git a/build.gradle b/build.gradle index 471450a..c27c25a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id "java" + id "java-library" id 'maven-publish' id 'signing' id 'jacoco' @@ -45,19 +45,22 @@ jacocoTestReport { compileJava { options.compilerArgs = ['-proc:none', '-Xlint:all','-Werror','-Xdiags:verbose'] } + compileTestJava { options.compilerArgs = ['-proc:none', '-Xlint:all','-Werror','-Xdiags:verbose'] } + dependencies { - implementation 'net.sf.jopt-simple:jopt-simple:5.0.3' + api 'net.sf.jopt-simple:jopt-simple:5.0.3' + api 'com.google.code.gson:gson:2.8.9' + api 'org.freemarker:freemarker:2.3.30' + implementation 'org.apache.commons:commons-lang3:3.4' implementation 'org.apache.logging.log4j:log4j-api:2.17.1' - implementation 'org.apache.logging.log4j:log4j-core:2.15.0' - implementation 'org.freemarker:freemarker:2.3.30' - implementation 'com.google.code.gson:gson:2.2.2' + runtimeOnly 'org.apache.logging.log4j:log4j-core:2.17.1' testImplementation 'commons-io:commons-io:2.11.0' - testImplementation 'org.testng:testng:6.9.6' + testImplementation 'org.testng:testng:7.7.0' testImplementation 'org.mockito:mockito-core:4.6.1' } diff --git a/src/main/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParser.java b/src/main/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParser.java index babacc4..05f15c4 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParser.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParser.java @@ -2,7 +2,7 @@ import joptsimple.*; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; +import org.broadinstitute.barclay.utils.Pair; import org.broadinstitute.barclay.utils.Utils; import java.io.BufferedReader; diff --git a/src/main/java/org/broadinstitute/barclay/argparser/CommandLineParser.java b/src/main/java/org/broadinstitute/barclay/argparser/CommandLineParser.java index 32d8fd4..17b91fb 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/CommandLineParser.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/CommandLineParser.java @@ -1,6 +1,6 @@ package org.broadinstitute.barclay.argparser; -import org.apache.commons.lang3.tuple.Pair; +import org.broadinstitute.barclay.utils.Pair; import java.io.PrintStream; import java.util.List; @@ -91,6 +91,6 @@ interface ClpEnum { * is the ArgumentDefinition object itself, and the second element is the actual value of the argument field. The second * element will be null for uninitialized fields. */ - List> gatherArgumentValuesOfType( final Class type ); + List> gatherArgumentValuesOfType(final Class type ); } diff --git a/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java b/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java index 9ad75b4..74beceb 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/LegacyCommandLineArgumentParser.java @@ -23,9 +23,9 @@ */ package org.broadinstitute.barclay.argparser; -import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.broadinstitute.barclay.utils.Pair; import org.broadinstitute.barclay.utils.Utils; import java.io.BufferedReader; diff --git a/src/main/java/org/broadinstitute/barclay/argparser/NamedArgumentDefinition.java b/src/main/java/org/broadinstitute/barclay/argparser/NamedArgumentDefinition.java index 9b6e5d1..66493e7 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/NamedArgumentDefinition.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/NamedArgumentDefinition.java @@ -1,8 +1,8 @@ package org.broadinstitute.barclay.argparser; -import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.broadinstitute.barclay.utils.Pair; import org.broadinstitute.barclay.utils.Utils; import java.io.PrintStream; diff --git a/src/main/java/org/broadinstitute/barclay/argparser/TaggedArgumentParser.java b/src/main/java/org/broadinstitute/barclay/argparser/TaggedArgumentParser.java index 2b44893..8b6f501 100644 --- a/src/main/java/org/broadinstitute/barclay/argparser/TaggedArgumentParser.java +++ b/src/main/java/org/broadinstitute/barclay/argparser/TaggedArgumentParser.java @@ -1,6 +1,6 @@ package org.broadinstitute.barclay.argparser; -import org.apache.commons.lang3.tuple.Pair; +import org.broadinstitute.barclay.utils.Pair; import org.broadinstitute.barclay.utils.Utils; import java.util.*; diff --git a/src/main/java/org/broadinstitute/barclay/help/DefaultDocWorkUnitHandler.java b/src/main/java/org/broadinstitute/barclay/help/DefaultDocWorkUnitHandler.java index 7bdc361..9a5f9c5 100644 --- a/src/main/java/org/broadinstitute/barclay/help/DefaultDocWorkUnitHandler.java +++ b/src/main/java/org/broadinstitute/barclay/help/DefaultDocWorkUnitHandler.java @@ -1,12 +1,10 @@ package org.broadinstitute.barclay.help; -import jdk.javadoc.doclet.DocletEnvironment; -import org.apache.commons.lang3.tuple.Pair; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.broadinstitute.barclay.argparser.*; import org.broadinstitute.barclay.help.scanners.JavaLanguageModelScanners; +import org.broadinstitute.barclay.utils.Pair; import org.broadinstitute.barclay.utils.Utils; import javax.lang.model.element.Element; diff --git a/src/main/java/org/broadinstitute/barclay/help/WDLTransforms.java b/src/main/java/org/broadinstitute/barclay/help/WDLTransforms.java index d7d2e8b..6206625 100644 --- a/src/main/java/org/broadinstitute/barclay/help/WDLTransforms.java +++ b/src/main/java/org/broadinstitute/barclay/help/WDLTransforms.java @@ -1,7 +1,7 @@ package org.broadinstitute.barclay.help; import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; +import org.broadinstitute.barclay.utils.Pair; import java.io.File; import java.net.URI; @@ -51,53 +51,53 @@ public class WDLTransforms { // the type. From a purely string perspective, some of these transforms are no-ops in that no actual // conversion is required because the type names are identical in Java and WDL (i.e, File->File or // String->String), but they're included here for completeness, and to document the allowed type transitions. - private final static Map, ImmutablePair> javaToWDLTypeMap = - new HashMap, ImmutablePair>() { + private final static Map, Pair> javaToWDLTypeMap = + new HashMap, Pair>() { private static final long serialVersionUID = 1L; { - put(String.class, new ImmutablePair<>("String", "String")); + put(String.class, new Pair<>("String", "String")); // primitive (or boxed primitive) types - put(boolean.class, new ImmutablePair<>("boolean", "Boolean")); - put(Boolean.class, new ImmutablePair<>("Boolean", "Boolean")); + put(boolean.class, new Pair<>("boolean", "Boolean")); + put(Boolean.class, new Pair<>("Boolean", "Boolean")); - put(byte.class, new ImmutablePair<>("byte", "Int")); - put(Byte.class, new ImmutablePair<>("Byte", "Int")); + put(byte.class, new Pair<>("byte", "Int")); + put(Byte.class, new Pair<>("Byte", "Int")); - put(int.class, new ImmutablePair<>("int", "Int")); - put(Integer.class, new ImmutablePair<>("Integer", "Int")); + put(int.class, new Pair<>("int", "Int")); + put(Integer.class, new Pair<>("Integer", "Int")); //NOTE: WDL has no long type, map to Int - put(long.class, new ImmutablePair<>("long", "Int")); - put(Long.class, new ImmutablePair<>("Long", "Int")); + put(long.class, new Pair<>("long", "Int")); + put(Long.class, new Pair<>("Long", "Int")); - put(float.class, new ImmutablePair<>("float", "Float")); - put(Float.class, new ImmutablePair<>("Float", "Float")); - put(double.class, new ImmutablePair<>("double", "Float")); - put(Double.class, new ImmutablePair<>("Double", "Float")); + put(float.class, new Pair<>("float", "Float")); + put(Float.class, new Pair<>("Float", "Float")); + put(double.class, new Pair<>("double", "Float")); + put(Double.class, new Pair<>("Double", "Float")); // File/Path Types - put(File.class, new ImmutablePair<>("File", "File")); + put(File.class, new Pair<>("File", "File")); - put(URI.class, new ImmutablePair<>("URI", "String")); - put(URL.class, new ImmutablePair<>("URL", "String")); + put(URI.class, new Pair<>("URI", "String")); + put(URL.class, new Pair<>("URL", "String")); } }; // Map of Java collection argument types that the WDL generator knows how to convert to a WDL type, along with the // corresponding string substitution that needs to be run on the (Barclay-generated) string that describes // the type. - private final static Map, ImmutablePair> javaCollectionToWDLCollectionTypeMap = - new HashMap, ImmutablePair>() { + private final static Map, Pair> javaCollectionToWDLCollectionTypeMap = + new HashMap<>() { private static final long serialVersionUID = 1L; { - put(List.class, new ImmutablePair<>("List", "Array")); + put(List.class, new Pair<>("List", "Array")); // Note: occasionally there are @Arguments that are typed as "ArrayList" - put(ArrayList.class, new ImmutablePair<>("ArrayList", "Array")); - put(Set.class, new ImmutablePair<>("Set", "Array")); - put(EnumSet.class, new ImmutablePair<>("EnumSet", "Array")); + put(ArrayList.class, new Pair<>("ArrayList", "Array")); + put(Set.class, new Pair<>("Set", "Array")); + put(EnumSet.class, new Pair<>("EnumSet", "Array")); } }; diff --git a/src/main/java/org/broadinstitute/barclay/help/WDLWorkUnitHandler.java b/src/main/java/org/broadinstitute/barclay/help/WDLWorkUnitHandler.java index d8379d0..b616f7a 100644 --- a/src/main/java/org/broadinstitute/barclay/help/WDLWorkUnitHandler.java +++ b/src/main/java/org/broadinstitute/barclay/help/WDLWorkUnitHandler.java @@ -1,9 +1,8 @@ package org.broadinstitute.barclay.help; -import org.apache.commons.lang3.tuple.Pair; - import org.broadinstitute.barclay.argparser.*; import org.broadinstitute.barclay.argparser.WorkflowProperties; +import org.broadinstitute.barclay.utils.Pair; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; diff --git a/src/main/java/org/broadinstitute/barclay/utils/Pair.java b/src/main/java/org/broadinstitute/barclay/utils/Pair.java new file mode 100644 index 0000000..a6f87eb --- /dev/null +++ b/src/main/java/org/broadinstitute/barclay/utils/Pair.java @@ -0,0 +1,83 @@ +package org.broadinstitute.barclay.utils; + +import org.apache.commons.lang3.builder.CompareToBuilder; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Map; + +/** + * Simple Pair class + * @param left left of pair + * @param right right of pair + * @param type of left + * @param type of right + */ +public record Pair(L left, R right) implements Map.Entry, Comparable>, Serializable { + + @Serial + private static final long serialVersionUID= 1; + + /** + * @return left() + */ + public L getLeft(){ + return left; + } + + /** + * @return right() + */ + public R getRight() { + return right; + + } + + /** + * @return left() + */ + @Override + public L getKey() { + return left; + } + + /** + * @return right() + */ + @Override + public R getValue() { + return right; + } + + /** + * This Pair is immutable so the value cannot be set. + * + * @param value is irrelevant since this is immutable + * @return UnsupporedOperationException + * @throws UnsupportedOperationException + */ + @Override + public R setValue(final R value) { + throw new UnsupportedOperationException("Pair is an immutable record"); + } + + + /** + * @return a new Pair of left and right + */ + public static Pair of(L left, R right){ + return new Pair<>(left, right); + } + + + /** + * First compare left, then compare right + * @param other the Pair to be compared. + */ + @Override + public int compareTo(final Pair other) { + //This implemntation is take out of the commons lang Pair for consistency reasons + return new CompareToBuilder().append(getLeft(), other.left) + .append(getRight(), other.right).toComparison(); + } +} diff --git a/src/test/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParserTest.java b/src/test/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParserTest.java index b101e91..f5827a9 100644 --- a/src/test/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParserTest.java +++ b/src/test/java/org/broadinstitute/barclay/argparser/CommandLineArgumentParserTest.java @@ -1,8 +1,8 @@ package org.broadinstitute.barclay.argparser; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; +import org.broadinstitute.barclay.utils.Pair; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test;