Class BasedirNameMapper
- java.lang.Object
-
- org.eclipse.aether.internal.impl.synccontext.named.BasedirNameMapper
-
- All Implemented Interfaces:
NameMapper
public class BasedirNameMapper extends java.lang.Object implements NameMapper
WrappingNameMapperclass that is file system friendly: it wraps anotherNameMapperand resolves the resulting "file system friendly" names against local repository basedir.- Since:
- 1.9.0
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringCONFIG_PROP_LOCKS_DIRThe location of the directory toi use for locks.static java.lang.StringDEFAULT_LOCKS_DIR
-
Constructor Summary
Constructors Constructor Description BasedirNameMapper(NameMapper delegate)BasedirNameMapper(NameMapper delegate, java.nio.file.Path path)Creates basedir name mapper with provided path as base.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanisFileSystemFriendly()Returnstrueif lock names returned by this lock name mapper are file system friendly, can be used as file names and paths.java.util.Collection<org.eclipse.aether.named.NamedLockKey>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.
-
-
-
Field Detail
-
CONFIG_PROP_LOCKS_DIR
public static final java.lang.String CONFIG_PROP_LOCKS_DIR
The location of the directory toi use for locks. If relative path, it is resolved from the local repository root.- See Also:
- Constant Field Values
-
DEFAULT_LOCKS_DIR
public static final java.lang.String DEFAULT_LOCKS_DIR
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
BasedirNameMapper
public BasedirNameMapper(NameMapper delegate)
-
BasedirNameMapper
public BasedirNameMapper(NameMapper delegate, java.nio.file.Path path)
Creates basedir name mapper with provided path as base.- Parameters:
delegate- The delegate to resolve against basedir, must not benull. The delegate must be "file system friendly", seeNameMapper.isFileSystemFriendly()method.path- The basedir, may benullin which case given session local repository root is used as basedir.- Since:
- 2.0.0
-
-
Method Detail
-
isFileSystemFriendly
public boolean isFileSystemFriendly()
Description copied from interface:NameMapperReturnstrueif lock names returned by this lock name mapper are file system friendly, can be used as file names and paths.Note: The fact that name mapper is "file system friendly" means ONLY that names it produces CAN be used as file names and paths. Still, it does not mean they will work with ANY file based locking, as for example
FileLockNamedLockFactoryexpects names as string encodedURIs. The only name mapper doing it isBasedirNameMapper.- Specified by:
isFileSystemFriendlyin interfaceNameMapper
-
nameLocks
public java.util.Collection<org.eclipse.aether.named.NamedLockKey> 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:NameMapperCreates (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
StaticNameMapperuses two different static strings.- Specified by:
nameLocksin interfaceNameMapper
-
-