Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/

import java.util.Map;
import java.util.function.Consumer;

import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.collection.DependencyGraphTransformer;
Expand Down Expand Up @@ -218,4 +219,27 @@ public FileTransformerManager getFileTransformerManager()
return getSession().getFileTransformerManager();
}

@Override
public final void addOnCloseHandler( Consumer<RepositorySystemSession> handler )
{
getSession().addOnCloseHandler( handler );
}

@Override
public final boolean isClosed()
{
return getSession().isClosed();
}

/**
* This method is special: by default it throws (nested session should never be closed), the "top level" session
* should be closed instead. Still, this method is NOT {@code final}, to allow implementations overriding it,
* and in case when needed, handle forwarded session as "top level" session.
*/
@Override
public void close()
{
throw new IllegalStateException( "Forwarding session should not be closed, "
+ "close the top-level (forwarded) session instead." );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,16 @@
* under the License.
*/

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static java.util.Objects.requireNonNull;

import java.util.Collection;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;

import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.ArtifactType;
Expand Down Expand Up @@ -62,6 +66,8 @@ public final class DefaultRepositorySystemSession
implements RepositorySystemSession
{

private final AtomicBoolean closed;

private boolean readOnly;

private boolean offline;
Expand Down Expand Up @@ -127,6 +133,7 @@ public final class DefaultRepositorySystemSession
*/
public DefaultRepositorySystemSession()
{
closed = new AtomicBoolean( false );
systemProperties = new HashMap<>();
systemPropertiesView = Collections.unmodifiableMap( systemProperties );
userProperties = new HashMap<>();
Expand All @@ -153,6 +160,7 @@ public DefaultRepositorySystemSession( RepositorySystemSession session )
{
requireNonNull( session, "repository system session cannot be null" );

closed = new AtomicBoolean( false );
setOffline( session.isOffline() );
setIgnoreArtifactDescriptorRepositories( session.isIgnoreArtifactDescriptorRepositories() );
setResolutionErrorPolicy( session.getResolutionErrorPolicy() );
Expand Down Expand Up @@ -194,7 +202,7 @@ public boolean isOffline()
*/
public DefaultRepositorySystemSession setOffline( boolean offline )
{
failIfReadOnly();
verifyStateForMutation();
this.offline = offline;
return this;
}
Expand All @@ -215,7 +223,7 @@ public boolean isIgnoreArtifactDescriptorRepositories()
public DefaultRepositorySystemSession setIgnoreArtifactDescriptorRepositories(
boolean ignoreArtifactDescriptorRepositories )
{
failIfReadOnly();
verifyStateForMutation();
this.ignoreArtifactDescriptorRepositories = ignoreArtifactDescriptorRepositories;
return this;
}
Expand All @@ -234,7 +242,7 @@ public ResolutionErrorPolicy getResolutionErrorPolicy()
*/
public DefaultRepositorySystemSession setResolutionErrorPolicy( ResolutionErrorPolicy resolutionErrorPolicy )
{
failIfReadOnly();
verifyStateForMutation();
this.resolutionErrorPolicy = resolutionErrorPolicy;
return this;
}
Expand All @@ -254,7 +262,7 @@ public ArtifactDescriptorPolicy getArtifactDescriptorPolicy()
public DefaultRepositorySystemSession setArtifactDescriptorPolicy(
ArtifactDescriptorPolicy artifactDescriptorPolicy )
{
failIfReadOnly();
verifyStateForMutation();
this.artifactDescriptorPolicy = artifactDescriptorPolicy;
return this;
}
Expand All @@ -276,7 +284,7 @@ public String getChecksumPolicy()
*/
public DefaultRepositorySystemSession setChecksumPolicy( String checksumPolicy )
{
failIfReadOnly();
verifyStateForMutation();
this.checksumPolicy = checksumPolicy;
return this;
}
Expand All @@ -298,7 +306,7 @@ public String getUpdatePolicy()
*/
public DefaultRepositorySystemSession setUpdatePolicy( String updatePolicy )
{
failIfReadOnly();
verifyStateForMutation();
this.updatePolicy = updatePolicy;
return this;
}
Expand All @@ -323,7 +331,7 @@ public LocalRepositoryManager getLocalRepositoryManager()
*/
public DefaultRepositorySystemSession setLocalRepositoryManager( LocalRepositoryManager localRepositoryManager )
{
failIfReadOnly();
verifyStateForMutation();
this.localRepositoryManager = localRepositoryManager;
return this;
}
Expand All @@ -336,7 +344,7 @@ public FileTransformerManager getFileTransformerManager()

public DefaultRepositorySystemSession setFileTransformerManager( FileTransformerManager fileTransformerManager )
{
failIfReadOnly();
verifyStateForMutation();
this.fileTransformerManager = fileTransformerManager;
if ( this.fileTransformerManager == null )
{
Expand All @@ -359,7 +367,7 @@ public WorkspaceReader getWorkspaceReader()
*/
public DefaultRepositorySystemSession setWorkspaceReader( WorkspaceReader workspaceReader )
{
failIfReadOnly();
verifyStateForMutation();
this.workspaceReader = workspaceReader;
return this;
}
Expand All @@ -377,7 +385,7 @@ public RepositoryListener getRepositoryListener()
*/
public DefaultRepositorySystemSession setRepositoryListener( RepositoryListener repositoryListener )
{
failIfReadOnly();
verifyStateForMutation();
this.repositoryListener = repositoryListener;
return this;
}
Expand All @@ -395,7 +403,7 @@ public TransferListener getTransferListener()
*/
public DefaultRepositorySystemSession setTransferListener( TransferListener transferListener )
{
failIfReadOnly();
verifyStateForMutation();
this.transferListener = transferListener;
return this;
}
Expand Down Expand Up @@ -444,7 +452,7 @@ public Map<String, String> getSystemProperties()
*/
public DefaultRepositorySystemSession setSystemProperties( Map<?, ?> systemProperties )
{
failIfReadOnly();
verifyStateForMutation();
this.systemProperties = copySafe( systemProperties, String.class );
systemPropertiesView = Collections.unmodifiableMap( this.systemProperties );
return this;
Expand All @@ -459,7 +467,7 @@ public DefaultRepositorySystemSession setSystemProperties( Map<?, ?> systemPrope
*/
public DefaultRepositorySystemSession setSystemProperty( String key, String value )
{
failIfReadOnly();
verifyStateForMutation();
if ( value != null )
{
systemProperties.put( key, value );
Expand Down Expand Up @@ -489,7 +497,7 @@ public Map<String, String> getUserProperties()
*/
public DefaultRepositorySystemSession setUserProperties( Map<?, ?> userProperties )
{
failIfReadOnly();
verifyStateForMutation();
this.userProperties = copySafe( userProperties, String.class );
userPropertiesView = Collections.unmodifiableMap( this.userProperties );
return this;
Expand All @@ -504,7 +512,7 @@ public DefaultRepositorySystemSession setUserProperties( Map<?, ?> userPropertie
*/
public DefaultRepositorySystemSession setUserProperty( String key, String value )
{
failIfReadOnly();
verifyStateForMutation();
if ( value != null )
{
userProperties.put( key, value );
Expand Down Expand Up @@ -533,7 +541,7 @@ public Map<String, Object> getConfigProperties()
*/
public DefaultRepositorySystemSession setConfigProperties( Map<?, ?> configProperties )
{
failIfReadOnly();
verifyStateForMutation();
this.configProperties = copySafe( configProperties, Object.class );
configPropertiesView = Collections.unmodifiableMap( this.configProperties );
return this;
Expand All @@ -548,7 +556,7 @@ public DefaultRepositorySystemSession setConfigProperties( Map<?, ?> configPrope
*/
public DefaultRepositorySystemSession setConfigProperty( String key, Object value )
{
failIfReadOnly();
verifyStateForMutation();
if ( value != null )
{
configProperties.put( key, value );
Expand All @@ -575,7 +583,7 @@ public MirrorSelector getMirrorSelector()
*/
public DefaultRepositorySystemSession setMirrorSelector( MirrorSelector mirrorSelector )
{
failIfReadOnly();
verifyStateForMutation();
this.mirrorSelector = mirrorSelector;
if ( this.mirrorSelector == null )
{
Expand All @@ -600,7 +608,7 @@ public ProxySelector getProxySelector()
*/
public DefaultRepositorySystemSession setProxySelector( ProxySelector proxySelector )
{
failIfReadOnly();
verifyStateForMutation();
this.proxySelector = proxySelector;
if ( this.proxySelector == null )
{
Expand All @@ -625,7 +633,7 @@ public AuthenticationSelector getAuthenticationSelector()
*/
public DefaultRepositorySystemSession setAuthenticationSelector( AuthenticationSelector authenticationSelector )
{
failIfReadOnly();
verifyStateForMutation();
this.authenticationSelector = authenticationSelector;
if ( this.authenticationSelector == null )
{
Expand All @@ -647,7 +655,7 @@ public ArtifactTypeRegistry getArtifactTypeRegistry()
*/
public DefaultRepositorySystemSession setArtifactTypeRegistry( ArtifactTypeRegistry artifactTypeRegistry )
{
failIfReadOnly();
verifyStateForMutation();
this.artifactTypeRegistry = artifactTypeRegistry;
if ( this.artifactTypeRegistry == null )
{
Expand All @@ -669,7 +677,7 @@ public DependencyTraverser getDependencyTraverser()
*/
public DefaultRepositorySystemSession setDependencyTraverser( DependencyTraverser dependencyTraverser )
{
failIfReadOnly();
verifyStateForMutation();
this.dependencyTraverser = dependencyTraverser;
return this;
}
Expand All @@ -687,7 +695,7 @@ public DependencyManager getDependencyManager()
*/
public DefaultRepositorySystemSession setDependencyManager( DependencyManager dependencyManager )
{
failIfReadOnly();
verifyStateForMutation();
this.dependencyManager = dependencyManager;
return this;
}
Expand All @@ -705,7 +713,7 @@ public DependencySelector getDependencySelector()
*/
public DefaultRepositorySystemSession setDependencySelector( DependencySelector dependencySelector )
{
failIfReadOnly();
verifyStateForMutation();
this.dependencySelector = dependencySelector;
return this;
}
Expand All @@ -724,7 +732,7 @@ public VersionFilter getVersionFilter()
*/
public DefaultRepositorySystemSession setVersionFilter( VersionFilter versionFilter )
{
failIfReadOnly();
verifyStateForMutation();
this.versionFilter = versionFilter;
return this;
}
Expand All @@ -744,7 +752,7 @@ public DependencyGraphTransformer getDependencyGraphTransformer()
public DefaultRepositorySystemSession setDependencyGraphTransformer(
DependencyGraphTransformer dependencyGraphTransformer )
{
failIfReadOnly();
verifyStateForMutation();
this.dependencyGraphTransformer = dependencyGraphTransformer;
return this;
}
Expand All @@ -762,7 +770,7 @@ public SessionData getData()
*/
public DefaultRepositorySystemSession setData( SessionData data )
{
failIfReadOnly();
verifyStateForMutation();
this.data = data;
if ( this.data == null )
{
Expand All @@ -784,7 +792,7 @@ public RepositoryCache getCache()
*/
public DefaultRepositorySystemSession setCache( RepositoryCache cache )
{
failIfReadOnly();
verifyStateForMutation();
this.cache = cache;
return this;
}
Expand All @@ -799,12 +807,19 @@ public void setReadOnly()
readOnly = true;
}

private void failIfReadOnly()
/**
* Verifies this instance state for mutation operations: mutated instance must not be read-only or closed.
*/
private void verifyStateForMutation()
{
if ( readOnly )
{
throw new IllegalStateException( "repository system session is read-only" );
}
if ( isClosed() )
{
throw new IllegalStateException( "repository system session is closed" );
}
}

static class NullProxySelector
Expand Down Expand Up @@ -873,4 +888,41 @@ public Collection<FileTransformer> getTransformersForArtifact( Artifact artifact
}
}

private final CopyOnWriteArrayList<Consumer<RepositorySystemSession>> onCloseHandlers
= new CopyOnWriteArrayList<>();

@Override
public void addOnCloseHandler( Consumer<RepositorySystemSession> handler )
{
verifyStateForMutation();
requireNonNull( handler, "handler cannot be null" );
onCloseHandlers.add( 0, handler );
Comment thread
michael-o marked this conversation as resolved.
}

@Override
public boolean isClosed()
{
return closed.get();
}

@Override
public void close()
{
if ( closed.compareAndSet( false, true ) )
{
ArrayList<Exception> exceptions = new ArrayList<>();
for ( Consumer<RepositorySystemSession> onCloseHandler : onCloseHandlers )
{
try
{
onCloseHandler.accept( this );
}
catch ( Exception e )
{
exceptions.add( e );
}
}
MultiRuntimeException.mayThrow( "session on-close handler failures", exceptions );
}
}
}
Loading