Class DiscriminatingNameMapper
- java.lang.Object
-
- org.eclipse.aether.internal.impl.synccontext.named.DiscriminatingNameMapper
-
- All Implemented Interfaces:
NameMapper
public class DiscriminatingNameMapper extends java.lang.Object implements NameMapper
WrappingNameMapper
, that wraps anotherNameMapper
and adds a "discriminator" as prefix, that makes lock names unique including the hostname and local repository (by default). The discriminator may be passed in viaRepositorySystemSession
or is automatically calculated based on the local hostname and repository path. The implementation retains order of collection elements as it got it fromNameMapper.nameLocks(RepositorySystemSession, Collection, Collection)
method.The default setup wraps
GAVNameMapper
, but manually may be created any instance needed.
-
-
Constructor Summary
Constructors Constructor Description DiscriminatingNameMapper(NameMapper delegate)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
isFileSystemFriendly()
Returnstrue
if lock names returned by this lock name mapper are file system friendly, can be used as file names and paths.java.util.Collection<java.lang.String>
nameLocks(org.eclipse.aether.RepositorySystemSession session, java.util.Collection<? extends org.eclipse.aether.artifact.Artifact> artifacts, java.util.Collection<? extends org.eclipse.aether.metadata.Metadata> metadatas)
Creates (opaque) names for passed in artifacts and metadata.
-
-
-
Constructor Detail
-
DiscriminatingNameMapper
public DiscriminatingNameMapper(NameMapper delegate)
-
-
Method Detail
-
isFileSystemFriendly
public boolean 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 java.util.Collection<java.lang.String> nameLocks(org.eclipse.aether.RepositorySystemSession session, java.util.Collection<? extends org.eclipse.aether.artifact.Artifact> artifacts, java.util.Collection<? extends org.eclipse.aether.metadata.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
-
-