MDEP-509: add optional to the display of the tree when available.


git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1707376 13f79535-47bb-0310-9956-ffa450edef68
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 a1c0a27..b2e5219 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
@@ -87,4 +87,9 @@
      * @return the string representation
      */
     String toNodeString();
+
+    /**
+     * @return true for an optional dependency.
+     */
+    Boolean getOptional();
 }
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 008cd2c..322b966 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
@@ -42,6 +42,8 @@
 
     private List<DependencyNode> children;
 
+    private Boolean optional;
+
     /**
      * Constructs the DefaultDependencyNode.
      *
@@ -61,6 +63,17 @@
         this.versionConstraint = versionConstraint;
     }
 
+    public DefaultDependencyNode( DependencyNode parent, Artifact artifact, String premanagedVersion,
+                                  String premanagedScope, String versionConstraint, Boolean optional )
+    {
+        this.parent = parent;
+        this.artifact = artifact;
+        this.premanagedVersion = premanagedVersion;
+        this.premanagedScope = premanagedScope;
+        this.versionConstraint = versionConstraint;
+        this.optional = optional;
+    }
+
     /**
      * Applies the specified dependency node visitor to this dependency node and its children.
      * 
@@ -139,6 +152,12 @@
         return versionConstraint;
     }
 
+    @Override
+    public Boolean getOptional()
+    {
+        return optional;
+    }
+
     /**
      * @return Stringified representation of this DependencyNode.
      */
@@ -166,7 +185,12 @@
             appender.append( "version selected from constraint ", getVersionConstraint() );
         }
 
+
         appender.flush();
+        if ( optional != null && optional )
+        {
+            buffer.append( " (optional) " );
+        }
 
         return buffer.toString();
     }
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 08c235d..cecb50e 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
@@ -207,9 +207,16 @@
         String premanagedVersion = null; // DependencyManagerUtils.getPremanagedVersion( node );
         String premanagedScope = null; // DependencyManagerUtils.getPremanagedScope( node );
 
+        Boolean optional = null;
+        if ( node.getDependency() != null )
+        {
+            optional = node.getDependency().isOptional();
+        }
+
         DefaultDependencyNode current =
             new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope,
-                                       getVersionSelectedFromRange( node.getVersionConstraint() ) );
+                                       getVersionSelectedFromRange( node.getVersionConstraint() ),
+                                       optional );
 
         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 775e0f2..498b6e1 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
@@ -87,7 +87,8 @@
         DefaultDependencyNode newNode =
             new DefaultDependencyNode( parentNodes.isEmpty() ? null : parentNodes.peek(), node.getArtifact(),
                                        node.getPremanagedVersion(), node.getPremanagedScope(),
-                                       node.getVersionConstraint() );
+                                       node.getVersionConstraint(),
+                                       node.getOptional() );
         newNode.setChildren( new ArrayList<DependencyNode>() );
 
         if ( parentNodes.empty() )