You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2016/05/07 13:24:28 UTC
[03/36] maven-aether git commit: Renamed package o.e.a.demo.* to
o.e.a.examples.* to better comply with Eclipse naming conventions
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/ResolveTransitiveDependencies.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/ResolveTransitiveDependencies.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/ResolveTransitiveDependencies.java
new file mode 100644
index 0000000..a178221
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/ResolveTransitiveDependencies.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples;
+
+import java.util.List;
+
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.examples.util.Booter;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.util.artifact.DefaultArtifact;
+import org.eclipse.aether.util.artifact.JavaScopes;
+import org.eclipse.aether.util.filter.DependencyFilterUtils;
+
+
+/**
+ * Resolves the transitive (compile) dependencies of an artifact.
+ */
+public class ResolveTransitiveDependencies
+{
+
+ public static void main( String[] args )
+ throws Exception
+ {
+ System.out.println( "------------------------------------------------------------" );
+ System.out.println( ResolveTransitiveDependencies.class.getSimpleName() );
+
+ RepositorySystem system = Booter.newRepositorySystem();
+
+ RepositorySystemSession session = Booter.newRepositorySystemSession( system );
+
+ Artifact artifact = new DefaultArtifact( "org.sonatype.aether:aether-impl:1.13" );
+
+ RemoteRepository repo = Booter.newCentralRepository();
+
+ DependencyFilter classpathFlter = DependencyFilterUtils.classpathFilter( JavaScopes.COMPILE );
+
+ CollectRequest collectRequest = new CollectRequest();
+ collectRequest.setRoot( new Dependency( artifact, JavaScopes.COMPILE ) );
+ collectRequest.addRepository( repo );
+
+ DependencyRequest dependencyRequest = new DependencyRequest( collectRequest, classpathFlter );
+
+ List<ArtifactResult> artifactResults =
+ system.resolveDependencies( session, dependencyRequest ).getArtifactResults();
+
+ for ( ArtifactResult artifactResult : artifactResults )
+ {
+ System.out.println( artifactResult.getArtifact() + " resolved to " + artifactResult.getArtifact().getFile() );
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/Aether.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/Aether.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/Aether.java
new file mode 100644
index 0000000..9262699
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/Aether.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.aether;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.deployment.DeployRequest;
+import org.eclipse.aether.deployment.DeploymentException;
+import org.eclipse.aether.examples.util.Booter;
+import org.eclipse.aether.examples.util.ConsoleDependencyGraphDumper;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.installation.InstallRequest;
+import org.eclipse.aether.installation.InstallationException;
+import org.eclipse.aether.repository.Authentication;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.util.DefaultRepositorySystemSession;
+import org.eclipse.aether.util.artifact.DefaultArtifact;
+import org.eclipse.aether.util.graph.PreorderNodeListGenerator;
+
+
+public class Aether
+{
+ private String remoteRepository;
+
+ private RepositorySystem repositorySystem;
+
+ private LocalRepository localRepository;
+
+ public Aether( String remoteRepository, String localRepository )
+ {
+ this.remoteRepository = remoteRepository;
+ this.repositorySystem = Booter.newRepositorySystem();
+ this.localRepository = new LocalRepository( localRepository );
+ }
+
+ private RepositorySystemSession newSession()
+ {
+ DefaultRepositorySystemSession session = Booter.newRepositorySystemSession( repositorySystem );
+ session.setLocalRepositoryManager( repositorySystem.newLocalRepositoryManager( localRepository ) );
+ return session;
+ }
+
+ public AetherResult resolve( String groupId, String artifactId, String version )
+ throws DependencyResolutionException
+ {
+ RepositorySystemSession session = newSession();
+ Dependency dependency =
+ new Dependency( new DefaultArtifact( groupId, artifactId, "", "jar", version ), "runtime" );
+ RemoteRepository central = new RemoteRepository( "central", "default", remoteRepository );
+
+ CollectRequest collectRequest = new CollectRequest();
+ collectRequest.setRoot( dependency );
+ collectRequest.addRepository( central );
+
+ DependencyRequest dependencyRequest = new DependencyRequest();
+ dependencyRequest.setCollectRequest( collectRequest );
+
+ DependencyNode rootNode = repositorySystem.resolveDependencies( session, dependencyRequest ).getRoot();
+
+ StringBuilder dump = new StringBuilder();
+ displayTree( rootNode, dump );
+
+ PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
+ rootNode.accept( nlg );
+
+ return new AetherResult( rootNode, nlg.getFiles(), nlg.getClassPath() );
+ }
+
+ public void install( Artifact artifact, Artifact pom )
+ throws InstallationException
+ {
+ RepositorySystemSession session = newSession();
+
+ InstallRequest installRequest = new InstallRequest();
+ installRequest.addArtifact( artifact ).addArtifact( pom );
+
+ repositorySystem.install( session, installRequest );
+ }
+
+ public void deploy( Artifact artifact, Artifact pom, String remoteRepository )
+ throws DeploymentException
+ {
+ RepositorySystemSession session = newSession();
+
+ RemoteRepository nexus = new RemoteRepository( "nexus", "default", remoteRepository );
+ Authentication authentication = new Authentication( "admin", "admin123" );
+ nexus.setAuthentication( authentication );
+
+ DeployRequest deployRequest = new DeployRequest();
+ deployRequest.addArtifact( artifact ).addArtifact( pom );
+ deployRequest.setRepository( nexus );
+
+ repositorySystem.deploy( session, deployRequest );
+ }
+
+ private void displayTree( DependencyNode node, StringBuilder sb )
+ {
+ ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 );
+ node.accept( new ConsoleDependencyGraphDumper( new PrintStream( os ) ) );
+ sb.append( os.toString() );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherDemo.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherDemo.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherDemo.java
new file mode 100644
index 0000000..c5d39bc
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherDemo.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.aether;
+
+import java.io.File;
+import java.util.List;
+
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.deployment.DeploymentException;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.installation.InstallationException;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.util.artifact.DefaultArtifact;
+import org.eclipse.aether.util.artifact.SubArtifact;
+
+@SuppressWarnings( "unused" )
+public class AetherDemo
+{
+
+ public void resolve()
+ throws DependencyResolutionException
+ {
+ Aether aether = new Aether( "http://localhost:8081/nexus/content/groups/public", "/Users/jvanzyl/aether-repo" );
+
+ AetherResult result = aether.resolve( "com.mycompany.app", "super-app", "1.0" );
+
+ // Get the root of the resolved tree of artifacts
+ //
+ DependencyNode root = result.getRoot();
+
+ // Get the list of files for the artifacts resolved
+ //
+ List<File> artifacts = result.getResolvedFiles();
+
+ // Get the classpath of the artifacts resolved
+ //
+ String classpath = result.getResolvedClassPath();
+ }
+
+ public void installAndDeploy()
+ throws InstallationException, DeploymentException
+ {
+ Aether aether = new Aether( "http://localhost:8081/nexus/content/groups/public", "/Users/jvanzyl/aether-repo" );
+
+ Artifact artifact = new DefaultArtifact( "com.mycompany.super", "super-core", "jar", "0.1-SNAPSHOT" );
+ artifact = artifact.setFile( new File( "jar-from-whatever-process.jar" ) );
+ Artifact pom = new SubArtifact( artifact, null, "pom" );
+ pom = pom.setFile( new File( "pom-from-whatever-process.xml" ) );
+
+ // Install into the local repository specified
+ //
+ aether.install( artifact, pom );
+
+ // Deploy to a remote reposistory
+ //
+ aether.deploy( artifact, pom, "http://localhost:8081/nexus/content/repositories/snapshots/" );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherResult.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherResult.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherResult.java
new file mode 100644
index 0000000..ade17ed
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/aether/AetherResult.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.aether;
+
+import java.io.File;
+import java.util.List;
+
+import org.eclipse.aether.graph.DependencyNode;
+
+public class AetherResult
+{
+ private DependencyNode root;
+ private List<File> resolvedFiles;
+ private String resolvedClassPath;
+
+ public AetherResult( DependencyNode root, List<File> resolvedFiles, String resolvedClassPath )
+ {
+ this.root = root;
+ this.resolvedFiles = resolvedFiles;
+ this.resolvedClassPath = resolvedClassPath;
+ }
+
+ public DependencyNode getRoot()
+ {
+ return root;
+ }
+
+ public List<File> getResolvedFiles()
+ {
+ return resolvedFiles;
+ }
+
+ public String getResolvedClassPath()
+ {
+ return resolvedClassPath;
+ }
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualRepositorySystemFactory.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualRepositorySystemFactory.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualRepositorySystemFactory.java
new file mode 100644
index 0000000..6dfa2cd
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualRepositorySystemFactory.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.manual;
+
+import org.apache.maven.repository.internal.DefaultServiceLocator;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.connector.file.FileRepositoryConnectorFactory;
+import org.eclipse.aether.connector.wagon.WagonProvider;
+import org.eclipse.aether.connector.wagon.WagonRepositoryConnectorFactory;
+import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
+
+/**
+ * A factory for repository system instances that employs Aether's built-in service locator infrastructure to wire up
+ * the system's components.
+ */
+public class ManualRepositorySystemFactory
+{
+
+ public static RepositorySystem newRepositorySystem()
+ {
+ /*
+ * Aether's components implement org.eclipse.aether.spi.locator.Service to ease manual wiring and using the
+ * prepopulated DefaultServiceLocator, we only need to register the repository connector factories.
+ */
+ DefaultServiceLocator locator = new DefaultServiceLocator();
+ locator.addService( RepositoryConnectorFactory.class, FileRepositoryConnectorFactory.class );
+ locator.addService( RepositoryConnectorFactory.class, WagonRepositoryConnectorFactory.class );
+ locator.setServices( WagonProvider.class, new ManualWagonProvider() );
+
+ return locator.getService( RepositorySystem.class );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualWagonProvider.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualWagonProvider.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualWagonProvider.java
new file mode 100644
index 0000000..3533e88
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/manual/ManualWagonProvider.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.manual;
+
+import org.apache.maven.wagon.Wagon;
+import org.eclipse.aether.connector.wagon.WagonProvider;
+import org.sonatype.maven.wagon.AhcWagon;
+
+/**
+ * A simplistic provider for wagon instances when no Plexus-compatible IoC container is used.
+ */
+public class ManualWagonProvider
+ implements WagonProvider
+{
+
+ public Wagon lookup( String roleHint )
+ throws Exception
+ {
+ if ( "http".equals( roleHint ) )
+ {
+ return new AhcWagon();
+ }
+ return null;
+ }
+
+ public void release( Wagon wagon )
+ {
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/plexus/PlexusRepositorySystemFactory.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/plexus/PlexusRepositorySystemFactory.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/plexus/PlexusRepositorySystemFactory.java
new file mode 100644
index 0000000..fbed875
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/plexus/PlexusRepositorySystemFactory.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.plexus;
+
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.eclipse.aether.RepositorySystem;
+
+/**
+ * A factory for repository system instances that employs Plexus to wire up the system's components.
+ */
+public class PlexusRepositorySystemFactory
+{
+
+ public static RepositorySystem newRepositorySystem()
+ {
+ /*
+ * Aether's components are equipped with plexus-specific metadata to enable discovery and wiring of components
+ * by a Plexus container so this is as easy as looking up the implementation.
+ */
+ try
+ {
+ return new DefaultPlexusContainer().lookup( RepositorySystem.class );
+ }
+ catch ( Exception e )
+ {
+ throw new IllegalStateException( "dependency injection failed", e );
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/Booter.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/Booter.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/Booter.java
new file mode 100644
index 0000000..d362a9b
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/Booter.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.util;
+
+import org.apache.maven.repository.internal.MavenRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.examples.manual.ManualRepositorySystemFactory;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.DefaultRepositorySystemSession;
+
+
+/**
+ * A helper to boot the repository system and a repository system session.
+ */
+public class Booter
+{
+
+ public static RepositorySystem newRepositorySystem()
+ {
+ return ManualRepositorySystemFactory.newRepositorySystem();
+ }
+
+ public static DefaultRepositorySystemSession newRepositorySystemSession( RepositorySystem system )
+ {
+ MavenRepositorySystemSession session = new MavenRepositorySystemSession();
+
+ LocalRepository localRepo = new LocalRepository( "target/local-repo" );
+ session.setLocalRepositoryManager( system.newLocalRepositoryManager( localRepo ) );
+
+ session.setTransferListener( new ConsoleTransferListener() );
+ session.setRepositoryListener( new ConsoleRepositoryListener() );
+
+ // uncomment to generate dirty trees
+ // session.setDependencyGraphTransformer( null );
+
+ return session;
+ }
+
+ public static RemoteRepository newCentralRepository()
+ {
+ return new RemoteRepository( "central", "default", "http://repo1.maven.org/maven2/" );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
new file mode 100644
index 0000000..59867a3
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleDependencyGraphDumper.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.util;
+
+import java.io.PrintStream;
+
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+
+/**
+ * A dependency visitor that dumps the graph to the console.
+ */
+public class ConsoleDependencyGraphDumper
+ implements DependencyVisitor
+{
+
+ private PrintStream out;
+
+ private String currentIndent = "";
+
+ public ConsoleDependencyGraphDumper()
+ {
+ this( null );
+ }
+
+ public ConsoleDependencyGraphDumper( PrintStream out )
+ {
+ this.out = ( out != null ) ? out : System.out;
+ }
+
+ public boolean visitEnter( DependencyNode node )
+ {
+ out.println( currentIndent + node );
+ if ( currentIndent.length() <= 0 )
+ {
+ currentIndent = "+- ";
+ }
+ else
+ {
+ currentIndent = "| " + currentIndent;
+ }
+ return true;
+ }
+
+ public boolean visitLeave( DependencyNode node )
+ {
+ currentIndent = currentIndent.substring( 3, currentIndent.length() );
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleRepositoryListener.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleRepositoryListener.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleRepositoryListener.java
new file mode 100644
index 0000000..b79091e
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleRepositoryListener.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.util;
+
+import java.io.PrintStream;
+
+import org.eclipse.aether.AbstractRepositoryListener;
+import org.eclipse.aether.RepositoryEvent;
+
+/**
+ * A simplistic repository listener that logs events to the console.
+ */
+public class ConsoleRepositoryListener
+ extends AbstractRepositoryListener
+{
+
+ private PrintStream out;
+
+ public ConsoleRepositoryListener()
+ {
+ this( null );
+ }
+
+ public ConsoleRepositoryListener( PrintStream out )
+ {
+ this.out = ( out != null ) ? out : System.out;
+ }
+
+ public void artifactDeployed( RepositoryEvent event )
+ {
+ out.println( "Deployed " + event.getArtifact() + " to " + event.getRepository() );
+ }
+
+ public void artifactDeploying( RepositoryEvent event )
+ {
+ out.println( "Deploying " + event.getArtifact() + " to " + event.getRepository() );
+ }
+
+ public void artifactDescriptorInvalid( RepositoryEvent event )
+ {
+ out.println( "Invalid artifact descriptor for " + event.getArtifact() + ": "
+ + event.getException().getMessage() );
+ }
+
+ public void artifactDescriptorMissing( RepositoryEvent event )
+ {
+ out.println( "Missing artifact descriptor for " + event.getArtifact() );
+ }
+
+ public void artifactInstalled( RepositoryEvent event )
+ {
+ out.println( "Installed " + event.getArtifact() + " to " + event.getFile() );
+ }
+
+ public void artifactInstalling( RepositoryEvent event )
+ {
+ out.println( "Installing " + event.getArtifact() + " to " + event.getFile() );
+ }
+
+ public void artifactResolved( RepositoryEvent event )
+ {
+ out.println( "Resolved artifact " + event.getArtifact() + " from " + event.getRepository() );
+ }
+
+ public void artifactDownloading( RepositoryEvent event )
+ {
+ out.println( "Downloading artifact " + event.getArtifact() + " from " + event.getRepository() );
+ }
+
+ public void artifactDownloaded( RepositoryEvent event )
+ {
+ out.println( "Downloaded artifact " + event.getArtifact() + " from " + event.getRepository() );
+ }
+
+ public void artifactResolving( RepositoryEvent event )
+ {
+ out.println( "Resolving artifact " + event.getArtifact() );
+ }
+
+ public void metadataDeployed( RepositoryEvent event )
+ {
+ out.println( "Deployed " + event.getMetadata() + " to " + event.getRepository() );
+ }
+
+ public void metadataDeploying( RepositoryEvent event )
+ {
+ out.println( "Deploying " + event.getMetadata() + " to " + event.getRepository() );
+ }
+
+ public void metadataInstalled( RepositoryEvent event )
+ {
+ out.println( "Installed " + event.getMetadata() + " to " + event.getFile() );
+ }
+
+ public void metadataInstalling( RepositoryEvent event )
+ {
+ out.println( "Installing " + event.getMetadata() + " to " + event.getFile() );
+ }
+
+ public void metadataInvalid( RepositoryEvent event )
+ {
+ out.println( "Invalid metadata " + event.getMetadata() );
+ }
+
+ public void metadataResolved( RepositoryEvent event )
+ {
+ out.println( "Resolved metadata " + event.getMetadata() + " from " + event.getRepository() );
+ }
+
+ public void metadataResolving( RepositoryEvent event )
+ {
+ out.println( "Resolving metadata " + event.getMetadata() + " from " + event.getRepository() );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e86cfec6/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleTransferListener.java
----------------------------------------------------------------------
diff --git a/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleTransferListener.java b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleTransferListener.java
new file mode 100644
index 0000000..f162975
--- /dev/null
+++ b/aether-demo-snippets/src/main/java/org/eclipse/aether/examples/util/ConsoleTransferListener.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 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.examples.util;
+
+import java.io.PrintStream;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.aether.transfer.AbstractTransferListener;
+import org.eclipse.aether.transfer.TransferEvent;
+import org.eclipse.aether.transfer.TransferResource;
+
+/**
+ * A simplistic transfer listener that logs uploads/downloads to the console.
+ */
+public class ConsoleTransferListener
+ extends AbstractTransferListener
+{
+
+ private PrintStream out;
+
+ private Map<TransferResource, Long> downloads = new ConcurrentHashMap<TransferResource, Long>();
+
+ private int lastLength;
+
+ public ConsoleTransferListener()
+ {
+ this( null );
+ }
+
+ public ConsoleTransferListener( PrintStream out )
+ {
+ this.out = ( out != null ) ? out : System.out;
+ }
+
+ @Override
+ public void transferInitiated( TransferEvent event )
+ {
+ String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
+
+ out.println( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
+ }
+
+ @Override
+ public void transferProgressed( TransferEvent event )
+ {
+ TransferResource resource = event.getResource();
+ downloads.put( resource, Long.valueOf( event.getTransferredBytes() ) );
+
+ StringBuilder buffer = new StringBuilder( 64 );
+
+ for ( Map.Entry<TransferResource, Long> entry : downloads.entrySet() )
+ {
+ long total = entry.getKey().getContentLength();
+ long complete = entry.getValue().longValue();
+
+ buffer.append( getStatus( complete, total ) ).append( " " );
+ }
+
+ int pad = lastLength - buffer.length();
+ lastLength = buffer.length();
+ pad( buffer, pad );
+ buffer.append( '\r' );
+
+ out.print( buffer );
+ }
+
+ private String getStatus( long complete, long total )
+ {
+ if ( total >= 1024 )
+ {
+ return toKB( complete ) + "/" + toKB( total ) + " KB ";
+ }
+ else if ( total >= 0 )
+ {
+ return complete + "/" + total + " B ";
+ }
+ else if ( complete >= 1024 )
+ {
+ return toKB( complete ) + " KB ";
+ }
+ else
+ {
+ return complete + " B ";
+ }
+ }
+
+ private void pad( StringBuilder buffer, int spaces )
+ {
+ String block = " ";
+ while ( spaces > 0 )
+ {
+ int n = Math.min( spaces, block.length() );
+ buffer.append( block, 0, n );
+ spaces -= n;
+ }
+ }
+
+ @Override
+ public void transferSucceeded( TransferEvent event )
+ {
+ transferCompleted( event );
+
+ TransferResource resource = event.getResource();
+ long contentLength = event.getTransferredBytes();
+ if ( contentLength >= 0 )
+ {
+ String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
+ String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
+
+ String throughput = "";
+ long duration = System.currentTimeMillis() - resource.getTransferStartTime();
+ if ( duration > 0 )
+ {
+ DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
+ double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
+ throughput = " at " + format.format( kbPerSec ) + " KB/sec";
+ }
+
+ out.println( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
+ + throughput + ")" );
+ }
+ }
+
+ @Override
+ public void transferFailed( TransferEvent event )
+ {
+ transferCompleted( event );
+
+ event.getException().printStackTrace( out );
+ }
+
+ private void transferCompleted( TransferEvent event )
+ {
+ downloads.remove( event.getResource() );
+
+ StringBuilder buffer = new StringBuilder( 64 );
+ pad( buffer, lastLength );
+ buffer.append( '\r' );
+ out.print( buffer );
+ }
+
+ public void transferCorrupted( TransferEvent event )
+ {
+ event.getException().printStackTrace( out );
+ }
+
+ protected long toKB( long bytes )
+ {
+ return ( bytes + 1023 ) / 1024;
+ }
+
+}