ao-hodgepodge-5.3.0-SNAPSHOT
Snapshot Notes
- Updated to Checkstyle 10.21.1.
- Minimum Java version changed from 1.8 to 11.
- SyncFile improvements:
RandomAccessFile.length()is returning 0 on Linux block devices as of Java 11. Implemented fall-back to/sbin/blockdev --getsize64 …, but only for canonical paths starting with/dev/.- Debug output disabled, but verbose remains
- New class AoTextField.
- New class RunnableDocumentListener.
ao-hodgepodge-5.2.0
Release Notes
- Additional recurring schedule parsing:
- Supporting "other" for "every ### unit", equal to "2".
- Supporting ordinals for "every ### unit" from 2 to 12: "second", "third", …, "twelfth".
- Days of week may now be referred to in plural form, such as "Fridays".
- Months of year may now be referred to in plural form, such as "Januarys" or "Januaries".
- Supporting days of week as unit for "every ### unit", such as "every other Friday" or "every 100 mondays".
- Substituting more specialized recurring implementations for "every 1 (day|week|month|year)" as equivalent to "everyday", "weekly", "monthly", "yearly".
- Substituting "everyday" in place of "on …" that contains every day of the week.
- Substituting "weekdays" in place of "on …" that contains every weekday.
- Substituting "monthly" in place of "in …" that contains every month.
- Added missing implementations of
checkScheduleFrom(…). - Maintaining original day-of-month in all types of yearly and monthly processing. Some uses would previously round-down for shorter months and lose the original "on" day-of-month.
- Added unit tests for recurring scheduling.
ao-hodgepodge-5.1.2
Release Notes
-
Fixed bug in
Benchmarkthat was seeking to byte offset instead of 4k block number. This resulted in significantly higher I/O measurements due to caching. This was a result of some previous refactoring to use random number generator streams.
ao-hodgepodge-5.1.1
Release Notes
RandomAccessFile.length()is returning 0 on Linux block devices as of Java 11. Implemented fall-back to/sbin/blockdev --getsize64 …, but only for canonical paths starting with/dev/.
ao-hodgepodge-5.1.0
Release Notes
- Updated dependencies.
- New interface
NoClosealong with staticwrap(…)methods to avoid duplicate wrapping. MarkupCoercion.write(…)disallows potential bypass of buffered encoders.MarkupCoercionalways writes prefix/suffix even when value is null, for consistency. For example, writing null text in JavaScript should still be "", since writing null is equivalent to "".MarkupCoercioncan unwrap anEncoderWriterwhen encoder is null. This is done for consistency with the related implementation ofCoercionin AO Lang.- Removed all implementations of
Object.finalize().
ao-hodgepodge-5.0.2
Release Notes
- Now properly restoring Thread interrupted state on
InterruptedException. - Cleaning-up ThreadLocal variables when no longer used, see https://rules.sonarsource.com/java/RSPEC-5164.
DontCloseOutputStreamnow overrideswrite(byte[],int,int)for greater performance.-
Deprecated
DontCloseInputStreamandDontCloseOutputStreamin favor or duplicateNoCloseInputStreamandNoCloseOutputStream.
ao-hodgepodge-5.0.1
Release Notes
- Log warnings when unable to read resource bundle source files due to SecurityException.
notify()replaced withnotifyAll()since more than one thread can be waiting.
ao-hodgepodge-5.0.0
Release Notes
- Now supports Java 9+ modules with included
module-info.class. - Maven artifact relocated from
com.aoindustries:aocode-publictocom.aoapps:ao-hodgepodge. - Packages renamed from
com.aoindustries.*tocom.aoapps.hodgepodge.*. - Renamed
NativeToUnixWritertoNativeToPosixWriter. Images.getImageFromResourcesnow uses a provided lambda function to get the resources. This allows access to resources without opening the package.
aocode-public-4.9.1
Release Notes
RandomAccessFile.length()is returning 0 on Linux block devices as of Java 11. Implemented fall-back to/sbin/blockdev --getsize64 ….
aocode-public-4.9.0
Release Notes
MarkupCoercionimprovements:- Added optimization for
Segmentto not convert to String for bundle lookups. - Added support for
Optionalby unwrapping the value.
- Added optimization for
aocode-public-4.8.0
Release Notes
Coercionmoved out of AO Encoding:- Non-localized parts moved to AO Lang.
-
Localized parts moved to this project and
renamed to
MarkupCoercion. - New pluggable
CoercionOptimizerto allow this decoupling. - Servlet-specific optimizations moved to AO Servlet Util.
aocode-public-4.7.2
Release Notes
AOPoolnow logs allocation stack traces when full and a thread has to wait for a connection. The logging is limited to once per minute maximum, due to the message length.
aocode-public-4.7.1
Release Notes
- Moved
UnixCryptto the new AO Security project.
aocode-public-4.7.0
Release Notes
-
Deprecated
Base64Coderin favor ofBase64available since Java 8. -
Removed dependency on the
com.aoindustries.securitypackage, which has been split from AO Lang to the new AO Security project:AOPoolnow internally tracks thread ID as aLonginstead ofSmallIdentifier. This only affects the textual display of thread ID inprintStatisticsHTML(…), and it is arguably more meaningful since they are now sequentially generated.-
Moved read/write methods for
IdentifierandSmallIdentifierfromStreamableInputandStreamableOutputto static methods on a newSecurityStreamablesclass.
aocode-public-4.6.0
Release Notes
-
Deprecated fixed padding in
PaddingOutputStreamin favor of random padding. Also supports zero value forpadding, which disables padding, which is consistent withCipher.getBlockSize()returning zero when not a block cipher.
aocode-public-4.5.1
Release Notes
-
Reverted back to the
ThreadLocalfor in-context translation settings being initialized when missing, instead of returningnull. This is for compatibility with prior versions. With this restored, sub-tasks are part of the same settings, and thus share lookup maps, even when settings are not explicitly set prior to sub-task execution.
aocode-public-4.5.0
Release Notes
- In-context translation settings may now be reset and restored on-the-fly. This allows the in-context translations to be temporarily reconfigured.
- New option to disable scripts within the in-context translation tools. This is useful when writing HTML that will not be immediately used by the browser, such as when generating email body content.
- In-context translation editor now supports both SGML (HTML) and XML (XHTML) serializations.
- In-context translations markups may now be disabled while still recording lookups. This allows the user interface to display the editor for lookups that were performed while markup disabled.
aocode-public-4.4.0
Release Notes
-
Split development-only classes into a new sub-project in
devel/. This sub-project is used only for development and is never deployed to artifact repositories. Reverted a previous change made on 2020-03-01 that was released in version 4.0.0 on 2020-03-25. Encoding of in-context translation lookup markups is required after all.
One example is the lookup IDs added inside alt attributes like
alt="<##<value>##>". With this bug, this was incorrectly written asalt="<##<value>##>", which fails XML validation.This bug is unlikely to affect production systems for two reasons:
- Lookup markups are only performed when in-context translations are enabled, which is only when in development mode.
- Most production sites are served in SGML mode, where browsers will handle the incorrect HTML formatting. XML mode is used in development specifically for this stricter validation.
aocode-public-4.3.0
Release Notes
-
Moved the
com.aoindustries.sqlpackage to the new AO SQL project, with the exception ofLocalizedSQLExceptionthat stays here with other localized exceptions. ConnectionWrappermoved to newcom.aoindustries.sql.wrapperpackage in the new AO SQL Wrapper project.AOConnectionPoolmoved to newcom.aoindustries.sql.poolpackage in the new AO SQL Pool project.BackgroundCachenow allows allThrowable. This is a source-compatible, but binary-incompatible change. A recompile of dependents will is required.- Temporary files are now created with more secure default permissions.
Now registering exception types for use with
Throwables.newSurrogate(…)that supports creating new instances of throwables in order to have caller stack trace. When wrapped, the original throwable is the cause of the new throwable. When not wrapped, the original throwable is used directly and caller stack trace is lost.This is used to maintain exception types and states across thread boundaries, such as when an exception cause is obtained from an
ExecutionException.- Now using
java.io.UncheckedIOExceptioninstead ofWrappedException.
aocode-public-4.2.0
Release Notes
-
Added support for Web development file types
*.less,*.sass,*.scss,*.css.map, and*.js.map.
aocode-public-4.1.1
Release Notes
ZeroFileno longer writes blank lines when there are no blocks to read or write.
aocode-public-4.1.0
Release Notes
ModifiablePropertiesResourceBundlenow writes properties files with keys sorted (base, base + MODIFIED_SUFFIX, base + VALIDATED_SUFFIX). This groups the keys together better, which aids version control diffs.
aocode-public-4.0.0
Release Notes
- Minimum Java version changed from 1.7 to 1.8.
-
Reduced use of property substitutions in
pom.xml. This is to help 3rd-party parsers that fail to perform full Maven-compatible substitutions. -
Deprecated
MimeType: This simple hard-coded list of MIME types is not maintained well. It is strongly recommended to use a different, well-supported API. -
Made
EncodingUtils.toString(Object)(deprecated) consistent with Coercion:- Supporting instances of Writable.
- Supporting instances of CharSequence.
- Supporting instances of
char[].
EncodingUtils.encodeHtml(…)(deprecated) now require additionalisXhtmlflag.- Connection pool statistics HTML generation now supports both SGML and XML serializations.
-
New bundle lookup markup types:
- MarkupType.CSS for
text/css.
- MarkupType.CSS for
com.aoindustries.util.logging.*significantly reworked to be compatible withlogging.properties.TopologicalSorternow returns a modifiableSet. Previously it returned an unmodifiableList.- Updated dependencies.
- Removed the
com.aoindustries.securitypackage:com.aoindustries.security.NotAuthenticatedExceptionmoved to the AO Lang project. Resolves this split-package with AO Lang.-
Removed
com.aoindustries.security.AccountDisabledException; please use AccountLockedException instead. -
Removed
com.aoindustries.security.AccountNotFoundException; please use AccountNotFoundException instead. -
Removed
com.aoindustries.security.BadPasswordException; please use FailedLoginException instead. -
Removed
com.aoindustries.security.IncompleteLoginException; please use CredentialNotFoundException instead. -
Removed
com.aoindustries.security.LoginException; please use LoginException instead.
- Moved the
com.aoindustries.util.persistentpackage to the new AO Persistence project. - Split collection-related utilities into new AO Collections project.
aocode-public-3.1.1
Release Notes
- Now supporting queries and anchors on
EditableResourceBundle.setValueUrl.
aocode-public-3.1.0
Release Notes
- During coercion, XML Node will be output as UTF-8.
- Moved networking utilities to AO Net Types.
- Moved Servlet and JSP related utilities to a new AO Servlet Util project.
- This project no longer depends on servlet and JSP APIs.
- Moved the following classes to the new AO Lang project:
com.aoindustries.util.StringUtility
-
New class DiffableProperties
to format Properties
files in a way optimized for diff tools, such as
git diff. Best used in conjunction with SortedProperties. - Made CommentCaptureInputStream public so other tools may use it when manipulating Properties files.
- Made SkipCommentsFilterOutputStream public so other tools may use it when manipulating Properties files.
- ModifiablePropertiesResourceBundle now stores the properties files in the maximally diffable format. It also no longer overwrites the file when the content has not changed.
aocode-public-3.0.0
Release Notes
- New abstract class ConnectionWrapper split from PostgresqlConnectionWrapper to be used by other implementations of Connection wrapping.
- Removed some long-deprecated or otherwise long-unused classes and methods:
com.aoindustries.servlet.http.ServletUtil.getResource(…)com.aoindustries.servlet.http.ServletUtil.resourceExists(…)com.aoindustries.sql.SQLUtility.escapeSQL(…)com.aoindustries.sql.SQLUtility.encodeString(String)com.aoindustries.sql.SQLUtility.decodeString(String)com.aoindustries.sql.SQLUtility.negIntIfEmpty(String)com.aoindustries.sql.SQLUtility.negLongIfEmpty(String)com.aoindustries.sql.SQLUtility.nullIfEmpty(String)com.aoindustries.sql.SQLUtility.getDaysFromMillis(long)com.aoindustries.sql.SQLUtility.getMillisFromDays(long)com.aoindustries.sql.SQLUtility.roundToDay(long)com.aoindustries.sql.SQLUtility.printResultSetHTMLTable(ResultSet, Appendable, String, boolean)com.aoindustries.util.Stackcom.aoindustries.util.StringUtility.buildEmailList(String[])com.aoindustries.util.StringUtility.buildList(…)com.aoindustries.util.StringUtility.compareToDDMMYYYY(String, String)com.aoindustries.util.StringUtility.convertStringDateToTime(String)com.aoindustries.util.StringUtility.countOccurances(…)com.aoindustries.util.StringUtility.escapeSQL(String)com.aoindustries.util.StringUtility.getDateMMDDYYYY(String)com.aoindustries.util.StringUtility.getDateString(…)com.aoindustries.util.StringUtility.getDateStringMMDDYYYY(Date)com.aoindustries.util.StringUtility.getDateStringSecond(…)com.aoindustries.util.StringUtility.getStringArray(List)com.aoindustries.util.StringUtility.intern(String)com.aoindustries.util.StringUtility.isValidDate(String)com.aoindustries.util.StringUtility.leapYear(int)com.aoindustries.util.StringUtility.removeChars(…)com.aoindustries.util.WildcardPatternMatcher.getMatchNone()com.aoindustries.util.WildcardPatternMatcher.getMatchAll()com.aoindustries.util.WildcardPatternMatcher.getInstance(String)com.aoindustries.util.logging.ProcessTimer.ProcessTimer(Logger, Random, String, String, String, String, long, long)com.aoindustries.util.logging.ProcessTimer.finished()com.aoindustries.util.persistent.PersistentCollections.charToBuffer(…)com.aoindustries.util.persistent.PersistentCollections.bufferToChar(…)com.aoindustries.util.persistent.PersistentCollections.shortToBuffer(…)com.aoindustries.util.persistent.PersistentCollections.bufferToShort(…)com.aoindustries.util.persistent.PersistentCollections.intToBuffer(…)com.aoindustries.util.persistent.PersistentCollections.bufferToInt(…)com.aoindustries.util.persistent.PersistentCollections.longToBuffer(…)com.aoindustries.util.persistent.PersistentCollections.bufferToLong(…)
- Significant, breaking changes to SQLUtility:
- Renamed
getDate(long)toformatDate(long) - Added
formatDate(long, TimeZone)for other time zones - Added
formatDate(Long)for nullable integers - Added
formatDate(Long, TimeZone)for nullable integers - Added
formatDate(Date)for dates - Added
formatDate(Date, TimeZone)for dates - Renamed
getDate(String)toparseDate(String) - Added
parseDate(String, TimeZone)for other time zones - Renamed
getDateTime(long)toformatDateTime(long) - Added
formatDateTime(long, TimeZone)for other time zones - Added
formatDateTime(Long)for nullable integers - Added
formatDateTime(Long, TimeZone)for nullable integers - Added
formatDateTime(Date)for dates - Added
formatDateTime(Date, TimeZone)for dates - Renamed
getDateTime(String)toparseDateTime(String) - Added
parseDateTime(String, TimeZone)for other time zones - Renamed
getTime(long)toformatTime(long) - Added
formatTime(long, TimeZone)for other time zones - Added
formatTime(Long)for nullable integers - Added
formatTime(Long, TimeZone)for nullable integers - Added
formatTime(Date)for dates - Added
formatTime(Date, TimeZone)for dates - Renamed
getDecimal(int)toformatDecimal2(int) - Renamed
getDecimal(long)toformatDecimal2(long) - Renamed
getPennies(String)toparseDecimal2(String) - Renamed
getPenniesLong(String)toparseLongDecimal2(String) - Renamed
getMilliDecimal(int)toformatDecimal3(int) - Renamed
getMilliDecimal(long)toformatDecimal3(long) - Renamed
getMillis(String)toparseDecimal3(String) - Added
parseLongDecimal3(String)
- Renamed
- Renamed
Compressed*toStreamable*and moved to newcom.aoindustries.io.streampackage:- Renamed
CompressedDataInputStreamto StreamableInput. - Renamed
CompressedDataOutputStreamto StreamableOutput. - Renamed
CompressedReadableto StreamReadable. - Renamed
CompressedWritableto StreamWritable. - Moved
Streamableto Streamable.
- Renamed
New methods to read and write possibly nullable Timestamp in StreamableOutput and StreamableInput.
These methods use a wire protocol deliberately compatible with Instant in Java 8, however the API remains
Timestamp-only since the minimum Java version is still 1.7.-
Added protocol version to reading in
StreamableandCompressedReadable, because a server may be reading objects streamed by older clients. Protocol compatibility can be necessary both directions. - New methods to read and write possibly nullable
IdentifierandSmallIdentifier. FileListnow implementsCloseable.SQLUtility.printTable(…)improvements:-
Created a variant of
printTable(…)that acceptsIterable<? extends Object[]>for row data. Deprecated the old variants as they forced the caller to combine all their cell values into big collections or arrays, which is not conducive to displaying large, streamed datasets. printTable(…)now uses code points to correctly align output with characters outside the Basic Multilingual Plane.- Implemented Unicode-formatted output when in interactive mode.
-
Created a variant of
-
New method
FifoFile.flush()that may be used to flush the fifo file. This makes sense here because reads also update the underlying fifo persistence. UrlUtils.encodeUrlPath(String, String)now skips encoding the full set of the characters defined in RFC 3986: Reserved Characters. Previously, only a partial subset of these characters were added as-needed. We have now improved the implementation to match the specification.This means "mailto:" links will now maintain the "@" in the email address, instead of it being incorrectly percent-encoded.
UrlUtils.encodeUrlPath(String, String)now correctly encodes space as%20instead of+.UrlUtils.encodeUrlPath(String, String)now determines query string or fragment by first ? or #, accordingly, instead of last.UrlUtils.decodeUrlPath(String, String)now re-encodes characters that decode to reserved characters to avoid ambiguity.- Case-insensitive matching of URL schemes. Previously, URL schemes were matched case-sensitive, while the spec is case-insensitive. This has been OK given we only use lower-case schemes within our code and tools, but this is now a correct implementation.
PersistentLinkedListnow implements Deque instead of Queue.
aocode-public-2.1.1
Release Notes
Using
;-split-package:=firstof maven-bundle-plugin to avoid bundling the classes in the split packages from AO Lang.These split packages are transitional. In the future we will have more fine-grained projects.
aocode-public-2.1.0
Release Notes
- New methods to read and write nullable Byte:
- New methods to read and write nullable Short:
- Using managed dependencies:
- This project uses managed dependencies.
- This project's managed dependencies may also be imported by other projects.
- Improved API docs linking.
- New methods to quickly get the last modified time of a web resource. The result may be cached for up to five seconds.
- Improved implementation of java.sql.Wrapper.
aocode-public-2.0.0
Release Notes
- Minimum Java version changed from 1.6 to 1.7.
- Deprecated in favor of new TempFileContext that does not suffer from a memory leak in long-running applications:
- Improved ServletContextCache to still work correctly when accessed before initialized by ServletContextCacheListener.Initializer. This allows the caches to safely be used during application initialization. This also allows the cache to still work correctly without being initialized as a web listener, at the cost of not stopping promptly when context destroyed.
- New constant ServletUtil.SKIP_PAGE_EXCEPTION to avoid the overhead of instantiating new SkipPageException repeatedly during routine operation.
UnmodifiableHttpParameters.wrapnow returnsnullwhen givennull.- New methods to read and write nullable Boolean:
- New methods to join into arbitrary Appendable:
-
New bundle lookup markup types:
- MarkupType.MYSQL for the MySQL
mysqlcommand line. - MarkupType.PSQL for the PostgreSQL
psqlcommand line. - MarkupType.SH for shell script encoding.
- MarkupType.MYSQL for the MySQL
- Dispatcher may now forward and include to caller-provided RequestDispatcher.
aocode-public-1.9.0
Release Notes
- Fixed bug in
ByteCountInputStreamthat subtracted the-1returned at end of stream. - Moved the following classes to the new AO Lang project:
com.aoindustries.io.AoByteArrayInputStreamcom.aoindustries.io.AoByteArrayOutputStreamcom.aoindustries.io.AoCharArrayWritercom.aoindustries.io.Encodercom.aoindustries.io.EncoderWritercom.aoindustries.io.FastExternalizablecom.aoindustries.io.FastObjectInputcom.aoindustries.io.FastObjectOutputcom.aoindustries.io.FileUtilscom.aoindustries.io.IoUtilscom.aoindustries.io.LocalizedIOExceptioncom.aoindustries.io.NullOutputStreamcom.aoindustries.io.NullPrintWritercom.aoindustries.io.NullWritercom.aoindustries.io.SniffInputStreamcom.aoindustries.io.Writablecom.aoindustries.io.WriterFacadecom.aoindustries.io.WriterOutputStreamcom.aoindustries.lang.Disposablecom.aoindustries.lang.DisposedExceptioncom.aoindustries.lang.EnumUtilscom.aoindustries.lang.LocalizedIllegalArgumentExceptioncom.aoindustries.lang.NotImplementedExceptioncom.aoindustries.lang.NullArgumentExceptioncom.aoindustries.lang.ObjectUtilscom.aoindustries.lang.ProcessResultcom.aoindustries.lang.RuntimeUtilscom.aoindustries.lang.SysExitscom.aoindustries.lang.reflect.Methodscom.aoindustries.lang.reflect.ReflectionExceptioncom.aoindustries.math.BigFractioncom.aoindustries.math.LongLongcom.aoindustries.math.NullMathcom.aoindustries.math.SafeMathcom.aoindustries.math.Statisticscom.aoindustries.math.UnsignedLongcom.aoindustries.nio.charset.Charsetscom.aoindustries.security.HashedKeycom.aoindustries.security.HashedPasswordcom.aoindustries.security.Identifiercom.aoindustries.security.SmallIdentifiercom.aoindustries.sql.LocalizedSQLExceptioncom.aoindustries.sql.UnmodifiableTimestampcom.aoindustries.sql.WrappedSQLExceptioncom.aoindustries.text.MessageFormatFactorycom.aoindustries.text.SmartComparatorcom.aoindustries.text.UnmodifiableMessageFormatcom.aoindustries.time.Clockcom.aoindustries.time.Durationcom.aoindustries.time.Instantcom.aoindustries.util.AoArrayscom.aoindustries.util.AoCollectionscom.aoindustries.util.AtomicSequencecom.aoindustries.util.BufferManagercom.aoindustries.util.CalendarUtilscom.aoindustries.util.ComparatorUtilscom.aoindustries.util.EnumerationIteratorcom.aoindustries.util.ErrorPrintercom.aoindustries.util.GetOptcom.aoindustries.util.HashCodeComparatorcom.aoindustries.util.IdentityKeycom.aoindustries.util.InternUtilscom.aoindustries.util.Internablecom.aoindustries.util.MinimalListcom.aoindustries.util.MinimalMapcom.aoindustries.util.PropertiesUtilscom.aoindustries.util.Sequencecom.aoindustries.util.SortedPropertiescom.aoindustries.util.UnmodifiableCalendarcom.aoindustries.util.UnmodifiableDatecom.aoindustries.util.UnsynchronizedSequencecom.aoindustries.util.WrappedExceptioncom.aoindustries.util.WrappedExceptionscom.aoindustries.util.concurrent.ThreadLocalCallablecom.aoindustries.util.concurrent.ThreadLocalRunnablecom.aoindustries.util.concurrent.ThreadLocalsCallablecom.aoindustries.util.concurrent.ThreadLocalsRunnablecom.aoindustries.util.i18n.ApplicationResourcesAccessorcom.aoindustries.util.i18n.CurrencyComparatorcom.aoindustries.util.i18n.LocaleComparatorcom.aoindustries.util.i18n.LocaleStringcom.aoindustries.util.i18n.Localescom.aoindustries.util.i18n.Moneycom.aoindustries.util.i18n.ThreadLocalecom.aoindustries.util.zip.CorrectedGZIPInputStreamcom.aoindustries.util.zip.ZipEntryFiltercom.aoindustries.util.zip.ZipUtilscom.aoindustries.xml.XmlUtils
-
New interfaces
CompressedReadableandCompressedWritablefor code that only needs to handle one direction ofStreamable. AOPoolimprovements:- More fine-grained locking through atomics.
- No longer holding connection lock while connecting.
- Non-blocking statistics methods.
- Bug fix: Notifying other threads on connection allocation.
CompressedDataOutputStreamandCompressedDataInputStreamnow support streaming ofEnums.- Updated dependencies.
WildcardPatternMatcherimprovements:- Coalesces adjacent '*' into a single '*' during parsing.
- Compiles patterns instead of interpreting them on the fly.
- Supports any arbitrary patterns containing '*'.
- Fast-path checks for none, all, prefix, suffix, and exact matches.
- Renamed methods to better represent the functionality. Left deprecated methods for compatibility.
- Added test suite to verify correctness and benchmark versus equivalent regular expressions.
- The typical performance is 8 to 10 times that of the regular expressions.
-
Some operations, in particular suffix matching on long strings, can be as high as 2000 times the
performance of regular expressions. This is not so uncommon, a typical use-case for
wildcard patterns is
"*.jpg".
- Like any typical "contains" or "indexOf" string operation, the infix matching can fall-flat when trying to find long strings of repeating patterns within an almost-as-long string of repeating patterns following by non-matching padding. When strictly using prefix or suffix matching this will never occur.
aocode-public-1.8.3
Release Notes
- New AO OSS Parent POM to simplify
pom.xmlfiles. - Project documentation moved to per-project book in SemanticCMS format.
- Added changelog as top-level project link.
- Added utility to find the maximum non-null value.
- Added support for XML DOM Node in toString type coercion.
aocode-public-1.8.2
Release Notes
- Release of 1.8.1 failed due to JDK bug in bootclasspath set for Javadoc: https://bugs.openjdk.org/browse/JDK-8041628
- JDK bug workaround.
aocode-public-1.8.1
Release Notes
- Main method to generate a random Identifier.
- Improved Javadoc formatting.
- Improved README formatting.
- Allowing varargs for locales.
aocode-public-1.8.0
Release Notes
- Moved servlet-specific methods to a different class to avoid introducing compile-time dependencies on servlet api to non-servlet projects.
aocode-public-1.7.0
Release Notes
Added
- Java 1.7 compatible long sorting for pre-Java 1.7 use.
- Now automatically maintains some ThreadLocal values between caller and executor during concurrent processing, and provides wrapper hook for subclasses to extend.
- Recurring now allows null during parsing and returns null.
- Convenience method to make unmodifiable from MinimalList and MinimalMap.
- Background-refreshed cache implementation.
- Caching access to ServletContext to improve performance.
Changed
- Improved Javadoc formatting.
- Additional compiler flags in preparation to do away with our old Ant build system.
- Using request object instead of ThreadLocals to support asynchronous and concurrent request processing.
- Working on thread safety for concurrent sub requests.
- Avoiding setting ThreadLocal when value has not changed.
- nullIfEmpty moved to StringUtility.
- Each lock object now a small empty class to help identify lock contention.
The lock contention profiler in NetBeans is just showing "java.lang.Object" all over, and can't seem to get from the lock object id to the actual object in the heap dump using OQL (id not found).
- Using minimal list to efficiently filter small numbers of matches.
- Number of buffers is now unlimited.
aocode-public-1.6.1
Release Notes
- Improved Maven configuration for Java EE 6 dependencies.
aocode-public-1.6
Release Notes
- Efficient way to check if writables empty.
aocode-public-1.5
Release Notes
- Wildcard to show immutability just cluttered the API, reverted.
aocode-public-1.4
Release Notes
- Allowing ao-taglib style "arg" maps to be passed through Dispatcher for non-taglib use.
- args passed unmodifiable.
- Passing args as Map<String, ?> instead of forcing Map<String, Object>
- Returning wildcard bound list as it better captures the essence of the unmodifiable list returned.
- Java 1.7 compatible boolean sorting for pre-Java 1.7 use.
aocode-public-1.3
Release Notes
- Reverted to Java 1.6 for Android and Java EE 6 compatibility.
aocode-public-1.2
Release Notes
- Testing if nexus-staging:release required when using autoReleaseAfterClose=true
- Now deployed to The Central Repository.
aocode-public-1.1
Release Notes
- Java EE 6 optional, since only used by a subset of the features.
- Preparing to deploy to The Central Repository.
aocode-public-1.0
Release Notes
- Project moved to GitHub and Maven.
- Ignoring locales with scripts or extensions since this API predates them.