Changes Report

Release History

Version Date Description
1.06.28 2021-09-16 Additions to djutils-draw
1.06.27 2021-08-17 Fix and add in djutils-stats
1.06.26 2021-07-19 Surface3d class in djutils-draw, FixedBinsAccumulator in djutils-stats
1.06.26 2021-06-22 Better precondition checking in djutils-draw
1.06.25 2021-06-14 Added 2d convex hull implementation to djutils-draw
1.06.24 2021-04-08 Java generic hierarchy of draw classes modified
1.06.23 2021-03-21 Changed filtering instantiate method into a constructor
1.06.22 2021-03-14 wrote Complex class and PolynomialRoots class
1.06.21 2021-03-05 replaced all DrawExceptions by DrawRuntimeExceptions
1.06.20 2021-03-03 new methods in line package
1.06.19 2021-02-23 Javadoc of Ray, Bezier create controlPoints fix
1.06.18 2021-02-22 ToString methods, Ray3d epsilonEquals getPoints, Bounds from arrays and collections
1.06.17 2021-02-20 Bounds reverted to original behavior
1.06.16 2021-02-18 Project error in Polygon3d and error in Ray3d.flip
1.06.15 2021-02-16 Rounding error in PolyLine3d
1.06.14 2021-02-16 Rounding error in PolyLine3d
1.06.13 2021-02-15 Project now implemented in all line types
1.06.12 2021-02-11 Project now implemented in all line types
1.06.11 2021-02-08 Fixed rounding problem in PolyLine3d.getLocation
1.06.10 2021-02-05 Made phi and theta public in the Ray classes
1.06.09 2021-02-04 Centralized projection methods, more flexible toString methods
1.06.08 2021-01-28 Polygon2d and Polygon3d added
1.06.07 2021-01-23 Fixed rounding problem in AngleUtil; Ray; OrientedPoint
1.06.06 2021-01-02 Fixed ulp-error in time weighed statistics
1.06.05 2020-12-29 Added methods to Point and Bounds interfaces in djutils-draw
1.06.04 2020-12-28 Added midPoint methods to Bounds objects in djutils-draw
1.06.03 2020-12-24 Added circleIntersections and directionTo methods to djutils-draw
1.06.02 2020-12-22 Added intersectionOfLines method to djutils-draw
1.06.01 2020-12-21 Made .x, .y and .z of Point accessible in djutils-draw
1.06.00 2020-12-20 Additional way to interpolate angles; djutils-draw first version
1.05.04 2020-08-22 EventInterface and EventTypeInterface used in a consequent manner
1.05.03 2020-07-27 TraceVerifier added
1.05.02 2020-05-16 Changed CSVReader/Writer
1.05.01 2020-05-05 EventType and TimedEventType separated
1.04.21 2020-05-05 MetaData construction with varargs
1.04.20 2020-05-03 Added float and char payload for the fireEvent method
1.04.19 2020-04-19 Metadata and ObjectDescriptor updates
1.04.18 2020-04-18 Metadata expansions and fixes
1.04.17 2020-04-06 Metadata fixes
1.04.16 2020-04-06 Metadata fixes and expanded use
1.04.15 2020-04-03 Metadata and Java-8 compatibility
1.04.14 2020-03-08 timed events for timestamped statistics
1.04.13 2020-03-07 extra events in djutils-stats; statistics formulas
1.04.12 2020-03-03 several fixes in djutils-stats
1.04.11 2020-03-03 djutils-data project added; Immutable.of() methods
1.04.10 2020-02-29 djutils-stats project added; djutils-parent project for pom
1.04.09 2020-02-10 MultiKeyMap added; EventType equals() and hashCode()
1.04.08 2020-02-08 EventProducer access to listeners
1.04.07 2020-02-07 EventProducerImpl; RemoteEventProducer; Profile class
1.04.06 2020-02-04 CliUtil for subclasses
1.04.05 2020-01-24 Comparator immutableTreeset; new units for serialization
1.04.04 2020-01-19 EventProducer uses Serializable sourceId
1.04.03 2020-01-17 RMIUtils, RMIObject and RemoteEvent updates
1.04.02 2020-01-05 EventProducer cleanup; Logger updates
1.04.01 2019-12-31 EventProducer serializability
1.04.00 2019-12-30 DSOL Event package added to DJUTILS
1.03.02 2019-10-31 SpotBugs instead of FindBugs in Maven
1.03.01 2019-10-25 Updated DJUTILS to version 4
1.03.00 2019-10-19 @Generated annotations in code in djutils-cli
1.03.00 2019-10-19 Little Endian (de)serialization; use of djunits v4
1.02.03 2019-09-14 CliUtil.execute with CommandLine object; unit tests
1.02.02 2019-08-16 Resolving annotations
1.02.01 2019-08-13 CLI helper methods, ClassFileDescriptor
1.02.00 2019-08-11 djutils-ext project added; CLI code
1.01.03 2019-07-04 byte[][] serialization repaired
1.01.02 2019-07-02 ImmutableLinkedHashMap.values() repaired
1.01.01 2019-07-01 ImmutableLinkedHashMap repaired; serialization of UTF-8, UTF-16
1.01.00 2019-06-21 djutils-serialization project added
1.00.06 2019-05-10 EntrySets added; caching of keySet, values in Map
1.00.05 2019-02-26 ImmutableCollections class added
1.00.04 2019-01-29 Removed logger Cat class
1.00.03 2018-12-18 DecoderDumper package
1.00.02 2019-01-17 ConditionalLogger, HexDump
1.00.01 2018-12-15 Means package
1.00.00 2018-11-17 Initial release

Release 1.06.28 – 2021-09-16

Type Changes By
Add PolyLine2d and PolyLine3d now have additional constructors that allow construction of a one-point PolyLine that has a sense of direction at that point. pknoppers

Release 1.06.27 – 2021-08-17

Type Changes By
Fix DistNormalTable getCumulativeProbability ran into problems when sigma == 0 and x very close to mu. pknoppers
Add All accumulators now implement getCumulativeProbability, pknoppers

Release 1.06.26 – 2021-07-19

Type Changes By
Add Initial version of FixedBinsAccumulator (and unit test) in djutils-stats. pknoppers
Add Initial version of a 3D surface encoding class (and unit test). pknoppers

Release 1.06.26 – 2021-06-22

Type Changes By
Fix Various constructors now have explicit tests for null pointers (and the unit tests verify that these exceptions happen when expected). pknoppers

Release 1.06.25 – 2021-06-14

Type Changes By
Add The new class contains only static methods that return a Polygon2d object on success. If the result would be a single point; the implementations throw a DrawRuntimeException because a single point does not make a valid Polygon2d. pknoppers
The Complex class now implements its own hypot function which uses Math.fma. On CPUs not implementing that in hardware this will be horribly slow. pknoppers

Release 1.06.24 – 2021-04-08

Type Changes By
Update Major change in the djutils-draw generics hierarchy. There is no longer a Space interface and not longer a Space2d, or Space3d class. What was in there has been moved to the Drawable interfaces. pknoppers
Fix Fixed a small issues in the Try.testFail() method, where it would not catch an exception that is thrown when no allowed exception was specified. averbraeck

Release 1.06.23 – 2021-03-21

Type Changes By
Update The PolyLine2d and PolyLine3d classes had static methods to construct a new instance while filtering out successive identical points. These have been replaced by constructors that take a boolean parameter that controls whether such filtering will take place. The Polygon2 and Polygon3d classes have new, similar constructors. pknoppers
Add Several other polynomial root solvers have been added to the PolynomialRoots2 class. Examples are the methods of Cardano, Aberth-Ehrlich, and Durand-Kerner. The latter two methods are applicable for any n-th order polynomial, and also work with complex factors. averbraeck
Add Preliminary code to work with floating point variables of higher precision than the double has been added to the djutils class. This code for the Float128 and DoubleDouble class is untested and in a very early development stage. Don't use yet! averbraeck

Release 1.06.22 – 2021-03-14

Type Changes By
Update Converted the PolynomialRoots code of ACM 954 from Fortran to java. Wrote unit test that test about 86% of the code. Wrote Complex class to store the results of the solvers in PolynomialRoots. With unit tests that cover 100%. pknoppers

Release 1.06.21 – 2021-03-05

Type Changes By
Update Replaced all DrawExceptions by DrawRuntimeExceptions. pknoppers
Remove The DrawException class has been removed pknoppers

Release 1.06.20 – 2021-03-03

Type Changes By
Update Many cases where a DrawException was thrown now throw a DrawRuntimException. pknoppers
Add New method to gradually transition from one PolyLine to another PolyLine: transitionLine. pknoppers
Add Moved OTS offsetLine methods into PolyLine classes. pknoppers
Update Lambda approach replaces makeX, makeY, etc. in constructors of PolyLine and Polygon objects. pknoppers

Release 1.06.19 – 2021-02-23

Type Changes By
Fix Javadoc of Ray used wrong wording. pknoppers
Fix Bezier.createControlPoints wrongly used closestPointOnRay, now uses projectOrthogonalextended. pknoppers
Remove Removed unneeded methods from Point2d and Point3d classes. pknoppers

Release 1.06.18 – 2021-02-22

Type Changes By
Add Bounds are a bit more versatile and more of the functionality is specified in the interface. pknoppers
Fix All toString methods now format floating point values using Locale.US to ensure use of a consistent radix symbol. pknoppers
Fix The Ray3d.epsilonEquals method failed to allow a family of alternative ways to express effectively the same Ray3d. pknoppers
Add Bounds objects can now also be constructed using a varargs constructor or a Collection. pknoppers
Fix The toString method of a Ray3d only printed x, and y (not z). pknoppers
Fix The getPoints of Ray2d and Ray3d returned only one point and did not override size(). pknoppers

Release 1.06.17 – 2021-02-20

Type Changes By
Fix Bounds report absolute extent again with the getMin[XYZ] and getMax[XYZ] methods. getDelta[XYZ]() report the relative extent. averbraeck

Release 1.06.16 – 2021-02-18

Type Changes By
Update Bounds now report relative extend with the getMin[XYZ] and getMax[XYZ] methods. pknoppers
Fix Polygon3d must override project, or the result is a PolyLine2d. pknoppers
Fix Ray3d.flip sets the theta to the complement of the original theta; not increment it by pi. pknoppers

Release 1.06.15 – 2021-02-16

Type Changes By
Fix This is the 2nd attempt at fixing the rounding error in PolyLine3d. pknoppers
Fix Fixed typo in error message. pknoppers

Release 1.06.14 – 2021-02-16

Type Changes By
Fix Fixed a problem (that was already fixed in PolyLine2d) in getLocation where the position was an ULP before the length of the line, or the position of an intermediate point. pknoppers
Fix Fixed typo in error message. pknoppers

Release 1.06.13 – 2021-02-15

Type Changes By
Fix Made the projectOrthogonal methods more consistent. There were many cases where the behavior was not logical. The LineSegment classes not implement toExcel; the lineSegment2d class implements toPlot. pknoppers

Release 1.06.12 – 2021-02-11

Type Changes By
Add LineSegment, PolyLine and Ray types now implement the project interface. pknoppers
Fix More centralized implementation of code that finds closest point on a line(segment). Replaced lots of getX() calls by this.x; etc. to make debugging easier. Fixes in javadoc where class names were not correct after earlier rename operations. PolyLine3d.createAndCleanLine3d is now named PolyLine3d.createAndCleanPolyLine3d. Fixed error in computation of theta in Ray3d (and corresponding errors in the unit tests). pknoppers

Release 1.06.11 – 2021-02-08

Type Changes By
Fix The getLocation method could fail to construct a ray when the position is exactly at one of the points of the line. pknoppers

Release 1.06.10 – 2021-02-05

Type Changes By
Update The internal values of theta (Ray3d) and phi (Ray2d and Ray3d) are now public. (Like the rotations in the OrientedPoint classes). pknoppers
Add The Ray classes now implements a flip method that inverts the direction, but does not change the location. pknoppers

Release 1.06.09 – 2021-02-04

Type Changes By
Add Fixed lots of code duplication that determined the closest point on a line, line segment, or ray. The toString methods now have a systematic way to provide a format argument and to suppress printing the class name (for extra compact output). pknoppers

Release 1.06.08 – 2021-01-28

Type Changes By
Add Closed Polylines aka Polygons in 2d and 3d have been added to djutils-draw. pknoppers

Release 1.06.07 – 2021-01-23

Type Changes By
Fix AngleUtil.normalizeAroundZero mapped Math.PI to -Math.PI. The fix ensures that Math.PI is mapped to Math.PI (and -Math.PI is now mapped to Math.PI). This implementation makes slightly more sense considering that Math.cos(Math.PI) > 0. pknoppers
Update In djutils-draw, DirectedPoint has been replaced by OrientedPoint since a direction (vector) does not include rotating around the x (or longitudinal) axis. The Oriented interface replaces the Directed interface. pknoppers
Add In djutils-draw, in order to indicate different lines, the LineSegment (bound by 2 points), Ray (bound by one point), and Line (stretching infinitely in both directions) have been introduced. pknoppers

Release 1.06.06 – 2021-01-02

Type Changes By
Fix Some of the time weighed statistics in djutils-stats indicated wrongly that the next observation was before the previous observation. The problem was in the following statement in TimestampWeightedTally:
Throw.when(timestampDouble < (this.elapsedTime + this.startTime), IllegalArgumentException.class,
"times not offered in ascending order. Last time was " + (this.elapsedTime + this.startTime)
+ ", new timestamp was " + timestampDouble);
The problem is that the addition can be one ulp off as compared to the timestamp that might have been calculated in another way. It has been repaired by using: timestampDouble < this.lastTimestamp.
Update Made checkstyle more strict on javadoc to comply with JDK8+ compiler settings. averbraeck

Release 1.06.05 – 2020-12-29

Type Changes By
Add Added getX(), getY(), and several other methods to the Point interface. Added getMinX(), getMinY(), getMaxX(), getMaxY(), and several other methods to the Bounds interface. Added getRotZ() method to the Directed interface. These changes make it easier to use the Point and Bounds interfaces in other projects such as DSOL. averbraeck
Add Added getter with safe copy of the affine transformation matrix in Transform2d and Transform3d in djutils-draw. averbraeck

Release 1.06.04 – 2020-12-28

Type Changes By
Add Added midPoint method to Bounds2d and Bounds3d classes. pknoppers
Add Added Bounds interface for Bounds2d and Bounds3d classes, to be able to check if an objects is a Bounds. averbraeck

Release 1.06.03 – 2020-12-24

Type Changes By
Add Added circleIntersections to Point2d class. pknoppers
Add Added directionTo method to Point2d class. pknoppers

Release 1.06.02 – 2020-12-22

Type Changes By
Add Added intersectionOfLines to Point2d class. pknoppers

Release 1.06.01 – 2020-12-21

Type Changes By
Update Made the fields x, y (and z) accessible in Point2d and Point3d to make code that use the Point look cleaner. The methods getX(), getY() (and getZ()) also stay available. averbraeck
Fix Turned on checkstyle for the djutils-draw project. averbraeck

Release 1.06.00 – 2020-12-20

Type Changes By
Add Interpolating (and extrapolating) angles could only be one with clockwise interpolation. A new method interpolateShortest is now available that takes the shortest way around. pknoppers
Add Filled most of the classes for Point, PolyLine and Bounds in 2d and 3d in djutils-draw. pknoppers
Add Added neutral project for drawing: djutils-draw. averbraeck
Add Added a class AngleUtil to normalize angles around zero or around pi in the package org.djutils.base. averbraeck

Release 1.05.04 – 2020-08-22

Type Changes By
Update The EventInterface and Event were used in a mixed way in the event package. Same for EventType and EventTypeInterface. For TimedEvent and TimedEventType, no interfaces were present, leading to a further asymmetry. All event methods now act on the interface, and return interfaces instead of implementations of the Events and EventTypes. averbraeck
Fix The TraceVerifier class threw a java.util.FormatFlagsConversionMismatchException for the error string instead of a regular RunTimeException showing the mismatch. This has been repaired. averbraeck
Add The TraceVerifier class now throws a TraceVerifierException instead of a generic RunTimeException. averbraeck
Update Javadoc comments updated to contain correct types of parameters. averbraeck

Release 1.05.03 – 2020-07-27

Type Changes By
Add The TraceVerifier creates or verifies a file containing a series of traced events. When the file does not exist, it is created and each traced event is written to the file. If the file does exist, it is read and each traced event is compared to the corresponding event in the file. On a mismatch a RuntimeException is thrown. To use, create a TraceVerifier object in the class that is to be traced. In a method where you expect a fixed sequence of events, but suspect that this may not be true ()due to, e.g., a race condition), add a call to the sample method of the TraceVerifier. Then run the program repeatedly. The first run will create the trace file, all subsequent runs will compare what happens to the contents of the trace file. pknoppers

Release 1.05.02 – 2020-05-16

Type Changes By
Update The OpenCSV package had over 5 MB of imports, such as commons-lang3, commons-text, commons-beanutils, commons-collections, commons-collections4, and commons-logging. Instead, the very small and faster fastcsv package has been used, which has no further dependencies and is only 16 kB. averbraeck

Release 1.05.01 – 2020-05-05

Type Changes By
Add The EventType and TimedEventType are now two SEPARATE classes, both extending from AbstractEventType and implementing the EventTypeInterface. This allows for the fireTimedEvent(...) methods to ONLY accept TimedEvents of type TimedEventType. A TimedEvent is not a subclass anymore of Event. This breaks compatibility, but ensures a much stricter compliance to the fact that TimedEvents and ordinary Events are different and have a different signature. averbraeck
Add The AbstractEventType constructor accepts an optional argument specifying the valid Event type for the event to be fired. As an example: when a TimedEvent is expected, the fire(Event) method of an EventProducer should fail when the argument is not a TimedEvent or a subclass of TimedEvent. averbraeck

Release 1.04.21 – 2020-05-05

Type Changes By
Update The MetaData constructor has changed to a varargs parameter for the object descriptors, making it easier to construct metaData objects with zero or one descriptor. The construction with new ObjectDescriptor[] {...} of course remains possible. averbraeck
Fix The MetaData constructor now fires a NullPointerException if one of the ObjectDescriptors is null. averbraeck

Release 1.04.20 – 2020-05-03

Type Changes By
Add The float and char primitive types were missing as allowed payloads for the fireEvent and fireTimedEvent methods. Methods have been added to the classes EventProducer, EventProducerImpl and RemoteEventProducer. averbraeck
Add It is now possible to turn off verification of the fields of each individual event, which can be useful for high-frequency events. The method to verify uses the isAssignableFrom(...) method that could be quite expensive. The fireEvent methods in EventProducerImpl have an extra boolean for verification (true by default). averbraeck
Add The EventProducer, EventProducerImpl and RemoteEventProducer got extra methods to be able to fire unverified events as well. averbraeck

Release 1.04.19 – 2020-04-19

Type Changes By
Add An extra EventType constructor has been added to not have to duplicate the event type name in the metaData object. averbraeck
Add MetaData and ObjectDescriptor have equals() and hashCode() methods. averbraeck
Add MetaData has a getObjectDescriptors() method that returns a clone of the object descriptors. averbraeck
Update The NO_META_DATA static constant has been moved to the MetaData class. averbraeck

Release 1.04.18 – 2020-04-18

Type Changes By
Fix MetaData and ObjectDescriptor are now serializable. EventType constructor with no metaData argument is now deprecated. The constructor with a metadata argument no longer takes a null pointer for that argument. There is a NO_META_DATA value that can be used in case no meta data can be provided. This should only be used in case the payload has a varying composition, but it can also be abused in case the program writer is too lazy to provide decent meta data (as is the case in many of our unit tests). EventProducing collections now put the (unchanged) size of the collection in the OBJECT_CHANGED_EVENT events. pknoppers

Release 1.04.17 – 2020-04-06

Type Changes By
Fix MetaData now permits null pointers for the arguments that it verifies. Renamed some methods (Field is now Object). pknoppers

Release 1.04.16 – 2020-04-06

Type Changes By
Fix MetaData was not 100% correct in the previous version. Some methods were not public (and should have been). Metadata can now also handle single object payload (not requiring an Object[]). The stats package now uses MetaData verification of the payload of the events. pknoppers

Release 1.04.15 – 2020-04-03

Type Changes By
Add Added package metadata. Events can now verify their payload using the metadata. Specification of metadata is done in the constructor of EventType. For now a null pointer is permitted for the MetaData argument, but that is only during the transition phase. pknoppers
Fix Unit tests of djutils are made compatible again with Java-8. Several functions of Java-9 and Java-11 were used. averbraeck

Release 1.04.14 – 2020-03-08

Type Changes By
Add The timestamped statistics now fire TimedEvents rather than normal events. averbraeck
Add In case an class extending one of the EventBased statistics wants to fire its own events, or fire the events in a different way, it can override the protected method 'fireEvents()'. averbraeck

Release 1.04.13 – 2020-03-07

Type Changes By
Update Changed the package structure of the events a bit by moving the generic classes to the 'stats' package, and the event-based classes to a separate 'summarizers.event' package. averbraeck
Add Created a generic StatisticsEvents class for the 'OBSERVATION_ADDED_EVENT' and 'STATISTIC_INITIALIZED_EVENT'. Added more specific events for 'WEIGTHED_OBSERVATION_ADDED_EVENT' and 'TIMESTAMPED_OBSERVATION_ADDED_EVENT'. averbraeck
Add Ensured that specific events about every statistics value can be fired by the EventBased statistics. This can be used to, e.g., create a graph of the observed (weighted) sample mean over time, or to update a specific statistics value on the screen. averbraeck
Fix Made a number of small changes to the calculation of the kurtosis and skewness. Separated excess kurtosis from regular kurtosis and added formulas for both. averbraeck
Update Added the term 'Population' to the calculation of the (biased) statistics that work on the basis of the full population of values. averbraeck

Release 1.04.12 – 2020-03-03

Type Changes By
Fix Renamed getWeightedSampleStdDev to getWeightedSampleStDev in EventBasedTimeStampWeightedTally and EventBasedTimestampWeightedTally. Added getSampleMean to TimestampTallyInterface. Added getWeightedMean to TimeStampTallyInterface. Added getWeightedStDev and getWeightedVariance to EventBasedTimestampWeightedTally and TimeStampWeightedTally. Fixed error in getWeightedSampleMean in WeightedTally. Augmented unit test to re-achieve 100% coverage. pknoppers
Update Removed some 'final' qualifiers for methods so they can be extended, e.g. in the dsol project. Made the various TallyInterfaces public so they can be used outside of the djutils-stats project. averbraeck

Release 1.04.11 – 2020-03-03

Type Changes By
Add The djutils-data project contains classes for sampling, storing and retrieving statistics data. For now, the main data type is a data table with column heading information and records. wjschakel
Add Separate packages to read/write the tables from the djutils-data project have been added for: JSON, XML, and csv/tsv. Specific (de)serializers have been added for primitive types, Number types, String, DoubleScalar types and FloatScalar types. averbraeck
Add static 'of' methods have been added to the Immutable collections, to have an easy instantiation method for the collections. Example: ImmutableMap map = ImmutableMap.of(1, "value1", 2, "value2"); These static methods have been added to: ImmutableList, ImmutableSet, ImmutableSortedSet, ImmutableMap, and ImmutableSortedMap. The maps can take up to 8 key-value parameters, whereas the sets and lists can take an unlimited number. averbraeck
Add The Tally now has methods to request the skewness and kurtosis of the provided data. pknoppers

Release 1.04.10 – 2020-02-29

Type Changes By
Add The djutils-stats project contains data summarizers such as the Counter, the Tally, and the WeighedTally. The original classes Counter, Tally and Persistent from dsol-core have been generalized and improved. pknoppers
Add A class called DistNormalTable has been added to calculate the cumulative values of the cumulative normal distribution. This replaces an older and less precise table from dsol-core. A project called djutils-generator has been added that contains a class to generate this table. pknoppers
Add For the new classes in djutils-stats, EventBased versions have been created that can receive the data via a notify() method. averbraeck
Add Because of the increasing number of sub-projects in djutils, a parent pom project has been added called djutils-pom. This project contains all version numbers, dependencies and definitions for the derived djutils projects. averbraeck

Release 1.04.09 – 2020-02-10

Type Changes By
Add Added the MultiKeyMap to djutils (comes from ots.core.gtu.NestedCache in a less generic form). MultiKeyMap implements a map with multiple keys. pknoppers
Add In order to prevent name clashes for the EventType, the full name of the class from which the EventType was defined (usually in the clinit method) is added to the equals() and hashCode() methods of the EventType. In that way, EventTypes that are the same will be unique, but EventTypes with just the same name but defined in different classes will be different. The reason why this is important is because remote events that use EventTypes can have multiple versions of the same public static final EventType: one the is defined in the client, and one that is defined via the network. These will have different addresses in memory but they share the same class and name info, so equals() will yield true. averbraeck

Release 1.04.08 – 2020-02-08

Type Changes By
Add Added a protected method to the EventProducer to return a safe copy of the list of (strong or weak) references to the registered listeners for a provided event type, rather than exposing the internal 'listener' object. averbraeck

Release 1.04.07 – 2020-02-07

Type Changes By
Update The EventProducer classes uses a helper class EventProducerImpl to do the real work, to avoid code duplication. averbraeck
Add The RemoteEventProducer class lacked implementation of the fireEvent and fireTimedEvent protected methods. These have been added and linked to the EventProducerImpl class to do the work. averbraeck
Add Added the Profile class to DJUTILS (moved it out of the ots-core project). Contains profiler code for methods or parts of methods. pknoppers
Add More extensive tests of the Try class and the URLResource class added. averbraeck

Release 1.04.06 – 2020-02-04

Type Changes By
Fix CliUtil in djutils-ext had problems with changing the default option values for subclasses, where the options were defined in a superclass. The key under which the overrides are stored in CliUtil have been changed to the actual class where the option was defined, both in storing and in retrieving the override. Tests in the TestCLI unit tests check the new behavior. averbraeck

Release 1.04.05 – 2020-01-24

Type Changes By
Add Added the three new DJUNITS units AngularAcceleration, AngularVelocity and Momentum to djutils-serialization. pknoppers
Fix The subSet, headSet and tailSet methods of ImmutableTreeSet would use the default comparator of the data type instead of inheriting the comparator of the underlying set. This bug was discovered while writing thorough unit tests. The documentation of (non-immutable) TreeSet is not clear about whether the subSet and friends should inherit the comparator, but the implementations in the java Collections framework do inherit the comparator. pknoppers

Release 1.04.04 – 2020-01-19

Type Changes By
Update In contrast with earlier implementations of the Event package, a sourceId is sent over the network rather than a pointer to the source itself. This has several advantages:
  1. The object extending the EventProducer does not have to be Serializable itself
  2. There is no risk that the entire EventProducer object gets serialized (including subclasses) and is sent over the network
  3. The receiver of an event does not get a pointer to the sending object
  4. The receiver of an event is still able to identify the sending object

Release 1.04.03 – 2020-01-17

Type Changes By
Add New version of generated code in New units in CliUnitConverters. pknoppers
Add The classes RMIUtils and RMIObject have been added to make it easier to work with remote objects. averbraeck
Update RemoteEventProducer and RemoteEventListener extend RMIObject to select the host and port of the RMI registry. Therewith the remote event handling has become a lot more flexible. averbraeck
Update EventProducer is not an abstract class anymore, as it does not contain any unimplemented methods and because it is used as an embedded class in the RemoteEventProducer. averbraeck
Update Demanded that the fields of the Event and TimedEvent are serializable, so they can be sent over the network or stored on disk by serialization. averbraeck

Release 1.04.02 – 2020-01-05

Type Changes By
Fix Removed various redundant synchronized blocks from (method was already synchronized). pknoppers
Update More complete nullPointer checks in; Javadoc cleanup in pknoppers
Update Removed the ConditionalLogger from the CategoryLogger and transfered the when(...) functions to both the static Logger and the DelegateLogger class. pknoppers
Fix DelegateLogger did not consider the LogLevel correctly in deciding whether a message needed to be logged. This has been repaired. Every logging method now first checks whether the indicated log level is included in the log levels that need to be shown. pknoppers
Update CategoryLogger now has methods for adding and removing Writers, and listing which writers are available. pknoppers
Update Expanded unit tests for CategoryLogger and EventProducer. pknoppers
Fix The explicit setting of log level and message formatter on individual writers in the CategoryLogger now works as intended. The setAllLogMessageFormat and setAllLogLevel methods in the CategoryWriter reset the values for each individual Writer, as well as the global standard for next writers to be registered. averbraeck
Fix ClassUtil had a method called changeAnnotationValue to change the value of an annotation field value. This method made changes to an internal data structure that is not intended to be altered. From Java-13 onwards a warning appears in the console for manipulating this data structure. Therefore the method has been removed. averbraeck
Fix The CliUtil class in djutils-ext used the changeAnnotationValue method from ClassUtil. Instead of changing the internal data structure of the annotations, an override map is now used to store the changes. This also ensures that the code structure is reentrant: no structural changes have been made to the appearance of the loaded code (which the changeAnnotationValue method did in a sense). averbraeck
Add Methods to read the (overridden or original) program version, program name and program description in @Command have been added to CliUtil. averbraeck

Release 1.04.01 – 2019-12-31

Type Changes By
Fix The EventProducer had a non-transient semaphore object, rendering it non-serializable. The lock has been replaced by a lock on the listeners object instead. The lock has been applied more consistently in the code to avoid ConcurrentModificationExceptions. averbraeck
Update All Dumper classes in DecoderDumper now use UTF-8 to dump the data, to ensure reproducibility of the code across platforms. averbraeck

Release 1.04.00 – 2019-12-30

Type Changes By
Add The event package for pub/sub, originally the dsol-event package, has been added to DJUTILS and will be removed from the next version of DSOL. averbraeck
Fix Many open issues in the DSOL event package has been fixed in the port to DJUTILS. Examples are adding equals and hashCode methods for the TimedEvent, better writeObject and readObject methods for the EventListenerMap, repair of the failure to sometimes remove an EventListener from the EventProducer, etc. averbraeck
Add Almost full unit test coverage has been added to the djunits event package. averbraeck
Update The event producing collections in the event.util package now only fire events when additions or removals actually took place, not just when the add / remove / put methods are called. averbraeck
Add The EventProducingCollection, EventProducingList, EventProducingMap and EventProducingSet in the event.util package also fire events when content in the collections has changed. In that case, a CHANGE_EVENT is fired. averbraeck
Add The events of the event producing collections in the event.util package now have events that carry a payload. The payload is the new number of entries in the collection for the ADD_EVENT and REMOVE_EVENT. The event's content is equal to null for the CHANGE_EVENT. averbraeck
Update Since the boolean for strong versus weak references in the EventProducer was always unclear (does true mean strong or weak?), it has been replaced by an enum. averbraeck
Update Several of the underlying data structures of the djutils package have been changed from a HashMap to a LinkedHashMap and from a HashSet to a LinkedHashSet to guarantee reproducibility of results. As an exception the ImmutableHashSet and ImmutableHashMap are still backed by unlinked variants, as they explicitly are not reproducible. averbraeck
Update DJUNITS updated to 4.01.03. averbraeck
Add Extensive unit test coverage has been added for the ClassUtil class. Several errors have been repaired, and the signature of a number of methods has changed slightly (getAllMethods returns a List rather than an array, for example). averbraeck

Release 1.03.02 – 2019-10-31

Type Changes By
Fix Ensured that "package-list" exists in apidocs for backward compatibility of javadoc linking. averbraeck
Fix Replaced FindBugs (which already had a problem supporting Java 8) with SpotBugs (supporting later Java versions as well). averbraeck
Update DJUNITS updated to 4.01.01. averbraeck
Update Included jakarta.annotation-api to be compatible with Java 11+. averbraeck
Fix tt-tag in javadoc replaced by code-tag to be compatible with HTML-5 and Java-11+. averbraeck
Fix javadoc source version 8 added to pom-file to be compatible with Java-11+. averbraeck

Release 1.03.01 – 2019-10-25

Type Changes By
Update DJUNITS updated to 4.01.00. averbraeck

Release 1.03.00 – 2019-10-19

Type Changes By
Update CliUnitConverters in djutils-ext have been regenerated. A @Generated tag has been added to each generated method. averbraeck

Release 1.03.00 – 2019-10-19

Type Changes By
Remove Little-Endian types have been removed as FieldTypes in djutils-serialization. Instead, messages that need to be decoded can indicate whether they want to (de)code as Little-Endian or Big-Endian. By default, following Java standards, djutils-serialization encodes in Big Endian (network byte order). averbraeck
Update DJUNITS has been updated to version 4.00.04, bringing major changes to the way vectors and matrices are stored and processed. averbraeck
Remove As a result of moving to DJUNITS-4, the Money units with their special encoding have been removed temporarily. This also holds for the MoneyPerUnit types. averbraeck
Add As a result of moving to DJUNITS-4, several new types have been added to the possible units to use: AbsorbedDose, AmountOfSubstance, CatalyticActivity, ElectricalCapacitance, ElectricalConductance, ElectricalInductance, EquivalentDose, Illuminance, LuminousFlux, LuminousIntensity, MagneticFluxDensity, MagneticFlux, and RadioActivity. averbraeck
Update The package structure for djutils-serialization has been updated. Complex (de)serializers have been coded in their own classes rather than in an inline class. averbraeck

Release 1.02.03 – 2019-09-14

Type Changes By
Add CliUtil in djutils-ext now has a method call with a CommandLine object. This enables e.g., the registration of custom parameter converters. An example and test is provided in in the test package. averbraeck
Add Added unit tests for djunits converters for the CLI package. Dimensionless can also parse just a number. averbraeck
Fix Unit tests with System.exit() were failing in Maven surefire. Surefire documents that System.exit() calls cannot be tested. Therefore a Security Manager has been implemented in the test class ExitHelper for these tests that catches the System.Exit and turns it into an ExitException. averbraeck
Fix Repaired the code for the ClassFileDescriptor for paths with spaces. averbraeck
Add Added a unit test to see if folders with spaces can be found for the ClassFileDescriptor. averbraeck
Fix Repaired a bug for folders with spaces for the ClassFileDescriptor. averbraeck
Add Added unit tests for ClassUtil. averbraeck
Fix Repaired a number of bugs and changed some code in ClassUtil. It does not make sense to resolve constructors of superclasses, as only constructors of a class to be instantiated can be called. Therefore all code that deals with constructors in superclasses has been removed. averbraeck
Update The methods in ClassUtil that deal with visibility from a callerClass now throw an IllegalAccessException when the method/field/constructor is not visible from the callerClass and a NoSuchMethodException or NoSuchFieldException when the method/constructor/field cannot be found. averbraeck

Release 1.02.02 – 2019-08-16

Type Changes By
Add ClassUtil has resolveAnnotation methods. averbraeck
Add CliUtil also resolved @Command and @Option annotations in a superclass. averbraeck

Release 1.02.01 – 2019-08-13

Type Changes By
Add ClassUtil got extra methods to retrieve information about a class file, e.g. the last changed date. averbraeck
Fix CliIUtil has been renamed to the correct CliUtil. averbraeck
Add Several helper methods have been added to CliUtil to change some of the @Options and @Command settings. averbraeck

Release 1.02.00 – 2019-08-11

Type Changes By
Add A project for more utility classes that require more dependencies called djutils-ext has been added. averbraeck
Add Classes for Command Line Interface parsing have been added. The classes are based on picocli. averbraeck
Add A utility class with converters for DJUTILS command line arguments has been added. With these converters, it is possible to e.g. specify --timeout=30s on the command line and convert the timeout to a DJUNITS Duration scalar. averbraeck

Release 1.01.03 – 2019-07-04

Type Changes By
Fix The byte[][] serialization destroyed the underlying data -- this has been repaired. averbraeck
Update The serializers have all been made strongly typed, avoiding casting. Or actually, the casting has been shifted to the encode method on a higher level. averbraeck

Release 1.01.02 – 2019-07-02

Type Changes By
Fix The ImmutableLinkedHashMap.values() was overriding a non-reproducible values() method from the ImmutableAbstractMap. The ImmutableLinkedHashMap now has its own values() method. averbraeck

Release 1.01.01 – 2019-07-01

Type Changes By
Fix The ImmutableLinkedHashMap returned a non-linked HashSet as EntrySet and as KeySet. This has been repaired. averbraeck
Fix The UTF-8 Strings in djutils-serialization have been improved. The UTF-8 String can now handle 1-byte, 2-byte, 3-byte and 4-byte characters. The length of the UTF-8 serialized bytes indicates the number of bytes. The length does not say anything about the number of characters. averbraeck
Fix The UTF-16 Strings in djutils-serialization have been improved. The UTF-16 String can now handle 2-byte and 4-byte characters. The length of the UTF-16 String indicates the number of 2-byte shorts in the array. The length does not say anything about the number of characters. averbraeck
Fix The byte array in djutils-serialization has been repaired. The underlying byte array was nulled during serialization. pknoppers
Add ObjectArraySerializer and ObjectMatrixSerializer added. pknoppers
Add SerialDataDumper added to provide insight into structure of the serialized data. pknoppers

Release 1.01.00 – 2019-06-21

Type Changes By
Add The djunits-serialization project has been added to serialize and deserialize different classes including djunits scalars, vectors and matrices in a strongly typed manner. pknoppers

Release 1.00.06 – 2019-05-10

Type Changes By
Add EntrySets have been added to the ImmutableMap classes. averbraeck
Update The keySet(), values() and entrySet() methods cache the results as these are often called. averbraeck

Release 1.00.05 – 2019-02-26

Type Changes By
Add The ImmutableCollections class has been added, which takes care of those functions of the Collections class that do not update the (immutable) collections that the methods receive as arguments. averbraeck

Release 1.00.04 – 2019-01-29

Type Changes By
Remove Cat class in the logger package belongs in dsol, not in djutils, so removed it. averbraeck

Release 1.00.03 – 2018-12-18

Type Changes By
Add The 'decoderdumper' package has been added to the djutils project, extending and replacing HexDump. pknoppers

Release 1.00.02 – 2019-01-17

Type Changes By
Add The CategoryLogger has been extended with a 'when(condition)' static method. A call like CategoryLogger.when(ok).always().info("Ok"); is now possible. averbraeck
Add The HexDump class has been added to djutils to create hexadecimal dumps of data. pknoppers
Update Copyright message changed to 2019. averbraeck

Release 1.00.01 – 2018-12-15

Type Changes By
Add The 'means' package has been added to the djutils project. pknoppers

Release 1.00.00 – 2018-11-17

Type Changes By
Add Several classes from other projects that are heavily shared between the projects, but not specific for one of the projects have been transferred to the djutils project. averbraeck