[MSHARED-249] Add option for --resume-from 

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1392618 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java b/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
index 9fa70ab..b641623 100644
--- a/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
+++ b/src/main/java/org/apache/maven/shared/invoker/DefaultInvocationRequest.java
@@ -98,6 +98,8 @@
 
     private boolean alsoMakeDependents;
 
+    private String resumeFrom;
+
     private boolean showVersion;
 
     private String threads;
@@ -505,4 +507,21 @@
         return this;
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public String getResumeFrom()
+    {
+        return resumeFrom;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public InvocationRequest setResumeFrom( String resumeFrom )
+    {
+        this.resumeFrom = resumeFrom;
+        return this;
+    }
+    
 }
diff --git a/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java b/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
index 8a2d434..ac32634 100644
--- a/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
+++ b/src/main/java/org/apache/maven/shared/invoker/InvocationRequest.java
@@ -110,6 +110,14 @@
     boolean isAlsoMakeDependents();
 
     /**
+     * Get the value of {@code resume-from}
+     * 
+     * @return specified reactor project to resume from
+     * @since 2.0.12
+     */
+    String getResumeFrom();
+
+    /**
      * Gets the debug mode of the Maven invocation. By default, Maven is executed in normal mode.
      * 
      * @return <code>true</code> if Maven should be executed in debug mode, <code>false</code> if the normal mode
@@ -627,4 +635,15 @@
      * @since 2.0.12
      */
     InvocationRequest setAlsoMakeDependents( boolean alsoMakeDependents );
+
+    /**
+     * Resume reactor from specified project.
+     * Equivalent of {@code -rf} or {@code --resume-from}
+     * 
+     * @param resumeFrom set the project to resume from
+     * @return This invocation request
+     * @since 2.0.12
+     */
+    InvocationRequest setResumeFrom( String resumeFrom );
+    
 }
diff --git a/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java b/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java
index b4be1c0..abf6482 100644
--- a/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java
+++ b/src/main/java/org/apache/maven/shared/invoker/MavenCommandLineBuilder.java
@@ -443,6 +443,12 @@
             }
         }
 
+        if( StringUtils.isNotEmpty( request.getResumeFrom() ) )
+        {
+            cli.createArg().setValue( "-rf" );
+            cli.createArg().setValue( request.getResumeFrom() );
+        }
+
         List<String> projectList = request.getProjects();
         if ( projectList != null )
         {
diff --git a/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java b/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java
index 8438e4f..37b784f 100644
--- a/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java
+++ b/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java
@@ -525,6 +525,18 @@
         assertArgumentsPresentInOrder( cli, "-pl", "proj1", "-am", "-amd" );
     }
 
+    public void testShouldSetResumeFrom()
+    {
+        logTestStart();
+
+        TestCommandLineBuilder tcb = new TestCommandLineBuilder();
+        Commandline cli = new Commandline();
+
+        tcb.setReactorBehavior( newRequest().setResumeFrom( ":module3" ), cli );
+
+        assertArgumentsPresentInOrder( cli, "-rf", ":module3"  );
+    }
+
     public void testShouldSetStrictChecksumPolityFlagFromRequest()
     {
         logTestStart();