Commons.unkrig.de: Difference between revisions
m (→Change Log) |
|||
(15 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<meta name="keywords" content="versatile, library, java, commons"></meta> | <meta name="keywords" content="versatile, library, java, commons"></meta> | ||
<meta name="description" content="A versatile library that implements many useful container and utility classes"></meta> | <meta name="description" content="A versatile library that implements many useful container and utility classes"></meta> | ||
<tt>de.unkrig.commons</tt> is a versatile Java™ library that implements many useful container and utility classes | <tt>de.unkrig.commons</tt> is a versatile Java™ library that implements many useful container and utility classes. | ||
It extends and integrates seamlessly with the standard JDK library. | |||
== Overview == | == Overview == | ||
Line 14: | Line 15: | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-asm/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&c=sources Source code Download] | ||
Line 24: | Line 25: | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-asm/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-asm&v=LATEST&c=sources Source code Download] | ||
Line 32: | Line 33: | ||
Functionality for | Functionality for | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-file/apidocs/index.html?de/unkrig/commons/file/fileprocessing/package-summary.html processing] | ||
or | or | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-file/apidocs/index.html?de/unkrig/commons/file/filetransformation/package-summary.html transforming] | ||
trees of directories, files, compressed and archive files, and even nested compressed and archive files. Supports more than a dozen compression and archive formats. | trees of directories, files, compressed and archive files, and even nested compressed and archive files. Supports more than a dozen compression and archive formats. | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-file/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-file&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-file&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-file&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-file&v=LATEST&c=sources Source code Download] | ||
Line 48: | Line 49: | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-io/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&c=sources Source code Download] | ||
Line 58: | Line 59: | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-io/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-io&v=LATEST&c=sources Source code Download] | ||
Line 65: | Line 66: | ||
=== commons-lang === | === commons-lang === | ||
* Utility classes for [http://commons.unkrig.de | * Utility classes for [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/ExceptionUtil.html exceptions], [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/ThreadUtil.html threads] and [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/RunnableUtil.html runnables] | ||
* [http://commons.unkrig.de | * [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/protocol/package-summary.html "Protocol" interfaces] like [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/protocol/Producer.html Producer], [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/protocol/Consumer.html Consumer], [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/protocol/Predicate.html Predicate], [http://commons.unkrig.de/commons-lang/apidocs/index.html?de/unkrig/commons/lang/protocol/Transformer.html Transformer] | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-lang/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-lang&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-lang&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-lang&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-lang&v=LATEST&c=sources Source code Download] | ||
Line 76: | Line 77: | ||
=== commons-math === | === commons-math === | ||
[http://commons.unkrig.de/ | [http://commons.unkrig.de/commons-math/apidocs/index.html?de/unkrig/commons/math/package-summary.html de.unkrig.commons.math]: A linear congruential generator; a [http://commons.unkrig.de/commons-math/apidocs/index.html?de/unkrig/commons/math/Sequences.html random sequence generator] | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-math/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-math&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-math&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-math&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-math&v=LATEST&c=sources Source code Download] | ||
Line 86: | Line 87: | ||
=== commons-net === | === commons-net === | ||
* [http://commons.unkrig.de | * [http://commons.unkrig.de/commons-net/apidocs/index.html?de/unkrig/commons/net/http/package-summary.html HTTP] and [http://commons.unkrig.de/commons-net/apidocs/index.html?de/unkrig/commons/net/ftp/package-summary.html FTP] servers and clients | ||
* Various networking tools like [http://commons.unkrig.de | * Various networking tools like [http://commons.unkrig.de/commons-net/apidocs/index.html?de/unkrig/commons/net/tool/tcpmon/package-summary.html TCPMON], [http://commons.unkrig.de/commons-net/apidocs/index.html?de/unkrig/commons/net/tool/ftpmon/package-summary.html FTPMON], [http://commons.unkrig.de/commons-net/apidocs/index.html?de/unkrig/commons/net/tool/telnet/package-summary.html TELNET] | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-net/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-net&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-net&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-net&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-net&v=LATEST&c=sources Source code Download] | ||
Line 100: | Line 101: | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-nullanalysis/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-nullanalysis&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-nullanalysis&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-nullanalysis&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-nullanalysis&v=LATEST&c=sources Source code Download] | ||
Line 110: | Line 111: | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-reflect/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-reflect&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-reflect&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-reflect&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-reflect&v=LATEST&c=sources Source code Download] | ||
Line 117: | Line 118: | ||
=== commons-text === | === commons-text === | ||
* An [http://commons.unkrig.de | * An [http://commons.unkrig.de/commons-text/apidocs/index.html?de/unkrig/commons/text/expression/ExpressionEvaluator.html expression evaluator] | ||
* A small framework for creating [http://commons.unkrig.de | * A small framework for creating [http://commons.unkrig.de/commons-text/apidocs/index.html?de/unkrig/commons/text/scanner/package-summary.html scanners] and [http://commons.unkrig.de/commons-text/apidocs/index.html?de/unkrig/commons/text/parser/package-summary.html parsers] | ||
* A [http://commons.unkrig.de | * A [http://commons.unkrig.de/commons-text/apidocs/index.html?de/unkrig/commons/text/pattern/Glob.html Glob] class that combines the widely known elements of UNIX file name globbing with the power of regular expressions | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-text/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-text&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-text&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-text&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-text&v=LATEST&c=sources Source code Download] | ||
Line 129: | Line 130: | ||
=== commons-util === | === commons-util === | ||
* [http://commons.unkrig.de | * [http://commons.unkrig.de/commons-util/apidocs/index.html?de/unkrig/commons/util/CommandLineOptions.html CommandLineOptions] makes parsing and documentation of command line options (e.g. for "<code>public static void main(String[])</code>") easy; see the [[CommandLineOptions tutorial|tutorial]]. | ||
* [http://commons.unkrig.de | * [http://commons.unkrig.de/commons-util/apidocs/index.html?de/unkrig/commons/util/TimeTable.html TimeTable] parses and implements a CRON-like specification string | ||
* Various [http://commons.unkrig.de | * Various [http://commons.unkrig.de/commons-util/apidocs/index.html?de/unkrig/commons/util/logging/filter/package-summary.html filters], [http://commons.unkrig.de/commons-util/apidocs/index.html?de/unkrig/commons/util/logging/handler/package-summary.html handlers] and [http://commons.unkrig.de/commons-util/apidocs/index.html?de/unkrig/commons/util/logging/formatter/package-summary.html formatters] for <tt>java.util.logging</tt> | ||
* The [http://commons.unkrig.de | * The [http://commons.unkrig.de/commons-util/apidocs/index.html?de/unkrig/commons/util/logging/SimpleLogging.html SimpleLogging] facility for easy integration of <tt>java.util.logging</tt> within command line tools | ||
''Resources:'' | ''Resources:'' | ||
[http://commons.unkrig.de | [http://commons.unkrig.de/commons-util/apidocs/index.html JAVADOC], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-util&v=LATEST&e=jar JAR file Download], | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-util&v=LATEST&e=jar JAR file Download], | ||
[http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-util&v=LATEST&c=sources Source code Download] | [http://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=de.unkrig.commons&a=commons-util&v=LATEST&c=sources Source code Download] | ||
Line 142: | Line 143: | ||
== Source Code == | == Source Code == | ||
The source code is available through | The source code is available through GITHUB: | ||
https:// | https://github.com/aunkrig/commons/ | ||
== License == | == License == | ||
Line 152: | Line 153: | ||
== Change Log == | == Change Log == | ||
; Version 1.2.7- | ; Version 1.2.18 2022-12-28: | ||
:* de.unkrig.commons.file.resourceprocessing.ResourceProcessings: Added "ResourceProcessings.STDIN_URL". | |||
:* de.unkrig.commons.file.resourceprocessing.ResourceProcessings: ZZDIFF can now handle "-" (stdin) as one of its two inputs. | |||
:* de.unkrig.commons.text.scanner: Added "setInput(input, int start, int end)" for scanning partial strings. | |||
:* de.unkrig.commons.text.expression.ExpressionEvaluator: Added "parsePart(String spec, int[] offset, int end)" for parsing partial strings. | |||
:* de.unkrig.commons.text.pattern.ExpressionMatchReplacer: Added "\Q...\E" and "\Q...". | |||
:* ExpressionMatchReplacer.parseExt(): Added "\xhh", "\uhhhh", "\x{h...h}" and "normal" escapes ("\r", "\n", asf.). | |||
; Version 1.2.17 2022-07-22: | |||
:* d.u.c.lang.Characters: Small fixes of character classes for JRE 8 backwards compatibility. | |||
:* d.u.c.lang.PrettyPrinter: Fixed one NPE in "PrettyPrinter.getPrettyClassName()" (handling of classes without a canonical name). | |||
:* d.u.c.lang.StringUtil: Added multi-needle variants of "boyerMooreHorspoolIndexOf()", e.g. "needle1|[Nn]eedle2". | |||
:* Added tests for "MapUtil.lazyMap()". | |||
:* d.u.c.util.collections.MapUtil: Created a brother method "MapUtil.lazyMap(Map<K, Producer<? extends V>> valueGetters)" for "MapUtil.lazyMap(Map<K, Function<? super I, ? extends V>> valueGetters, @Nullable final I in)". | |||
:* d.u.c.util.collections.IteratorUtil: Added "IteratorUtil.concat(List<Iterator>)". | |||
:* d.u.c.util.CommandLineOptionException: Include "toString()" of the cause into the OptionProcessingException's message, because the cause's "getMessage()" is often not verbose enough. | |||
:* d.u.c.text.expression.ExpressionEvaluator: Implemented the special attributes "_attributes", "_properties", "_staticAttributes" and "_staticProperties". | |||
:* d.u.c.text.expression.ExpressionEvaluator: Arrays are now silently pretty-printed in all places. | |||
:* Added "ObjectUtil.arrayToString(Object)". | |||
:* d.u.c.lang.protocol.ConsumerUtil: Moved "Grep.lineCounter()" to "ConsumerUtil". | |||
:* d.u.c.text.pattern.PatternUtil: Added to the "patternFinderWriter()" method family some more with a "Runnable flush" parameter. | |||
:* d.u.c.text.pattern.Finders: Added to the "patternFinder()" method family some more with a "Runnable flush" parameter. | |||
:* d.u.c.lang.protocol.Functions: Added "Functions.constant(O)". | |||
:* d.u.c.io.ConsumingWriter: Added the "ConsumingWriter". | |||
:* d.u.c.text.pattern.Substitutor: The Substitutor is now based on the Finders.patternFinder(). | |||
:* d.u.c.text.pattern.PatternUtil: The object returned by "replacementStringMatchReplacer()" didn't have a proper "toString()" method. | |||
:* d.u.c.file.org.apache.commons.compress.archivers: "ArchiveFormat.forArchiveOutputStream(ArchiveOutputStream)" didn't work in all cases. | |||
; Version 1.2.16 2022-03-21: | |||
:* Iff the field "Throwable.message" cannot be made accessible, print a useful warning message on STDERR instead of throwing an exception. | |||
:* Gave up on Java 6 compatibility... now Java 8. | |||
:* Added "setPassword()", in addition to the system property. | |||
:* Gave up on Java 6 compatibility... now Java 8. | |||
:* Added "MavenUtil". | |||
:* Reverted the commit of "Glob.java" of 2021-12-01 19:22: "%" is *not* a valid suffix; otherwise all compressed contents (e.g. "dir/file.gz%") would match a pattern like "***foo". | |||
:* Added test case for "FileProcessings.starterFile(String regex)". | |||
:* Added "ContentProcessings.glob()". | |||
:* Added "PatternUtil.constantPrefix()". | |||
:* Added "FileProcessings.glob()". | |||
:* Added "OutputStreams.newOverwritingFileOutputStream(File)": "$xyz" was handled differently from "${xyz}" and caused an NPE. | |||
:* Added "AbstractParser.readEnum()". | |||
:* Gave up on backwards compatibility with Java 6 and 7 (removed substitutes for java.util.Base64). | |||
:* Added "Readers.readFully()". | |||
:* Added "InputStreams.readFully()". | |||
:* Set "useTransparentBounds(true)" when scanning, so token regexes can use lookaheads and lookbehinds. | |||
:* Eliminated the terrible hack where STORED zip archive entries were silently transformed into DEFLATED (because STORED entries need a correct SIZE and CRC, and these were difficult to calculate). Implemented this with a temporary storage using an "elastic pipe". | |||
:* Added "OutputStreams.updatesChecksum(final Checksum checksum) => OutputStream". | |||
:* The substitution count was wrong (*2 value). | |||
:* Typo in "elasticPipe()" caused an IllegalStateException. | |||
:* Added "ArchiveFormat.getCompressionMethod(ArchiveEntry)", which returns a string representation of the compression method used for the archive entry. | |||
:* Generating TAR archives: The "long file mode" (determines the handling of file names longer than 100 characters) can now be controlled with a system property "TarArchiveFormat.longFileMode"; the default is now "GNU" (and not, as before, "ERROR"). | |||
:* Added "Numbers.unsignedCompareToByte/Short/Int/Long()". | |||
:* Added the "Relation" interface and the "Relations" utility class. | |||
; Version 1.2.15 2020-11-06: | |||
:* commons-file: Implemented decryption of encrypted 7ZIP archives with a sysem property "sevenZInputFilePassword". | |||
:* commons-file: Directory processing: JRE11+MS WINDOWS replace colons (#003A) in member names with #F03A, for whatever reason. | |||
:* commons-net: For method CONNECT, the second word of the request line is not a URI, but only an authority (host:port). | |||
:* commons-file: Handle AR archive entriy with empty name: Silently rename it to "__ROOT". | |||
:* commons-net: Fixed one resource leak. | |||
:* commons-file: "apache.commons.compress" no longer seems to miss the dependency on "org.tukaani" -- removed the workaround. | |||
:* commons-file: Augmented all content processing with an optional "lastModifiedDate" parameter. | |||
:* commons-file: Added (read-only) support for the "rpm" archive format. (An PM file is actually a compressed CPIO archive preceeded by some binary metadata.) | |||
:* commons-util: Added "MapUtil.lazyMap()". | |||
:* commons-text: Added "Notation.Phrase.size()" and "Notation.Phrase.get()". | |||
:* commons-io: Fixed an endless loop in "MarkableFileInputtream.skip()". | |||
:* commons-io: Fixed a ConcurrentModificationException. | |||
:* commons-text: Replaced single quotes in many messages with (the typographically more correct) double quotes. | |||
:* commons-util: Wrap exceptions that occur during option processing with the new "OptionProcessingException" (instead of an AssertionError). | |||
:* commons-io: Added "Writers.autoFlushing()" and "OutputStreams.autoFlushing()". Added "Readers.wye(Reader, Writer)" and marked "WyeReader" as deprecated. | |||
:* commons-io, commons-lang: Added tons of "? super" and "? extends" clauses. | |||
; Version 1.2.14 2019-10-11: | |||
:* Fixed an IllegalArgumentException in "Pattern2.compile(String, int)" and "Glob.compile(String, int)". | |||
:* StringStream: Made "next()" and "consume()" public. | |||
:* OptionalMethods: All methods get an additional first parameter "@Nullable String message", which, if non-null, is used for the UnsupportedOperationException. | |||
:* Added "XmlUtil.parse(DocumentBuilder, InputStream, String publicId, String encoding)". | |||
:* Added "Writers.tee(Writer... delegates)". | |||
:* ArArchiveFormat: Catch an NPE thrown by ArArchiveInputStream. | |||
:* ArArchiveFOrmat: Catch a NumberFormatException in ArArchiveInputStream. | |||
:* Work around "ZipException: uncompressed size is required for STORED method when not writing to a file" | |||
:* commons.doclet.Html: Changed fragment style from Java 7 to Java 8+. | |||
:* ResourceProcessings: "isFile()" did not decode %xx escape sequences in URLs. | |||
:* commons.lang.Comparators: Added "Comparators.keyComparator()" and ".valueComparator()". | |||
:* FileProcessings.directoryProcessor(): The "pathPredicate" was applied wrong for *files* (as opposed to directories). As a result, "zzgrep --include '***.class'" did not match .class files *in archives*. | |||
:* InputStreams: Added "EventCounter", "ExponentiallyLoggingEventCounter" and "InputStreams.statisticsInputStream()" for real-time IO statistics. | |||
:* Optimize archive file and compressed file reading by replacing small file READs with large file READs. | |||
:* Added input stream statistics in "CompressUtil" and "FileContentsProcessor". | |||
:* Fatal bug in "ConsumerUtil.head()" fixed! | |||
:* Added "commons.lang.protocolTuple2", "Tuple3" and "Tuple4". | |||
:* ExpressionMatchReplacer: Replaced "imports" with "singleImports" and "onDemandImports". | |||
:* ExpressionEvaluator: Added scanning of MULTI-LINE C-style comments. Added scanning of C++-style comments. | |||
:* Added "de.unkrig.commons.file.resourceprocessing", in symmetry with "fileprocessing" and "contentsprocessing", to process *resources* (designated by URLs) in addition to files and InputStreams. | |||
:* commons.file: Compressed file names and compressed contents paths are now suffixed with '%' (instead of '!') to circumvent problems with "Glob"'s directory prefix mechanism. | |||
:* Java 9 added "@Override public final CharBuffer CharBuffer.rewind() { ..." -- leads easily to a "NoSuchMethodError: java.nio.CharBuffer.rewind()Ljava/nio/CharBuffer"; a cast to "Buffer" is the workaround. | |||
:* Added "LineUtil.lineAndColumnTracker()". | |||
:* Added "Readers.onFirstChar()" and "Readers.trackLineAndColumn(Reader)". | |||
:* Added "Writers.onFirstChar()" and "Writers.trackLineAndColumn(Writer)". | |||
:* Removed unnecessary dependency on "de.unkrig.commons:commons-junit4". | |||
:* CommandLineOptions: Convert "any" to InetAddr "null" ("wildcard address"). | |||
; Version 1.2.13 2018-11-23: | |||
:* In analogy with the "Substitutor", the new "Search" class finds pattern matches in a sequence of chunks in a "sliding" manner. Instead of a "match replacer", it invokes a "match handler". | |||
:* Breaking change: A "match replacer" is no longer a "FunctionWhichThrows<Matcher, String, EX>", but a "FunctionWhichThrows<MatchResult, String, EX>". | |||
:* Added support for HTTP method "OPTIONS". | |||
:* Refined the logic that checks for "Socket closed" exceptions. | |||
; Version 1.2.12 2018-10-29: | |||
:* ChunkedInputStream: Reading of blank line after last chunk was missing. | |||
:* Added "LevelFilteredPrinter.setNoErrors()". | |||
:* Added "evaluateExpressionTo(@Nullable String[] imports, String input,Class<T> targetType, Mapping<String, ?> variables)". | |||
:* Added convenience methods with a parameter "Object... variableNamesAndValues" for all methods with a parameter "Mapping<String, ?> variables". | |||
:* Added "or(PredicateWhichThrows<? super T, ? extends EX> lhs, PredicateWhichThrows<? super T, ? extends EX> rhs)" as a brother of "or(Predicate<? super T> lhs, Predicate<? super T> rhs)". | |||
:* Added "containsKeyPredicateWhichThrows(final Mapping<K, V>)". | |||
:* Removed the "<EX>" type parameter from "ExpressionEvaluator.parser(String spec)". | |||
:* Optimized "toPredicate()" and "constantExpression()" for the special cases "true", "false" and "null". | |||
:* Replaced "HttpAuthenticationServlett(String realm, String userName, String password)" with "HttpAuthenticationServlett(String realm, UserNamePasswordPredicate)". | |||
:* Added "removeParameter()". | |||
:* Added test cases for "de.unkrig.commons.util.Enums". | |||
:* Optimized performance of "Enums.valueOf(String, Class<? extends Enum>)". | |||
:* Added "enumSetFromString(String, Class<? extends Enum>)" and "valueOf(String, Class<? extends Enum>)". | |||
:* Started implementation of "IndexOf.indexOf(CharSequence haystack, int minIndex, int maxIndex, int limit)" for partial terminal matches. | |||
:* Added method "toCharArray(CharSequence cs)". | |||
:* Added "of(T... values)", "union(Set<? extends T> lhs, Set<? extends T> rhs)" and "intersection(Set<? extends T> lhs, Set<? extends T> rhs)". | |||
:* Added "toCharArray(Set<Character>)" and "toIntArray(Set<Integer>)". | |||
:* Added "append(char[] a, char... values)" and "mirror(char[][])". | |||
:* Fixed up several bugs in "boyerMooreHorspool...()". | |||
:* Renamed methods "knuthMorrisPratt...()" to "boyerMooreHolbrook...()". | |||
:* Fixed up the Knuth-Morris-Pratt "lastIndexOf()" method. | |||
:* More optimization on the "knuthMorrisPratt()" index-of algorithm. | |||
:* Renamed the "...Index" parameters of the "IndexOf.(indexOf|lastIndexOf)()" methods from "(from|to)Index" to "(min|max)Index", because "from" and "to" are very confusing for "lastIndexOf()". | |||
:* Utility functionality related to {@link HttpsURLConnection}s. | |||
:* Added "ExpressionEvaluator.parsePart()". | |||
:* Added "ExpressionEvaluator.parsePart()". | |||
:* "getMostSpecificMethod()": Didn't find some methods declared in superinterfaces. | |||
:* Added "containsKeyPredicate(Mapping)". | |||
:* The non-"...WhichThrows" protocol classes now declare the EX type parameter as "NoException" (was "RuntimeException") to make any code more self-documenting. | |||
:* "isLessSpecific()": The synthetic methods that are generated for covariant return values were regarded as "ambiguous". | |||
:* The "transformer" argument is now allowed to throw IOExceptions. | |||
:* "copyAndTransform()" now declares an "EX" type parameter. | |||
:* Added the "assertFind()" methods. | |||
:* Added "StringUtil.asJavaLiteral(String)". | |||
:* Added "IterableUtil.addAllElementsTo(Iterable, Collection)" and "IteratorUtil.addAllElementsTo(Iterator, Collection)". | |||
:* Moved "EMPTY_SORTED_SET" and "emptySortedSet()" from "CollectionUtil" to "Sets", leaving (deprecated) wrappers behind. | |||
; Version 1.2.11 2017-08-23: | |||
:* Added methods "Rule.goTo(S)", "Rule.push(S)" and "Rule.pop()", making many of the "StatefulScanner.addRule(...)" methods DEPRECATED. | |||
:* Added utility class "OptionalMethods". | |||
:* Made JRE 7's methods "isAlphabetic(int)" and "isIdeographic(int)" available for all JRE versions. | |||
:* "Token.captured" is no longer @Nullable; this is much more practical. | |||
:* Added "PrettyPrinter.codePointToString(int)". | |||
:* Added the following methods, and the plethora of predicates that implement them: | |||
:** javaCharacterClassFromName(String) | |||
:** unicodeCategoryFromName(String) | |||
:** unicodeBinaryPropertyFromName(String) | |||
:** unicodePredefinedCharacterClassFromName(String) | |||
:** posixCharacterClassFromName(String) | |||
:* Improved the "unexpected character" exception message by adding information about the current scanner state. | |||
:* Added the "de.unkrig.commons.util.EnhancedServiceLoader". | |||
:* Added appropriate "toString()" methods on "IndexOf" implementations. | |||
:* Extended the "StringUtil.IndexOf" interface with various "lastIndexOf()" methods. | |||
:* Added "StringUtil.newIndexOf(final String infix)" which implements the Knuth-Morris-Pratt algorithm. | |||
; Version 1.2.10 2017-07-30: | |||
:* Added method "MD5.of(InputStream)". | |||
:* Added utility class "de.unkrig.commons.lang.Comparators". | |||
:* CompressUtil: The "UnsupportedZipFeatureException" was not properly wrapped because it has none of the "usual" constructors that "ExceptionUtil.wrap()" requires. | |||
:* Added "InputStreams.readAll(InputStream, boolean closeInputStream)". | |||
:* de.unkrig.commons.util.collections.Peekerators: Introduced the concept of the "peekerator" - an Iterator with a "peek()" method. | |||
:* IterableUtil: Added "IterableUtil.NATURALS" and "NATURALS0". | |||
:* de.unkrig.commons.util.collections: Added methods "IteratorUtil.foR(...)" and "IterableUtil.foR(...)". | |||
:* de.unkrig.commons.util.collections: Moved "iteratorWithContext()" from IterableUtil to IteratorUtil. | |||
:* de.unkrig.commons.util.collections: Made "ElementWithContext" a top-level type, because it is now used by two compilation units (IteratorUtil and IterableUtil). | |||
:* commons-net and commons-util: Moved the "CustomAuthenticator" (and its fellows "CredentialsSpec", "JPasswordFields" and "Regex" from the ANTOLOGY project to the "de.unkrig.commons.net" project, where it belongs. | |||
:* CommandLineOptions: Gave "printResource(Class, String relativeResourceName, ...)" a sibling method "printResource(ClassLoader, String resourceName, ...)". | |||
:* de.unkrig.commons.net.http.HttpMessage: In "attempt unstreaming" mode, the body was written TWICE (caused IllegalStateExceptions). | |||
:* de.unkrig.commons.net.http: Added support for the "CONNECT" method. | |||
:* Added to many methods parameter(s) "xxxLoggingPrefix" so that one can customize the logging messages. By default, logging messages related to incoming data are prefixed with ">>> ", and logging messages related to outgoing data with "<<< ". | |||
:* HttpMessage: The "attempt unstreaming" feature can now be switched off (important for the CONNECT method). | |||
:* "IoUtil.copy()" now flushes the output stream when the next READ from the input stream will block. | |||
:* de.unkrig.commons.text.expression: Added support for nested types. | |||
:* Changed the return types of "Expression.evaluateTo[Primitive](...)" from "Object" to "T". | |||
:* AuthenticateHeaderParser: Implemented BASIC authentication for the "HttpClient" - useful to configure HTTP proxies that handle authentication. | |||
:* unkrig.commons/text/scanner: Added "String[] Token.captured" for access to input subsequences that were captured during the token match. | |||
:* ConsumerUtil: Added methods "head(m)" and "tail(n)". | |||
:* "Transformer" now extends "TransformerWhichThrows<I, O, RuntimeException>", as it always should have done. | |||
:* Added "BooleanProducer ProducerUtil.once()". | |||
:* Added the "de.unkrig.commons.text.scanner.XmlScanner" class and tests. | |||
:* Added "StringUtil.containsAny(String subject, String characters)", which checks whether the subject contains any of the characters. | |||
:* Added the "FilterAppendable", very much in anaolgy with the "java.io.FilterWriter". | |||
:* Added "CharSequences.from(char[])" and "CharSequences.from(char[], int off, int len)". | |||
:* Added the "Appendables" utility class. | |||
:* de.unkrig.commons.doclet.html.Html: Added support for {@value} on enum constants. | |||
:* de.unkrig.commons.doclet.html.Html: STANDARD_LINK_MAKER: Added support for links to enum constants. | |||
:* de.unkrig.commons.text.expression.ExpressionEvaluator: Breaking API change: "evaluateTo(..)" now returns a _nullable_ result. | |||
:* ConsumerUtil: Added various "store()" and "cumulate()" methods. | |||
:* de.unkrig.commons.net.http.HttpMessage: Added method "body(final ProducerWhichThrows<InputStream, IOException> in)". | |||
:* Automatic XML formatting is now not only active for content type "text/xml", but for any content type with an infix "xml". | |||
:* de.unkrig.commons.io.ReaderInputStream: First implementation of the "ReaderInputStream" as the complement of the "WriterOutputStream"; as of now supports only char set ISO8859-1. | |||
:* TransformingFilterReader: Bug fixed: "TransformingFilterReader.read()" returned -1 on the first pattern match. | |||
:* de.unkrig.commons.doclet.html.Html: @value: The argument was not SGML-Escaped. | |||
:* TransformerUtil: Added "cache(final Transformer<? super I, O> delegate, final Map<I, O> cache)". | |||
:* ContentsProcessings.processArchive(): "Directory archive entries" are now silently ignored, because they have no contents and thus it makes no sense to process them with the "contentsProcessor". | |||
:* FileUtil: Added a workaround for MS WINDOWS 7: Read-protected directory produces: isDirectory() => true; canRead() => true; list() => null; listFiles() => null (Caused NPEs.) | |||
:* PasswordAuthenticationStores: "..customAuthenticator_credentials,orig" file was not deleted after saving the credentials properties file. | |||
; Version 1.2.9 2017-02-02: | |||
:* de.unkrig.commons.crypto/security: Gave up on the concept of "DestroyableString"s - they cause more confusion than they are helpful. | |||
:* ProducerUtil: Fixed a serious bug in "cacheAsynchronously()": ExecutionExceptions thrown by the Future were not handled properly and caused the cache to "hang". | |||
:* Added "roundRobin()". | |||
; Version 1.2.8 2017-01-27: | |||
:* New utility class "AssertString": Provides methods like "assertContains(String expectedInfix, String actual)". | |||
:* Added a new package "de.unkrig.commons.lang.crypto", and moved many classes from "lang.security" to there. | |||
:* Extracted the UserNamePasswordStore from "de.unkrig.antology.task.SetAuthenticatorTask" to here. | |||
:* Added "StatefulScanner.getCurrentState()" and "setCurrentState()" so that the state of the scanner can be changed from outside admidst scanning. | |||
:* Added "AbstractScanner.suppress(TT)" and "suppress(EnumSet<TT>)". | |||
:* Added "ProducterUtil.filter(Producer, Predicate)". | |||
:* StatefulScanner: Declared a constant "REMAIN" for the "addRule()" methods that have a final "nextState" parameter. | |||
:* AbstractParser: End-of-input handling was brooken in "read(Object... tokenTypeOrText)". | |||
:* Added the "de.unkrig.commons.lang.Characters" utility class. | |||
:* The first parameter of methods "StatefulScanner.addRule(EnumSet<S>, ...)" is now NULLABLE, where "null" means "any state, including the default state". | |||
:* Added a constructor "StatefulScanner(StatefulScanner)" that clones the configuration, but not the state. | |||
:* StatefulScanner: Added methods "addRule(@Nullable EnumSet<S> states, String regex, TT tokenType)" and "addRule(@Nullable EnumSet<S> states, String regex, TT tokenType, S nextState)", which make it easier to declare rules that apply in more than one non-default states. | |||
:* Fixed one major design error in "CommandLineOptions": Method "applyCommandLineOption()" now gets a "Method" as its second parameter, instead of, previously, a "CommandLineOption" object. | |||
; Version 1.2.7 2016-12-12: | |||
:* IoUtil: Added "singlingFilterReader()" and "singlingInputStream()". | |||
:* PatternUtil: Fixed several bugs in "PatternUtil.replaceAll()". | |||
:* PatternUtil: Added "replaceAllFilterReader()". | |||
:* PatternUtil: Added "replaceAllFilterWriter()". | |||
:* Moved many, many methods from "IoUtil" to the new utility classes "InputStreams", "OutputStreams", "Readers", "Writers" and "FransformingFilter(Reader|Writer)". | |||
:* Added "StringTransformers", a collection of simple "Transformer<CharSequence, CharSequence>"s. | |||
:* Added TransformerUtil.chain(Transformer...)". | |||
:* Extracted "PatternUtil.replaceAllFilterReader()" as the new "Substitutor" class. | |||
:* Adapted to the refactoring of "IoUtil". | |||
:* Added unit tests for the "Substitutor". | :* Added unit tests for the "Substitutor". | ||
:* | :* "IoUtil.findOnPath()": The search stopped at the FIRST archive file. | ||
: | |||
; Version 1.2.6 2016-11-30: | ; Version 1.2.6 2016-11-30: | ||
Line 169: | Line 398: | ||
; Version 1.2.5 2016-11-28: | ; Version 1.2.5 2016-11-28: | ||
:* Printers: Added "Printers.redirectToFile(Level|EnumSet | :* Printers: Added "Printers.redirectToFile(Level|EnumSet<Level>)". | ||
; Version 1.2.4 2016-11-25: | ; Version 1.2.4 2016-11-25: | ||
Line 220: | Line 449: | ||
:* Added "PredicateUtil.always(boolean)". | :* Added "PredicateUtil.always(boolean)". | ||
:* Added "PredicateUtil.xor()". | :* Added "PredicateUtil.xor()". | ||
:* "Predicate | :* "Predicate<T>" now extends "PredicateWhichThrows<T, RuntimeException>". | ||
:* Added "ProducerUtil.cache(delegate, condition)". | :* Added "ProducerUtil.cache(delegate, condition)". | ||
:* "commons/doclet": Added support for the inline tags "{@docRoot}", "{@literal}", "{@constantsof}" and "{@constantsofplain}". | :* "commons/doclet": Added support for the inline tags "{@docRoot}", "{@literal}", "{@constantsof}" and "{@constantsofplain}". | ||
Line 240: | Line 469: | ||
; Version 1.1.5, 2016-03-14: | ; Version 1.1.5, 2016-03-14: | ||
:* de.unkrig.commons.io.IoUtil: Added "skip()" and "skipAll()". | :* de.unkrig.commons.io.IoUtil: Added "skip()" and "skipAll()". | ||
:* de.unkrig.commons.text.PatternUtil: Replaced the "Replacer" interface with a "Function | :* de.unkrig.commons.text.PatternUtil: Replaced the "Replacer" interface with a "Function<Matcher, String>". | ||
:* de.unkrig.commons.file.ExceptionHandler: Handler methods now have, for consistency with the other APIs, an additional parameter "String path". | :* de.unkrig.commons.file.ExceptionHandler: Handler methods now have, for consistency with the other APIs, an additional parameter "String path". | ||
:* de.unkrig.commons.net: TcpServer(SSLContext): Remove several "cipher suites" from the SSL context because otherwise some modern browsers refuse to connect with this server. | :* de.unkrig.commons.net: TcpServer(SSLContext): Remove several "cipher suites" from the SSL context because otherwise some modern browsers refuse to connect with this server. | ||
Line 277: | Line 506: | ||
; Version 1.0.5, 2014-05-01: | ; Version 1.0.5, 2014-05-01: | ||
:* Moved the | :* Moved the <log>, <logging> and <simpleLogging> tasks from 'de.unkrig.commons.util' to 'de.unkrig.antcontrib'. | ||
; Version 1.0.4, 2014-04-29: | ; Version 1.0.4, 2014-04-29: | ||
:* 'keepOriginals' did not work for in-place file transformations. | :* 'keepOriginals' did not work for in-place file transformations. | ||
:* | :* <simplelogging>: Added attribute 'spec="..."'. | ||
:* | :* <simpleLogging>: Attribute 'debug="..."' no longer is boolean, but "FINE|FINER|FINEST". | ||
:* | :* <logging>: Removed attribute 'parent="..."' | ||
:* | :* <logging>: Added attribute 'clearFilter="true"'. | ||
:* Renamed task | :* Renamed task <simplelogging> to <simpleLogging> (with a big 'L'). | ||
; Versions 1.0.3 and earlier: | ; Versions 1.0.3 and earlier: | ||
: No change log available. | : No change log available. |
Latest revision as of 09:51, 29 December 2022
<meta name="keywords" content="versatile, library, java, commons"></meta> <meta name="description" content="A versatile library that implements many useful container and utility classes"></meta> de.unkrig.commons is a versatile Java™ library that implements many useful container and utility classes. It extends and integrates seamlessly with the standard JDK library.
Overview[edit]
de.unkrig.commons is structured in several modules who's names are aligned to the related packages in the JDK libraries.
Module Details[edit]
commons-asm[edit]
Helper classes that are useful in the context of ASM, a Java bytecode manipulation library.
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-doclet[edit]
Helper classes that are useful for those who write doclets.
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-file[edit]
Functionality for processing or transforming trees of directories, files, compressed and archive files, and even nested compressed and archive files. Supports more than a dozen compression and archive formats.
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-io[edit]
Functionality around byte streams and readers/writers, e.g. for converting a byte stream into a hex dump, or formatting an XML document.
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-junit4[edit]
Assertions etc. for those who write tests with JUNIT 4.
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-lang[edit]
- Utility classes for exceptions, threads and runnables
- "Protocol" interfaces like Producer, Consumer, Predicate, Transformer
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-math[edit]
de.unkrig.commons.math: A linear congruential generator; a random sequence generator
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-net[edit]
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-nullanalysis[edit]
- Annotations and utility classes for ECLIPSE annotation-base "null analysis".
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-reflect[edit]
Various utilities for Java's reflection API.
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-text[edit]
- An expression evaluator
- A small framework for creating scanners and parsers
- A Glob class that combines the widely known elements of UNIX file name globbing with the power of regular expressions
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
commons-util[edit]
- CommandLineOptions makes parsing and documentation of command line options (e.g. for "
public static void main(String[])
") easy; see the tutorial. - TimeTable parses and implements a CRON-like specification string
- Various filters, handlers and formatters for java.util.logging
- The SimpleLogging facility for easy integration of java.util.logging within command line tools
Resources: JAVADOC, JAR file Download, Source code Download Maven POM
Source Code[edit]
The source code is available through GITHUB:
https://github.com/aunkrig/commons/
License[edit]
COMMONS.UNKRIG.DE is published under the "New BSD License".
Change Log[edit]
- Version 1.2.18 2022-12-28
-
- de.unkrig.commons.file.resourceprocessing.ResourceProcessings: Added "ResourceProcessings.STDIN_URL".
- de.unkrig.commons.file.resourceprocessing.ResourceProcessings: ZZDIFF can now handle "-" (stdin) as one of its two inputs.
- de.unkrig.commons.text.scanner: Added "setInput(input, int start, int end)" for scanning partial strings.
- de.unkrig.commons.text.expression.ExpressionEvaluator: Added "parsePart(String spec, int[] offset, int end)" for parsing partial strings.
- de.unkrig.commons.text.pattern.ExpressionMatchReplacer: Added "\Q...\E" and "\Q...".
- ExpressionMatchReplacer.parseExt(): Added "\xhh", "\uhhhh", "\x{h...h}" and "normal" escapes ("\r", "\n", asf.).
- Version 1.2.17 2022-07-22
-
- d.u.c.lang.Characters: Small fixes of character classes for JRE 8 backwards compatibility.
- d.u.c.lang.PrettyPrinter: Fixed one NPE in "PrettyPrinter.getPrettyClassName()" (handling of classes without a canonical name).
- d.u.c.lang.StringUtil: Added multi-needle variants of "boyerMooreHorspoolIndexOf()", e.g. "needle1|[Nn]eedle2".
- Added tests for "MapUtil.lazyMap()".
- d.u.c.util.collections.MapUtil: Created a brother method "MapUtil.lazyMap(Map<K, Producer<? extends V>> valueGetters)" for "MapUtil.lazyMap(Map<K, Function<? super I, ? extends V>> valueGetters, @Nullable final I in)".
- d.u.c.util.collections.IteratorUtil: Added "IteratorUtil.concat(List<Iterator>)".
- d.u.c.util.CommandLineOptionException: Include "toString()" of the cause into the OptionProcessingException's message, because the cause's "getMessage()" is often not verbose enough.
- d.u.c.text.expression.ExpressionEvaluator: Implemented the special attributes "_attributes", "_properties", "_staticAttributes" and "_staticProperties".
- d.u.c.text.expression.ExpressionEvaluator: Arrays are now silently pretty-printed in all places.
- Added "ObjectUtil.arrayToString(Object)".
- d.u.c.lang.protocol.ConsumerUtil: Moved "Grep.lineCounter()" to "ConsumerUtil".
- d.u.c.text.pattern.PatternUtil: Added to the "patternFinderWriter()" method family some more with a "Runnable flush" parameter.
- d.u.c.text.pattern.Finders: Added to the "patternFinder()" method family some more with a "Runnable flush" parameter.
- d.u.c.lang.protocol.Functions: Added "Functions.constant(O)".
- d.u.c.io.ConsumingWriter: Added the "ConsumingWriter".
- d.u.c.text.pattern.Substitutor: The Substitutor is now based on the Finders.patternFinder().
- d.u.c.text.pattern.PatternUtil: The object returned by "replacementStringMatchReplacer()" didn't have a proper "toString()" method.
- d.u.c.file.org.apache.commons.compress.archivers: "ArchiveFormat.forArchiveOutputStream(ArchiveOutputStream)" didn't work in all cases.
- Version 1.2.16 2022-03-21
-
- Iff the field "Throwable.message" cannot be made accessible, print a useful warning message on STDERR instead of throwing an exception.
- Gave up on Java 6 compatibility... now Java 8.
- Added "setPassword()", in addition to the system property.
- Gave up on Java 6 compatibility... now Java 8.
- Added "MavenUtil".
- Reverted the commit of "Glob.java" of 2021-12-01 19:22: "%" is *not* a valid suffix; otherwise all compressed contents (e.g. "dir/file.gz%") would match a pattern like "***foo".
- Added test case for "FileProcessings.starterFile(String regex)".
- Added "ContentProcessings.glob()".
- Added "PatternUtil.constantPrefix()".
- Added "FileProcessings.glob()".
- Added "OutputStreams.newOverwritingFileOutputStream(File)": "$xyz" was handled differently from "${xyz}" and caused an NPE.
- Added "AbstractParser.readEnum()".
- Gave up on backwards compatibility with Java 6 and 7 (removed substitutes for java.util.Base64).
- Added "Readers.readFully()".
- Added "InputStreams.readFully()".
- Set "useTransparentBounds(true)" when scanning, so token regexes can use lookaheads and lookbehinds.
- Eliminated the terrible hack where STORED zip archive entries were silently transformed into DEFLATED (because STORED entries need a correct SIZE and CRC, and these were difficult to calculate). Implemented this with a temporary storage using an "elastic pipe".
- Added "OutputStreams.updatesChecksum(final Checksum checksum) => OutputStream".
- The substitution count was wrong (*2 value).
- Typo in "elasticPipe()" caused an IllegalStateException.
- Added "ArchiveFormat.getCompressionMethod(ArchiveEntry)", which returns a string representation of the compression method used for the archive entry.
- Generating TAR archives: The "long file mode" (determines the handling of file names longer than 100 characters) can now be controlled with a system property "TarArchiveFormat.longFileMode"; the default is now "GNU" (and not, as before, "ERROR").
- Added "Numbers.unsignedCompareToByte/Short/Int/Long()".
- Added the "Relation" interface and the "Relations" utility class.
- Version 1.2.15 2020-11-06
-
- commons-file: Implemented decryption of encrypted 7ZIP archives with a sysem property "sevenZInputFilePassword".
- commons-file: Directory processing: JRE11+MS WINDOWS replace colons (#003A) in member names with #F03A, for whatever reason.
- commons-net: For method CONNECT, the second word of the request line is not a URI, but only an authority (host:port).
- commons-file: Handle AR archive entriy with empty name: Silently rename it to "__ROOT".
- commons-net: Fixed one resource leak.
- commons-file: "apache.commons.compress" no longer seems to miss the dependency on "org.tukaani" -- removed the workaround.
- commons-file: Augmented all content processing with an optional "lastModifiedDate" parameter.
- commons-file: Added (read-only) support for the "rpm" archive format. (An PM file is actually a compressed CPIO archive preceeded by some binary metadata.)
- commons-util: Added "MapUtil.lazyMap()".
- commons-text: Added "Notation.Phrase.size()" and "Notation.Phrase.get()".
- commons-io: Fixed an endless loop in "MarkableFileInputtream.skip()".
- commons-io: Fixed a ConcurrentModificationException.
- commons-text: Replaced single quotes in many messages with (the typographically more correct) double quotes.
- commons-util: Wrap exceptions that occur during option processing with the new "OptionProcessingException" (instead of an AssertionError).
- commons-io: Added "Writers.autoFlushing()" and "OutputStreams.autoFlushing()". Added "Readers.wye(Reader, Writer)" and marked "WyeReader" as deprecated.
- commons-io, commons-lang: Added tons of "? super" and "? extends" clauses.
- Version 1.2.14 2019-10-11
-
- Fixed an IllegalArgumentException in "Pattern2.compile(String, int)" and "Glob.compile(String, int)".
- StringStream: Made "next()" and "consume()" public.
- OptionalMethods: All methods get an additional first parameter "@Nullable String message", which, if non-null, is used for the UnsupportedOperationException.
- Added "XmlUtil.parse(DocumentBuilder, InputStream, String publicId, String encoding)".
- Added "Writers.tee(Writer... delegates)".
- ArArchiveFormat: Catch an NPE thrown by ArArchiveInputStream.
- ArArchiveFOrmat: Catch a NumberFormatException in ArArchiveInputStream.
- Work around "ZipException: uncompressed size is required for STORED method when not writing to a file"
- commons.doclet.Html: Changed fragment style from Java 7 to Java 8+.
- ResourceProcessings: "isFile()" did not decode %xx escape sequences in URLs.
- commons.lang.Comparators: Added "Comparators.keyComparator()" and ".valueComparator()".
- FileProcessings.directoryProcessor(): The "pathPredicate" was applied wrong for *files* (as opposed to directories). As a result, "zzgrep --include '***.class'" did not match .class files *in archives*.
- InputStreams: Added "EventCounter", "ExponentiallyLoggingEventCounter" and "InputStreams.statisticsInputStream()" for real-time IO statistics.
- Optimize archive file and compressed file reading by replacing small file READs with large file READs.
- Added input stream statistics in "CompressUtil" and "FileContentsProcessor".
- Fatal bug in "ConsumerUtil.head()" fixed!
- Added "commons.lang.protocolTuple2", "Tuple3" and "Tuple4".
- ExpressionMatchReplacer: Replaced "imports" with "singleImports" and "onDemandImports".
- ExpressionEvaluator: Added scanning of MULTI-LINE C-style comments. Added scanning of C++-style comments.
- Added "de.unkrig.commons.file.resourceprocessing", in symmetry with "fileprocessing" and "contentsprocessing", to process *resources* (designated by URLs) in addition to files and InputStreams.
- commons.file: Compressed file names and compressed contents paths are now suffixed with '%' (instead of '!') to circumvent problems with "Glob"'s directory prefix mechanism.
- Java 9 added "@Override public final CharBuffer CharBuffer.rewind() { ..." -- leads easily to a "NoSuchMethodError: java.nio.CharBuffer.rewind()Ljava/nio/CharBuffer"; a cast to "Buffer" is the workaround.
- Added "LineUtil.lineAndColumnTracker()".
- Added "Readers.onFirstChar()" and "Readers.trackLineAndColumn(Reader)".
- Added "Writers.onFirstChar()" and "Writers.trackLineAndColumn(Writer)".
- Removed unnecessary dependency on "de.unkrig.commons:commons-junit4".
- CommandLineOptions: Convert "any" to InetAddr "null" ("wildcard address").
- Version 1.2.13 2018-11-23
-
- In analogy with the "Substitutor", the new "Search" class finds pattern matches in a sequence of chunks in a "sliding" manner. Instead of a "match replacer", it invokes a "match handler".
- Breaking change: A "match replacer" is no longer a "FunctionWhichThrows<Matcher, String, EX>", but a "FunctionWhichThrows<MatchResult, String, EX>".
- Added support for HTTP method "OPTIONS".
- Refined the logic that checks for "Socket closed" exceptions.
- Version 1.2.12 2018-10-29
-
- ChunkedInputStream: Reading of blank line after last chunk was missing.
- Added "LevelFilteredPrinter.setNoErrors()".
- Added "evaluateExpressionTo(@Nullable String[] imports, String input,Class<T> targetType, Mapping<String, ?> variables)".
- Added convenience methods with a parameter "Object... variableNamesAndValues" for all methods with a parameter "Mapping<String, ?> variables".
- Added "or(PredicateWhichThrows<? super T, ? extends EX> lhs, PredicateWhichThrows<? super T, ? extends EX> rhs)" as a brother of "or(Predicate<? super T> lhs, Predicate<? super T> rhs)".
- Added "containsKeyPredicateWhichThrows(final Mapping<K, V>)".
- Removed the "<EX>" type parameter from "ExpressionEvaluator.parser(String spec)".
- Optimized "toPredicate()" and "constantExpression()" for the special cases "true", "false" and "null".
- Replaced "HttpAuthenticationServlett(String realm, String userName, String password)" with "HttpAuthenticationServlett(String realm, UserNamePasswordPredicate)".
- Added "removeParameter()".
- Added test cases for "de.unkrig.commons.util.Enums".
- Optimized performance of "Enums.valueOf(String, Class<? extends Enum>)".
- Added "enumSetFromString(String, Class<? extends Enum>)" and "valueOf(String, Class<? extends Enum>)".
- Started implementation of "IndexOf.indexOf(CharSequence haystack, int minIndex, int maxIndex, int limit)" for partial terminal matches.
- Added method "toCharArray(CharSequence cs)".
- Added "of(T... values)", "union(Set<? extends T> lhs, Set<? extends T> rhs)" and "intersection(Set<? extends T> lhs, Set<? extends T> rhs)".
- Added "toCharArray(Set<Character>)" and "toIntArray(Set<Integer>)".
- Added "append(char[] a, char... values)" and "mirror(char[][])".
- Fixed up several bugs in "boyerMooreHorspool...()".
- Renamed methods "knuthMorrisPratt...()" to "boyerMooreHolbrook...()".
- Fixed up the Knuth-Morris-Pratt "lastIndexOf()" method.
- More optimization on the "knuthMorrisPratt()" index-of algorithm.
- Renamed the "...Index" parameters of the "IndexOf.(indexOf|lastIndexOf)()" methods from "(from|to)Index" to "(min|max)Index", because "from" and "to" are very confusing for "lastIndexOf()".
- Utility functionality related to {@link HttpsURLConnection}s.
- Added "ExpressionEvaluator.parsePart()".
- Added "ExpressionEvaluator.parsePart()".
- "getMostSpecificMethod()": Didn't find some methods declared in superinterfaces.
- Added "containsKeyPredicate(Mapping)".
- The non-"...WhichThrows" protocol classes now declare the EX type parameter as "NoException" (was "RuntimeException") to make any code more self-documenting.
- "isLessSpecific()": The synthetic methods that are generated for covariant return values were regarded as "ambiguous".
- The "transformer" argument is now allowed to throw IOExceptions.
- "copyAndTransform()" now declares an "EX" type parameter.
- Added the "assertFind()" methods.
- Added "StringUtil.asJavaLiteral(String)".
- Added "IterableUtil.addAllElementsTo(Iterable, Collection)" and "IteratorUtil.addAllElementsTo(Iterator, Collection)".
- Moved "EMPTY_SORTED_SET" and "emptySortedSet()" from "CollectionUtil" to "Sets", leaving (deprecated) wrappers behind.
- Version 1.2.11 2017-08-23
-
- Added methods "Rule.goTo(S)", "Rule.push(S)" and "Rule.pop()", making many of the "StatefulScanner.addRule(...)" methods DEPRECATED.
- Added utility class "OptionalMethods".
- Made JRE 7's methods "isAlphabetic(int)" and "isIdeographic(int)" available for all JRE versions.
- "Token.captured" is no longer @Nullable; this is much more practical.
- Added "PrettyPrinter.codePointToString(int)".
- Added the following methods, and the plethora of predicates that implement them:
- javaCharacterClassFromName(String)
- unicodeCategoryFromName(String)
- unicodeBinaryPropertyFromName(String)
- unicodePredefinedCharacterClassFromName(String)
- posixCharacterClassFromName(String)
- Improved the "unexpected character" exception message by adding information about the current scanner state.
- Added the "de.unkrig.commons.util.EnhancedServiceLoader".
- Added appropriate "toString()" methods on "IndexOf" implementations.
- Extended the "StringUtil.IndexOf" interface with various "lastIndexOf()" methods.
- Added "StringUtil.newIndexOf(final String infix)" which implements the Knuth-Morris-Pratt algorithm.
- Version 1.2.10 2017-07-30
-
- Added method "MD5.of(InputStream)".
- Added utility class "de.unkrig.commons.lang.Comparators".
- CompressUtil: The "UnsupportedZipFeatureException" was not properly wrapped because it has none of the "usual" constructors that "ExceptionUtil.wrap()" requires.
- Added "InputStreams.readAll(InputStream, boolean closeInputStream)".
- de.unkrig.commons.util.collections.Peekerators: Introduced the concept of the "peekerator" - an Iterator with a "peek()" method.
- IterableUtil: Added "IterableUtil.NATURALS" and "NATURALS0".
- de.unkrig.commons.util.collections: Added methods "IteratorUtil.foR(...)" and "IterableUtil.foR(...)".
- de.unkrig.commons.util.collections: Moved "iteratorWithContext()" from IterableUtil to IteratorUtil.
- de.unkrig.commons.util.collections: Made "ElementWithContext" a top-level type, because it is now used by two compilation units (IteratorUtil and IterableUtil).
- commons-net and commons-util: Moved the "CustomAuthenticator" (and its fellows "CredentialsSpec", "JPasswordFields" and "Regex" from the ANTOLOGY project to the "de.unkrig.commons.net" project, where it belongs.
- CommandLineOptions: Gave "printResource(Class, String relativeResourceName, ...)" a sibling method "printResource(ClassLoader, String resourceName, ...)".
- de.unkrig.commons.net.http.HttpMessage: In "attempt unstreaming" mode, the body was written TWICE (caused IllegalStateExceptions).
- de.unkrig.commons.net.http: Added support for the "CONNECT" method.
- Added to many methods parameter(s) "xxxLoggingPrefix" so that one can customize the logging messages. By default, logging messages related to incoming data are prefixed with ">>> ", and logging messages related to outgoing data with "<<< ".
- HttpMessage: The "attempt unstreaming" feature can now be switched off (important for the CONNECT method).
- "IoUtil.copy()" now flushes the output stream when the next READ from the input stream will block.
- de.unkrig.commons.text.expression: Added support for nested types.
- Changed the return types of "Expression.evaluateTo[Primitive](...)" from "Object" to "T".
- AuthenticateHeaderParser: Implemented BASIC authentication for the "HttpClient" - useful to configure HTTP proxies that handle authentication.
- unkrig.commons/text/scanner: Added "String[] Token.captured" for access to input subsequences that were captured during the token match.
- ConsumerUtil: Added methods "head(m)" and "tail(n)".
- "Transformer" now extends "TransformerWhichThrows<I, O, RuntimeException>", as it always should have done.
- Added "BooleanProducer ProducerUtil.once()".
- Added the "de.unkrig.commons.text.scanner.XmlScanner" class and tests.
- Added "StringUtil.containsAny(String subject, String characters)", which checks whether the subject contains any of the characters.
- Added the "FilterAppendable", very much in anaolgy with the "java.io.FilterWriter".
- Added "CharSequences.from(char[])" and "CharSequences.from(char[], int off, int len)".
- Added the "Appendables" utility class.
- de.unkrig.commons.doclet.html.Html: Added support for {@value} on enum constants.
- de.unkrig.commons.doclet.html.Html: STANDARD_LINK_MAKER: Added support for links to enum constants.
- de.unkrig.commons.text.expression.ExpressionEvaluator: Breaking API change: "evaluateTo(..)" now returns a _nullable_ result.
- ConsumerUtil: Added various "store()" and "cumulate()" methods.
- de.unkrig.commons.net.http.HttpMessage: Added method "body(final ProducerWhichThrows<InputStream, IOException> in)".
- Automatic XML formatting is now not only active for content type "text/xml", but for any content type with an infix "xml".
- de.unkrig.commons.io.ReaderInputStream: First implementation of the "ReaderInputStream" as the complement of the "WriterOutputStream"; as of now supports only char set ISO8859-1.
- TransformingFilterReader: Bug fixed: "TransformingFilterReader.read()" returned -1 on the first pattern match.
- de.unkrig.commons.doclet.html.Html: @value: The argument was not SGML-Escaped.
- TransformerUtil: Added "cache(final Transformer<? super I, O> delegate, final Map<I, O> cache)".
- ContentsProcessings.processArchive(): "Directory archive entries" are now silently ignored, because they have no contents and thus it makes no sense to process them with the "contentsProcessor".
- FileUtil: Added a workaround for MS WINDOWS 7: Read-protected directory produces: isDirectory() => true; canRead() => true; list() => null; listFiles() => null (Caused NPEs.)
- PasswordAuthenticationStores: "..customAuthenticator_credentials,orig" file was not deleted after saving the credentials properties file.
- Version 1.2.9 2017-02-02
-
- de.unkrig.commons.crypto/security: Gave up on the concept of "DestroyableString"s - they cause more confusion than they are helpful.
- ProducerUtil: Fixed a serious bug in "cacheAsynchronously()": ExecutionExceptions thrown by the Future were not handled properly and caused the cache to "hang".
- Added "roundRobin()".
- Version 1.2.8 2017-01-27
-
- New utility class "AssertString": Provides methods like "assertContains(String expectedInfix, String actual)".
- Added a new package "de.unkrig.commons.lang.crypto", and moved many classes from "lang.security" to there.
- Extracted the UserNamePasswordStore from "de.unkrig.antology.task.SetAuthenticatorTask" to here.
- Added "StatefulScanner.getCurrentState()" and "setCurrentState()" so that the state of the scanner can be changed from outside admidst scanning.
- Added "AbstractScanner.suppress(TT)" and "suppress(EnumSet<TT>)".
- Added "ProducterUtil.filter(Producer, Predicate)".
- StatefulScanner: Declared a constant "REMAIN" for the "addRule()" methods that have a final "nextState" parameter.
- AbstractParser: End-of-input handling was brooken in "read(Object... tokenTypeOrText)".
- Added the "de.unkrig.commons.lang.Characters" utility class.
- The first parameter of methods "StatefulScanner.addRule(EnumSet<S>, ...)" is now NULLABLE, where "null" means "any state, including the default state".
- Added a constructor "StatefulScanner(StatefulScanner)" that clones the configuration, but not the state.
- StatefulScanner: Added methods "addRule(@Nullable EnumSet<S> states, String regex, TT tokenType)" and "addRule(@Nullable EnumSet<S> states, String regex, TT tokenType, S nextState)", which make it easier to declare rules that apply in more than one non-default states.
- Fixed one major design error in "CommandLineOptions": Method "applyCommandLineOption()" now gets a "Method" as its second parameter, instead of, previously, a "CommandLineOption" object.
- Version 1.2.7 2016-12-12
-
- IoUtil: Added "singlingFilterReader()" and "singlingInputStream()".
- PatternUtil: Fixed several bugs in "PatternUtil.replaceAll()".
- PatternUtil: Added "replaceAllFilterReader()".
- PatternUtil: Added "replaceAllFilterWriter()".
- Moved many, many methods from "IoUtil" to the new utility classes "InputStreams", "OutputStreams", "Readers", "Writers" and "FransformingFilter(Reader|Writer)".
- Added "StringTransformers", a collection of simple "Transformer<CharSequence, CharSequence>"s.
- Added TransformerUtil.chain(Transformer...)".
- Extracted "PatternUtil.replaceAllFilterReader()" as the new "Substitutor" class.
- Adapted to the refactoring of "IoUtil".
- Added unit tests for the "Substitutor".
- "IoUtil.findOnPath()": The search stopped at the FIRST archive file.
- Version 1.2.6 2016-11-30
-
- commons-io: Added the "CharFilter", "CharFilterReader" and "CharFilterWrite", which are the char-wise equivalent of "ByteFilter(InputStream|OutputStream)?".
- Glob: Added the "" special case for the "container match".
- FileProcessings, ContentsProcessings: The "pathPredicate" was missing from content processors.
- Version 1.2.5 2016-11-28
-
- Printers: Added "Printers.redirectToFile(Level|EnumSet<Level>)".
- Version 1.2.4 2016-11-25
-
- IoUtil: Fixed one MalformedURLException.
- Added the "ByteFilterOutputStream", as a complement to the "ByteFilterInputStream".
- ContentsTransformations: Added methods "chain(ContentsTransformer, ContentsTransformer)", "asInputStream(InputStream delegate, ContentsTransformer, String)" and "asOutputStream(ContentsTransformer, OutputStream delegate, name)".
- Added "SelectiveContentsTransformer.create()", which can conduct many optimizations.
- Workover of the "Printers" API: A lot of functionality went from "Printers" to "AbstractPrinter"; the old methods, however, remain, and are now marked as @deprecated.
- IoUtil: Added methods "findOnPath(File[], String resourceName)" and "copyTree(URL, File)".
- Added "de.unkrig.commons.lang.ClassLoaders".
- Slightly clarified the wording of the license: Replaced "author" with "copyright holder and its contributors".
- Version 1.2.3, 2016-11-07
-
- commons-file: The "formats" files didn't make it into the JAR, because they were in "src/main/java" instead of "src/main/resource".
- Version 1.2.2, 2016-11-07
-
- XmlUtil.parse(): Detect and throw IOExceptions (esp. FileNotFoundException) properly.
- commons-junit4: Removed the unnecessary dependency on "org.apache.commons:commons-compress".
- For unknown reasons, the POM of org.apache.commons:commons-compress fails to declare the dependency on "org.tukaani:xz", although it definitely depends on it. Thus added the dependency in "de.unkrig.commons:commons-file"'s POM.
- "IoUtil.parallel()", as a side effect, caused the JVM to not terminate when it is shut down orderly (i.e. "main()" returns or "System.exit()" is invoked).
- Added "ThreadUtil.DAEMON_THREAD_FACTORY".
- Version 1.2.1, 2016-10-30
-
- Removed the nasty circular dependencies around "commons-junit".
- Version 1.2.0, 2016-10-24
-
- Replaced the old ANT build with MAVEN.
- Version 1.1.12, 2016-10-14
-
- Bug fixes in "ProducerUtil.cache()".
- Version 1.1.11, 2016-08-13
-
- ProducerUtil.cache...(): The "invalidationCondition" was treated the wrong way around in some places. Pulled things straigt.
- PredicateUtil: Added method "static synchronizedPredicate(Predicate)".
- Version 1.1.10, 2016-08-12
-
- ProducerUtil.cache(): When the first call of "delegate.produce()" threw an exception, then the NEXT invocation returned NULL (instead of calling "delegate.produce()" again).
- ProducerUtil: Added "cacheAsynchronously()" and "atMostEvery(ms, firstProduct, startAtTrueProduct)".
- Version 1.1.9, 2016-08-02
-
- Fixed the bounds of of the parameters of some "MapUtil()" methods, to make them more versatile.
- Version 1.1.8, 2016-07-26
-
- Moved various map-related methods from "CollectionUtil" to "MapUtil" (where they actually belong), marked the original methods with "@Deprecated" and replaced them with invocations of the "new" methods.
- Moved a few more fields and methods from "CollectionUtil" to "IterableUtil" and "IteratorUtil", where they belong.
- Added many missing bounds to method parameters to make the methods more flexible.
- Version 1.1.7, 2016-06-17
-
- Added "ObjectUtil.hashCode()".
- Added "PredicateUtil.always(boolean)".
- Added "PredicateUtil.xor()".
- "Predicate<T>" now extends "PredicateWhichThrows<T, RuntimeException>".
- Added "ProducerUtil.cache(delegate, condition)".
- "commons/doclet": Added support for the inline tags "{@docRoot}", "{@literal}", "{@constantsof}" and "{@constantsofplain}".
- CommandLineOptions: Initial support for "option cardinality" and "option group cardinality".
- Added "de.unkrig.commons.util.Enums".
- Added the "IdentityHashSet".
- Added methods "Pipe.read(byte[])" and "Pipe.write(byte[])".
- Changed type parameter "EX" of "(Consumer|Function|Predicate|Producer|Runnable|Transformer)WhichThrows" interfaces from "extends Exception" to "extends Throwable" to allow for seamless handlich of the "Longjump" throwable.
- Added a static "ignoreExceptions()" method to the "(Consumer|Function|Predicate|Producer|Runnable|Transformer)Util" classes.
- Longjump: Added various "catchLongjump()" methods for easy integration with Java 8 lambdas.
- Added the following methods:
- IoUtil.copy(File, File, CollisionStrategy)
- IoUtil.copyTree(File, File, CollisionStrategy)
- IoUtil.isContentIdentical(File, File)
- Version 1.1.6, 2016-03-21
-
- Added "ObjectUtil.almostNull()".
- Version 1.1.5, 2016-03-14
-
- de.unkrig.commons.io.IoUtil: Added "skip()" and "skipAll()".
- de.unkrig.commons.text.PatternUtil: Replaced the "Replacer" interface with a "Function<Matcher, String>".
- de.unkrig.commons.file.ExceptionHandler: Handler methods now have, for consistency with the other APIs, an additional parameter "String path".
- de.unkrig.commons.net: TcpServer(SSLContext): Remove several "cipher suites" from the SSL context because otherwise some modern browsers refuse to connect with this server.
- Version 1.1.4, 2015-11-11
-
- de.unkrig.commons.text: JavaScanner/JsonScanner: The CXX_COMMENT now INCLUDES the trailing line break.
- de.unkrig.commons.net: Added Utility class "UrlConnections", with the single method "followRedirects2()".
- de.unkrig.commons.text: Replaced "CamelCase" with the more versatile "Notations" helper class.
- de.unkrig.util.collections: Added the "Stack" interface and its implementation "ArrayStack".
- de.unkrig.commons.lang: Added the "FunctionWhichThrows" interface and the "Functions" utility class.
- Version 1.1.3, 2015-09-19
-
- de.unkrig.commons.doclet: Removed the concept of generating MEDIAWIKI markup - MEDIAWIKI is for COLLABORATION, not for documentation.
- Added "de.unkrig.commons.util.CommandLineOptions" for elegant command line processing.
- Added "de.unkrig.commons.util.concurrent.ByteStreamSequentializer" and "ObjectSequentializer".
- Version 1.1.2, 2015-08-31
-
- Added optional dependencies on 'xz' and APACHE COMPRESS.
- Added "de.unkrig.commons.doclet".
- Added "de.unkrig.commons.text.xml".
- Added "de.unkrig.commons.util.collections.IteratorUtil".
- Various bug fixes in de.unkrig.commons.file
- Added "de.unkrig.commons.file.contentstransformation.TextTransformer".
- "de.unkrig.commons.file.fileprocessing" now supports parallel execution.
- The "JavaScanner" now decodes unicode escapes - strictly speaking: wrong, but very useful in some situations.
- Version 1.1.1, 2015-02-24
-
- Gave up on Java 5 compatibility; Java >= 6 is now required.
- UPDATE no longer takes two separate paramaters 'glob' and 'update-file', but one parameter 'glob=update-file', which makes it possible to use variable references when creating the 'update-file' name.
- Push releases to OSSRH and eventually to MAVEN CENTRAL
- Version 1.1.0, 2015-02-04
-
- Major refactoring of 'de.unkrig.commons.file.fileprocessing' and 'de.unkrig.commons.file.contentsprocessing'.
- de.unkrig.commons.file.filetransformation: Thanks to apache.commons.compress, we now not only support the ZIP archive format and the GZIP compression algorithm, but also the AR, ARJ, CPIO, DUMP, JAR, TAR and SEVEN_Z archive formats and the BZIP2, PACK200, XZ, LZMA, SNAPPY and Z compression algorithms.
- Added 'de.unkrig.commons.lang.security.Sandbox'.
- Version 1.0.5, 2014-05-01
-
- Moved the <log>, <logging> and <simpleLogging> tasks from 'de.unkrig.commons.util' to 'de.unkrig.antcontrib'.
- Version 1.0.4, 2014-04-29
-
- 'keepOriginals' did not work for in-place file transformations.
- <simplelogging>: Added attribute 'spec="..."'.
- <simpleLogging>: Attribute 'debug="..."' no longer is boolean, but "FINE|FINER|FINEST".
- <logging>: Removed attribute 'parent="..."'
- <logging>: Added attribute 'clearFilter="true"'.
- Renamed task <simplelogging> to <simpleLogging> (with a big 'L').
- Versions 1.0.3 and earlier
- No change log available.