Hello all
The last commit added CheckedArrayList, CheckedHashSet and
CheckedHashMap, which extend the standard JDK classes with the addition
of synchronization, runtime type checks and write permission checks.
Usually, the synchronization and type checks are provided in the
standard JDK by the following methods:
* Collections.synchronizedSet(Set)
* Collections.checkedSet(Set, Class)
However the standard synchronizedSet(Set) method does not allow us to
specify a lock different than 'this'. In the metadata implementation, we
wanted to synchronize on the metadata object that own the collection
rather than the collection itself.
The check for write permission is a little bit different than the
standard Collections.unmodifiableSet(Set) method, in that it is
determined by a condition external to the collection itself: in our
case, it is determined by whether the metadata which own the collection
has been made "read only".
By extending directly the ArrayList, LinkedHashSet and LinkedHashMap
classes instead than creating wrappers around arbitrary List, Set and
Map, we avoid the indirection levels of Collections.synchronizedSet
wrapping Collections.checkedSet wrapping LinkedHashSet for instance.
Those 3 particular implementations are used very often, so I though that
they were worth special treatment. When we really need wrappers around
arbitrary implementations, the standard java.util.Collections methods
are perfect for that.
The base class of metadata objects has been updated for using those
checked collections. So things are slowly starting to fall in place.
Martin