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
Benchmark
that 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
NoClose
along with staticwrap(…)
methods to avoid duplicate wrapping. MarkupCoercion.write(…)
disallows potential bypass of buffered encoders.MarkupCoercion
always 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 "".MarkupCoercion
can unwrap anEncoderWriter
when encoder is null. This is done for consistency with the related implementation ofCoercion
in 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.
DontCloseOutputStream
now overrideswrite(byte[],int,int)
for greater performance.-
Deprecated
DontCloseInputStream
andDontCloseOutputStream
in favor or duplicateNoCloseInputStream
andNoCloseOutputStream
.
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-public
tocom.aoapps:ao-hodgepodge
. - Packages renamed from
com.aoindustries.*
tocom.aoapps.hodgepodge.*
. - Renamed
NativeToUnixWriter
toNativeToPosixWriter
. Images.getImageFromResources
now 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
MarkupCoercion
improvements:- Added optimization for
Segment
to not convert to String for bundle lookups. - Added support for
Optional
by unwrapping the value.
- Added optimization for
aocode-public-4.8.0
Release Notes
Coercion
moved out of AO Encoding:- Non-localized parts moved to AO Lang.
-
Localized parts moved to this project and
renamed to
MarkupCoercion
. - New pluggable
CoercionOptimizer
to allow this decoupling. - Servlet-specific optimizations moved to AO Servlet Util.
aocode-public-4.7.2
Release Notes
AOPool
now 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
UnixCrypt
to the new AO Security project.
aocode-public-4.7.0
Release Notes
-
Deprecated
Base64Coder
in favor ofBase64
available since Java 8. -
Removed dependency on the
com.aoindustries.security
package, which has been split from AO Lang to the new AO Security project:AOPool
now internally tracks thread ID as aLong
instead 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
Identifier
andSmallIdentifier
fromStreamableInput
andStreamableOutput
to static methods on a newSecurityStreamables
class.
aocode-public-4.6.0
Release Notes
-
Deprecated fixed padding in
PaddingOutputStream
in 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
ThreadLocal
for 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.sql
package to the new AO SQL project, with the exception ofLocalizedSQLException
that stays here with other localized exceptions. ConnectionWrapper
moved to newcom.aoindustries.sql.wrapper
package in the new AO SQL Wrapper project.AOConnectionPool
moved to newcom.aoindustries.sql.pool
package in the new AO SQL Pool project.BackgroundCache
now 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.UncheckedIOException
instead 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
ZeroFile
no longer writes blank lines when there are no blocks to read or write.
aocode-public-4.1.0
Release Notes
ModifiablePropertiesResourceBundle
now 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 additionalisXhtml
flag.- 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
.TopologicalSorter
now returns a modifiableSet
. Previously it returned an unmodifiableList
.- Updated dependencies.
- Removed the
com.aoindustries.security
package:com.aoindustries.security.NotAuthenticatedException
moved 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.persistent
package 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.Stack
com.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.stream
package:- Renamed
CompressedDataInputStream
to StreamableInput. - Renamed
CompressedDataOutputStream
to StreamableOutput. - Renamed
CompressedReadable
to StreamReadable. - Renamed
CompressedWritable
to StreamWritable. - Moved
Streamable
to 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
Streamable
andCompressedReadable
, 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
Identifier
andSmallIdentifier
. FileList
now 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%20
instead 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.
PersistentLinkedList
now implements Deque instead of Queue.
aocode-public-2.1.1
Release Notes
Using
;-split-package:=first
of 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.wrap
now returnsnull
when 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
mysql
command line. - MarkupType.PSQL for the PostgreSQL
psql
command 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
ByteCountInputStream
that subtracted the-1
returned at end of stream. - Moved the following classes to the new AO Lang project:
com.aoindustries.io.AoByteArrayInputStream
com.aoindustries.io.AoByteArrayOutputStream
com.aoindustries.io.AoCharArrayWriter
com.aoindustries.io.Encoder
com.aoindustries.io.EncoderWriter
com.aoindustries.io.FastExternalizable
com.aoindustries.io.FastObjectInput
com.aoindustries.io.FastObjectOutput
com.aoindustries.io.FileUtils
com.aoindustries.io.IoUtils
com.aoindustries.io.LocalizedIOException
com.aoindustries.io.NullOutputStream
com.aoindustries.io.NullPrintWriter
com.aoindustries.io.NullWriter
com.aoindustries.io.SniffInputStream
com.aoindustries.io.Writable
com.aoindustries.io.WriterFacade
com.aoindustries.io.WriterOutputStream
com.aoindustries.lang.Disposable
com.aoindustries.lang.DisposedException
com.aoindustries.lang.EnumUtils
com.aoindustries.lang.LocalizedIllegalArgumentException
com.aoindustries.lang.NotImplementedException
com.aoindustries.lang.NullArgumentException
com.aoindustries.lang.ObjectUtils
com.aoindustries.lang.ProcessResult
com.aoindustries.lang.RuntimeUtils
com.aoindustries.lang.SysExits
com.aoindustries.lang.reflect.Methods
com.aoindustries.lang.reflect.ReflectionException
com.aoindustries.math.BigFraction
com.aoindustries.math.LongLong
com.aoindustries.math.NullMath
com.aoindustries.math.SafeMath
com.aoindustries.math.Statistics
com.aoindustries.math.UnsignedLong
com.aoindustries.nio.charset.Charsets
com.aoindustries.security.HashedKey
com.aoindustries.security.HashedPassword
com.aoindustries.security.Identifier
com.aoindustries.security.SmallIdentifier
com.aoindustries.sql.LocalizedSQLException
com.aoindustries.sql.UnmodifiableTimestamp
com.aoindustries.sql.WrappedSQLException
com.aoindustries.text.MessageFormatFactory
com.aoindustries.text.SmartComparator
com.aoindustries.text.UnmodifiableMessageFormat
com.aoindustries.time.Clock
com.aoindustries.time.Duration
com.aoindustries.time.Instant
com.aoindustries.util.AoArrays
com.aoindustries.util.AoCollections
com.aoindustries.util.AtomicSequence
com.aoindustries.util.BufferManager
com.aoindustries.util.CalendarUtils
com.aoindustries.util.ComparatorUtils
com.aoindustries.util.EnumerationIterator
com.aoindustries.util.ErrorPrinter
com.aoindustries.util.GetOpt
com.aoindustries.util.HashCodeComparator
com.aoindustries.util.IdentityKey
com.aoindustries.util.InternUtils
com.aoindustries.util.Internable
com.aoindustries.util.MinimalList
com.aoindustries.util.MinimalMap
com.aoindustries.util.PropertiesUtils
com.aoindustries.util.Sequence
com.aoindustries.util.SortedProperties
com.aoindustries.util.UnmodifiableCalendar
com.aoindustries.util.UnmodifiableDate
com.aoindustries.util.UnsynchronizedSequence
com.aoindustries.util.WrappedException
com.aoindustries.util.WrappedExceptions
com.aoindustries.util.concurrent.ThreadLocalCallable
com.aoindustries.util.concurrent.ThreadLocalRunnable
com.aoindustries.util.concurrent.ThreadLocalsCallable
com.aoindustries.util.concurrent.ThreadLocalsRunnable
com.aoindustries.util.i18n.ApplicationResourcesAccessor
com.aoindustries.util.i18n.CurrencyComparator
com.aoindustries.util.i18n.LocaleComparator
com.aoindustries.util.i18n.LocaleString
com.aoindustries.util.i18n.Locales
com.aoindustries.util.i18n.Money
com.aoindustries.util.i18n.ThreadLocale
com.aoindustries.util.zip.CorrectedGZIPInputStream
com.aoindustries.util.zip.ZipEntryFilter
com.aoindustries.util.zip.ZipUtils
com.aoindustries.xml.XmlUtils
-
New interfaces
CompressedReadable
andCompressedWritable
for code that only needs to handle one direction ofStreamable
. AOPool
improvements:- 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.
CompressedDataOutputStream
andCompressedDataInputStream
now support streaming ofEnum
s.- Updated dependencies.
WildcardPatternMatcher
improvements:- 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.xml
files. - 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.