[MSHARED-852] Add Exclusions to DependencyNode
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java
index b2e5219..e46d6a5 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyNode.java
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Exclusion;
 import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
 
 /**
@@ -92,4 +93,10 @@
      * @return true for an optional dependency.
      */
     Boolean getOptional();
+    
+    /**
+     * 
+     * @return the exclusions of the dependency
+     */
+    List<Exclusion> getExclusions();
 }
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
index 3b8139c..440eaea 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyNode.java
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Exclusion;
 import org.apache.maven.shared.dependency.graph.DependencyNode;
 import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
 
@@ -31,7 +32,7 @@
 public class DefaultDependencyNode implements DependencyNode
 {
     private final Artifact artifact;
-
+    
     private final DependencyNode parent;
 
     private final String premanagedVersion;
@@ -44,6 +45,8 @@
 
     private Boolean optional;
 
+    private List<Exclusion> exclusions;
+
     /**
      * Constructs the DefaultDependencyNode.
      *
@@ -64,7 +67,8 @@
     }
 
     public DefaultDependencyNode( DependencyNode parent, Artifact artifact, String premanagedVersion,
-                                  String premanagedScope, String versionConstraint, Boolean optional )
+                                  String premanagedScope, String versionConstraint, Boolean optional,
+                                  List<Exclusion> exclusions )
     {
         this.parent = parent;
         this.artifact = artifact;
@@ -72,6 +76,7 @@
         this.premanagedScope = premanagedScope;
         this.versionConstraint = versionConstraint;
         this.optional = optional;
+        this.exclusions = exclusions;
     }
 
     /**
@@ -158,13 +163,19 @@
         return optional;
     }
 
+    @Override
+    public List<Exclusion> getExclusions()
+    {
+        return exclusions;
+    }
+
     /**
      * @return Stringified representation of this DependencyNode.
      */
     @Override
     public String toNodeString()
     {
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
 
         buffer.append( artifact );
 
@@ -200,7 +211,7 @@
      */
     private static class ItemAppender
     {
-        private StringBuffer buffer;
+        private StringBuilder buffer;
 
         private String startToken;
 
@@ -210,7 +221,7 @@
 
         private boolean appended;
 
-        ItemAppender( StringBuffer buffer, String startToken, String separatorToken, String endToken )
+        ItemAppender( StringBuilder buffer, String startToken, String separatorToken, String endToken )
         {
             this.buffer = buffer;
             this.startToken = startToken;
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
index 47d9e53..5a53dcb 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
@@ -44,6 +44,7 @@
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.graph.Exclusion;
 import org.eclipse.aether.version.VersionConstraint;
 
 /**
@@ -208,16 +209,24 @@
         String premanagedVersion = null; // DependencyManagerUtils.getPremanagedVersion( node );
         String premanagedScope = null; // DependencyManagerUtils.getPremanagedScope( node );
 
+        List<org.apache.maven.model.Exclusion> exclusions = null;
         Boolean optional = null;
         if ( node.getDependency() != null )
         {
-            optional = node.getDependency().isOptional();
+            exclusions = new ArrayList<>( node.getDependency().getExclusions().size() );
+            for ( Exclusion exclusion : node.getDependency().getExclusions() )
+            {
+                org.apache.maven.model.Exclusion modelExclusion = new org.apache.maven.model.Exclusion();
+                modelExclusion.setGroupId( exclusion.getGroupId() );
+                modelExclusion.setArtifactId( exclusion.getArtifactId() );
+                exclusions.add( modelExclusion );
+            }
         }
 
         DefaultDependencyNode current =
             new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope,
                                        getVersionSelectedFromRange( node.getVersionConstraint() ),
-                                       optional );
+                                       optional, exclusions );
 
         List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
         for ( org.eclipse.aether.graph.DependencyNode child : node.getChildren() )
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/traversal/BuildingDependencyNodeVisitor.java b/src/main/java/org/apache/maven/shared/dependency/graph/traversal/BuildingDependencyNodeVisitor.java
index 498b6e1..fb05fbe 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/traversal/BuildingDependencyNodeVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/traversal/BuildingDependencyNodeVisitor.java
@@ -88,7 +88,7 @@
             new DefaultDependencyNode( parentNodes.isEmpty() ? null : parentNodes.peek(), node.getArtifact(),
                                        node.getPremanagedVersion(), node.getPremanagedScope(),
                                        node.getVersionConstraint(),
-                                       node.getOptional() );
+                                       node.getOptional(), node.getExclusions() );
         newNode.setChildren( new ArrayList<DependencyNode>() );
 
         if ( parentNodes.empty() )