commit f9f3013222be930ad3cd072ccae8ebcaff816a87
Author:     Mauro Talevi <mauro.tal...@aquilonia.org>
AuthorDate: Wed May 9 01:59:29 2012 +0200
Commit:     Mauro Talevi <mauro.tal...@aquilonia.org>
CommitDate: Wed May 9 01:59:29 2012 +0200

    JBEHAVE-777:  Added serialisation of performable tree root.

diff --git 
a/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java 
b/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java
index 7378a30..67d776f 100644
--- a/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java
+++ b/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java
@@ -1,5 +1,9 @@
 package org.jbehave.core.embedder;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -31,6 +35,9 @@ import org.jbehave.core.steps.StepCreator.ParameterisedStep;
 import org.jbehave.core.steps.StepCreator.PendingStep;
 import org.jbehave.core.steps.StepResult;
 
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
+
 /**
  * Creates a tree of {@link Performable} objects.
  */
@@ -42,6 +49,26 @@ public class PerformableTree {
         return root;
     }
 
+    public synchronized void serialiseRoot(File outputDirectory) {
+        serialiseRoot("xml", outputDirectory);
+        serialiseRoot("json",  outputDirectory);
+    }
+
+    private void serialiseRoot(String ext, File outputDirectory) {
+        XStream xstream = (ext.equals("json") ? new XStream(new 
JsonHierarchicalStreamDriver()) : new XStream());
+        File outputDir = new File(outputDirectory, "view");
+        outputDir.mkdirs();
+        String name = "tree."+ext;
+        try {
+            Writer writer = new FileWriter(new File(outputDir, name));
+            writer.write(xstream.toXML(root));
+            writer.flush();
+            writer.close();
+        } catch (IOException e) {
+            throw new RuntimeException(ext, e);
+        }
+    }
+
     public void addStories(RunContext context, List<String> storyPaths) {
         root.addBeforeSteps(context.beforeOrAfterStoriesSteps(Stage.BEFORE));
         for (String storyPath : storyPaths) {
@@ -701,7 +728,8 @@ public class PerformableTree {
                 }
             }
             if (!pendingSteps.isEmpty()) {
-                PendingStepMethodGenerator generator = new 
PendingStepMethodGenerator(context.configuration().keywords());
+                PendingStepMethodGenerator generator = new 
PendingStepMethodGenerator(context.configuration()
+                        .keywords());
                 List<String> methods = new ArrayList<String>();
                 for (PendingStep pendingStep : pendingSteps) {
                     if (!pendingStep.annotated()) {
diff --git 
a/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java 
b/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java
index 01d1470..f102139 100644
--- a/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java
+++ b/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java
@@ -92,6 +92,7 @@ public class StoryManager {
         // collect failures
         failures.putAll(context.getFailures());
 
+        
performableTree.serialiseRoot(configuration.storyReporterBuilder().outputDirectory());
     }
 
     public Map<String, RunningStory> runningStoriesAsPaths(RunContext context, 
List<String> storyPaths) {



Reply via email to