FELIX-1993 : Enhance configuration printer support
Add new ModeAwareConfigurationPrinter interface which allows to pass the mode into the configuration printer. This allows a printer to print different things in different modes.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@903602 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java b/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java
index 9f994e8..390fe6a 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java
@@ -42,28 +42,28 @@
     String SERVICE = ConfigurationPrinter.class.getName();
 
     /** The default mode - this printer is used in the web console and the zip.
-     * @since 2.2 */
+     * @since 3.0 */
     String MODE_ALWAYS = "always";
 
     /** The web mode - this printer is used in the web console.
-     * since 2.2 */
+     * since 3.0 */
     String MODE_WEB = "web";
 
     /** The zip mode - this printer is used in the zip.
-     * @since 2.2 */
+     * @since 3.0 */
     String MODE_ZIP = "zip";
 
     /** The txt mode - this printer is used in the txt.
-     * @since 2.2 */
+     * @since 3.0 */
     String MODE_TXT = "txt";
 
     /**
-     * The service property specifying the modes of the printer. If this
-     * property is missing or contains an unknown value, the default
+     * The optional service property specifying the modes of the printer.
+     * If this property is missing or contains an unknown value, the default
      * {@link #MODE_ALWAYS} is used.
      * The value of this property is either a single string or an
      * array of strings.
-     * @since 2.2
+     * @since 3.0
      */
     String PROPERTY_MODES = "modes";
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/ModeAwareConfigurationPrinter.java b/webconsole/src/main/java/org/apache/felix/webconsole/ModeAwareConfigurationPrinter.java
new file mode 100644
index 0000000..6faeed3
--- /dev/null
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/ModeAwareConfigurationPrinter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.webconsole;
+
+
+import java.io.PrintWriter;
+
+
+/**
+ * This is an optional extension of the {@link ConfigurationPrinter}.
+ * If a configuration printer implements this interface, the
+ * {@link #printConfiguration(PrintWriter, String)} method is used
+ * for printing the configuration instead of the
+ * {@link ConfigurationPrinter#printConfiguration(PrintWriter)}
+ * method.
+ *
+ * A service implementing this method must still register itself
+ * as a {@link ConfigurationPrinter} but not as a
+ * {@link ModeAwareConfigurationPrinter} service.
+ * @since 3.0
+ */
+public interface ModeAwareConfigurationPrinter
+    extends ConfigurationPrinter
+{
+
+    /**
+     * Prints the configuration report to the given <code>printWriter</code>.
+     * Implementations are free to print whatever information they deem useful.
+     * The <code>printWriter</code> may be flushed but must not be closed.
+     * @param printWriter The print writer to use.
+     * @param mode The rendering mode.
+     */
+    void printConfiguration( PrintWriter printWriter, String mode );
+}
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
index b2ea79c..65835f0 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
@@ -27,8 +27,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.felix.webconsole.ConfigurationPrinter;
-import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.*;
 import org.apache.felix.webconsole.internal.BaseWebConsolePlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.osgi.framework.ServiceReference;
@@ -178,7 +177,7 @@
             final PrinterDesc desc = (PrinterDesc) cpi.next();
             if ( desc.match(mode) )
             {
-                printConfigurationPrinter( pw, desc.printer );
+                printConfigurationPrinter( pw, desc.printer, mode );
             }
         }
     }
@@ -264,10 +263,19 @@
     //    }
 
 
-    private void printConfigurationPrinter( ConfigurationWriter pw, ConfigurationPrinter cp )
+    private void printConfigurationPrinter( final ConfigurationWriter pw,
+            final ConfigurationPrinter cp,
+            final String mode )
     {
         pw.title(  cp.getTitle() );
-        cp.printConfiguration( pw );
+        if ( cp instanceof ModeAwareConfigurationPrinter )
+        {
+            ((ModeAwareConfigurationPrinter)cp).printConfiguration( pw , mode);
+        }
+        else
+        {
+            cp.printConfiguration( pw );
+        }
         pw.end();
     }