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();
}