--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2013 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.aether;
+
+import java.util.Map;
+
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencyManager;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.collection.DependencyTraverser;
+import org.eclipse.aether.collection.VersionFilter;
+import org.eclipse.aether.repository.AuthenticationSelector;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.MirrorSelector;
+import org.eclipse.aether.repository.ProxySelector;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
+import org.eclipse.aether.resolution.ResolutionErrorPolicy;
+import org.eclipse.aether.transfer.TransferListener;
+
+/**
+ * A special repository system session to enable decorating or proxying another session. To do so, clients have to
+ * create a subclass and implement {@link #getSession()}.
+ */
+public abstract class AbstractForwardingRepositorySystemSession
+ implements RepositorySystemSession
+{
+
+ /**
+ * Creates a new forwarding session.
+ */
+ protected AbstractForwardingRepositorySystemSession()
+ {
+ }
+
+ /**
+ * Gets the repository system session to which this instance forwards calls. It's worth noting that this class does
+ * not save/cache the returned reference but queries this method before each forwarding. Hence, the session
+ * forwarded to may change over time or depending on the context (e.g. calling thread).
+ *
+ * @return The repository system session to forward calls to, never {@code null}.
+ */
+ protected abstract RepositorySystemSession getSession();
+
+ public boolean isOffline()
+ {
+ return getSession().isOffline();
+ }
+
+ public boolean isIgnoreArtifactDescriptorRepositories()
+ {
+ return getSession().isIgnoreArtifactDescriptorRepositories();
+ }
+
+ public ResolutionErrorPolicy getResolutionErrorPolicy()
+ {
+ return getSession().getResolutionErrorPolicy();
+ }
+
+ public ArtifactDescriptorPolicy getArtifactDescriptorPolicy()
+ {
+ return getSession().getArtifactDescriptorPolicy();
+ }
+
+ public String getChecksumPolicy()
+ {
+ return getSession().getChecksumPolicy();
+ }
+
+ public String getUpdatePolicy()
+ {
+ return getSession().getUpdatePolicy();
+ }
+
+ public LocalRepository getLocalRepository()
+ {
+ return getSession().getLocalRepository();
+ }
+
+ public LocalRepositoryManager getLocalRepositoryManager()
+ {
+ return getSession().getLocalRepositoryManager();
+ }
+
+ public WorkspaceReader getWorkspaceReader()
+ {
+ return getSession().getWorkspaceReader();
+ }
+
+ public RepositoryListener getRepositoryListener()
+ {
+ return getSession().getRepositoryListener();
+ }
+
+ public TransferListener getTransferListener()
+ {
+ return getSession().getTransferListener();
+ }
+
+ public Map<String, String> getSystemProperties()
+ {
+ return getSession().getSystemProperties();
+ }
+
+ public Map<String, String> getUserProperties()
+ {
+ return getSession().getUserProperties();
+ }
+
+ public Map<String, Object> getConfigProperties()
+ {
+ return getSession().getConfigProperties();
+ }
+
+ public MirrorSelector getMirrorSelector()
+ {
+ return getSession().getMirrorSelector();
+ }
+
+ public ProxySelector getProxySelector()
+ {
+ return getSession().getProxySelector();
+ }
+
+ public AuthenticationSelector getAuthenticationSelector()
+ {
+ return getSession().getAuthenticationSelector();
+ }
+
+ public ArtifactTypeRegistry getArtifactTypeRegistry()
+ {
+ return getSession().getArtifactTypeRegistry();
+ }
+
+ public DependencyTraverser getDependencyTraverser()
+ {
+ return getSession().getDependencyTraverser();
+ }
+
+ public DependencyManager getDependencyManager()
+ {
+ return getSession().getDependencyManager();
+ }
+
+ public DependencySelector getDependencySelector()
+ {
+ return getSession().getDependencySelector();
+ }
+
+ public VersionFilter getVersionFilter()
+ {
+ return getSession().getVersionFilter();
+ }
+
+ public DependencyGraphTransformer getDependencyGraphTransformer()
+ {
+ return getSession().getDependencyGraphTransformer();
+ }
+
+ public SessionData getData()
+ {
+ return getSession().getData();
+ }
+
+ public RepositoryCache getCache()
+ {
+ return getSession().getCache();
+ }
+
+}