FELIX-3874 :  Create new status printer module

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1440027 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java b/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java
index 40250f2..164faa1 100644
--- a/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java
+++ b/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java
@@ -23,8 +23,9 @@
  */
 public enum PrinterMode {
 
-    TEXT,       // plain text
-    HTML_BODY,  // HTML which can be placed inside a HTML body element (no external references)
-    JSON,       // JSON output
-    ZIP_FILE    // file content for a zip
+    TEXT,          // plain text
+    HTML_BODY,     // HTML which can be placed inside a HTML body element (no external references)
+    JSON,          // JSON output
+    ZIP_FILE_BIN,  // file content for a zip
+    ZIP_FILE_JSON  // json file content for a zip
 }
diff --git a/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java b/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java
index 37cb6b8..b78243b 100644
--- a/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java
+++ b/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java
@@ -29,7 +29,9 @@
  *
  * A service implementing this method must still register itself
  * as a {@link StatusPrinter} but not as a
- * {@link ZipAttachmentProvider} service.
+ * {@link ZipAttachmentProvider} service and the provider
+ * should either support {@link PrinterMode.ZIP_FILE_JSON}
+ * or {@link PrinterMode.ZIP_FILE_BIN}
  */
 public interface ZipAttachmentProvider extends StatusPrinter {
 
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java b/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java
index 3b62da8..5f88bb4 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java
@@ -141,7 +141,9 @@
             zip.closeEntry();
 
             final ZipConfigurationWriter pw = new ZipConfigurationWriter( zip );
-            printConfigurationStatus( pw, PrinterMode.ZIP_FILE, handler );
+            printConfigurationStatus( pw, PrinterMode.ZIP_FILE_BIN, handler );
+            pw.counter = 0;
+            printConfigurationStatus( pw, PrinterMode.ZIP_FILE_JSON, handler );
 
             zip.finish();
         } else if ( request.getPathInfo().endsWith( ".nfo" ) ) {
@@ -204,7 +206,7 @@
             pw.print("<button type=\"button\" class=\"downloadFullZip\" style=\"float: right; margin-right: 30px; margin-top: 5px;\">Download Full Zip</button>");
             pw.print("<button type=\"button\" class=\"downloadFullTxt\" style=\"float: right; margin-right: 30px; margin-top: 5px;\">Download Full Text</button>");
 
-            if ( handler.supports(PrinterMode.ZIP_FILE) ) {
+            if ( handler.supports(PrinterMode.ZIP_FILE_BIN) || handler.supports(PrinterMode.ZIP_FILE_JSON) ) {
                 pw.print("<button type=\"button\" class=\"downloadZip\" style=\"float: right; margin-right: 30px; margin-top: 5px;\">Download As Zip</button>");
             }
             if ( handler.supports(PrinterMode.TEXT ) ) {
@@ -429,18 +431,23 @@
                 final PrinterMode mode,
                 final StatusPrinterHandler handler)
         throws IOException {
-            super.printStatus(mode, handler);
             final String title = getFormattedTitle(handler.getTitle());
-            handler.addAttachments(title.concat("/"), this.zip);
-            if ( handler.supports(PrinterMode.JSON) ) {
+            if ( mode == PrinterMode.ZIP_FILE_BIN ) {
+                super.printStatus(mode, handler);
+                handler.addAttachments(title.concat("/"), this.zip);
+            } else {
+                counter++;
                 final String name = "json/".concat(title).concat(".json");
 
                 final ZipEntry entry = new ZipEntry( name );
                 zip.putNextEntry( entry );
-                handler.print(PrinterMode.JSON, this);
+                handler.print(PrinterMode.ZIP_FILE_JSON, this);
                 flush();
 
                 zip.closeEntry();
+                if ( !handler.supports(PrinterMode.ZIP_FILE_BIN) ) {
+                    handler.addAttachments(title.concat("/"), this.zip);
+                }
             }
         }
     }
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java b/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java
index d43210d..feabdd1 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java
@@ -49,8 +49,7 @@
         this.managerRegistration = context.registerService(
                 StatusPrinterManager.class.getName(),
                 this.printerManager, props);
-
-    }
+}
 
     /**
      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java
index 54e3262..071689d 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java
@@ -183,7 +183,7 @@
     public String[] getPrinterModes() {
         final Set<String> list = new HashSet<String>();
         if ( this.match(ConsoleConstants.MODE_TXT) || this.match(ConsoleConstants.MODE_ZIP) ) {
-            list.add(PrinterMode.ZIP_FILE.name());
+            list.add(PrinterMode.ZIP_FILE_BIN.name());
         }
         if ( this.match(ConsoleConstants.MODE_WEB) ) {
             if ( !escapeHtml ) {
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java
index ddab251..b5e0dac 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java
@@ -113,7 +113,7 @@
                         m = ConsoleConstants.MODE_WEB;
                     } else if ( mode == PrinterMode.TEXT ) {
                         m = ConsoleConstants.MODE_TXT;
-                    } else if ( mode == PrinterMode.ZIP_FILE ) {
+                    } else if ( mode == PrinterMode.ZIP_FILE_BIN ) {
                         m = ConsoleConstants.MODE_ZIP;
                     } else {
                         m = null;