Class HashingNameMapper
java.lang.Object
org.eclipse.aether.internal.impl.synccontext.named.HashingNameMapper
- All Implemented Interfaces:
NameMapper
Wrapping
NameMapper
, that wraps another NameMapper
and hashes resulting strings. It makes use of
fact that (proper) Hash will create unique fixed length string for each different input string (so injection still
stands). This mapper produces file system friendly names. Supports different "depths" (0-4 inclusive) where the
name will contain 0 to 4 level deep directories.
This mapper is usable in any scenario, but intent was to produce more "compact" name mapper for file locking.
- Since:
- 1.9.0
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
The depth how many levels should adapter create.static final int
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
Returnstrue
if lock names returned by this lock name mapper are file system friendly, can be used as file names and paths.nameLocks
(RepositorySystemSession session, Collection<? extends Artifact> artifacts, Collection<? extends Metadata> metadatas) Creates (opaque) names for passed in artifacts and metadata.
-
Field Details
-
CONFIG_PROP_DEPTH
The depth how many levels should adapter create. Acceptable values are 0-4 (inclusive).- See Also:
- Sourced from:
RepositorySystemSession.getConfigProperties()
- Value type:
Integer
- Default value:
DEFAULT_DEPTH
-
DEFAULT_DEPTH
- See Also:
-
-
Constructor Details
-
HashingNameMapper
-
-
Method Details
-
isFileSystemFriendly
Description copied from interface:NameMapper
Returnstrue
if lock names returned by this lock name mapper are file system friendly, can be used as file names and paths.- Specified by:
isFileSystemFriendly
in interfaceNameMapper
-
nameLocks
public Collection<String> nameLocks(RepositorySystemSession session, Collection<? extends Artifact> artifacts, Collection<? extends Metadata> metadatas) Description copied from interface:NameMapper
Creates (opaque) names for passed in artifacts and metadata. Returned collection has max size of sum of the passed in artifacts and metadata collections, or less. If an empty collection is returned, there will be no locking happening. Never returnsnull
. The resulting collection MUST BE "stable" (always sorted by same criteria) to avoid deadlocks by acquiring locks in same order, essentially disregarding the order of the input collections.There is no requirement of any kind of "parity" between input element count (sum of two collections, that is) and output collection size, just the returned upper size limit is defined (sum of the passed in two collections size). If returned collection is empty, no locking will happen, if single element, one lock will be used, if two then two named locks will be used etc.
Note: name mapper must not use same string for artifacts and metadata, so even the simplest possible implementation like
StaticNameMapper
uses two different static strings.- Specified by:
nameLocks
in interfaceNameMapper
-