You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2013/08/24 02:01:33 UTC

svn commit: r1517092 - in /felix/trunk/webconsole/src/main: java/org/apache/felix/webconsole/internal/core/ resources/OSGI-INF/l10n/ resources/res/ui/ resources/templates/

Author: cziegeler
Date: Sat Aug 24 00:01:32 2013
New Revision: 1517092

URL: http://svn.apache.org/r1517092
Log:
FELIX-4202 :  Allow to filter services using ldap filter in webconsole services tab . Apply patch from Alexander Klimetschek

Modified:
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
    felix/trunk/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties
    felix/trunk/webconsole/src/main/resources/res/ui/bundles.css
    felix/trunk/webconsole/src/main/resources/res/ui/webconsole.css
    felix/trunk/webconsole/src/main/resources/templates/services.html

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java?rev=1517092&r1=1517091&r2=1517092&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java Sat Aug 24 00:01:32 2013
@@ -110,6 +110,9 @@ public class ServicesServlet extends Sim
     private static final String TITLE = "%services.pluginTitle"; //$NON-NLS-1$
     private static final String CSS[] = null;
 
+    // an LDAP filter, that is used to search services
+    private static final String FILTER_PARAM = "filter";
+
     private final String TEMPLATE;
 
     /** Default constructor */
@@ -165,11 +168,15 @@ public class ServicesServlet extends Sim
     }
 
 
-    private final ServiceReference[] getServices()
+    private final ServiceReference[] getServices(String filter)
     {
+        // empty filter string will return nothing, must set it to null to return all services
+        if (filter != null && filter.trim().length() == 0) {
+            filter = null;
+        }
         try
         {
-            final ServiceReference[] refs = getBundleContext().getAllServiceReferences( null, null );
+            final ServiceReference[] refs = getBundleContext().getAllServiceReferences( null, filter );
             if ( refs != null )
             {
                 return refs;
@@ -212,7 +219,7 @@ public class ServicesServlet extends Sim
         response.setCharacterEncoding( "UTF-8" );
 
         final PrintWriter pw = response.getWriter();
-        writeJSON( pw, service, locale );
+        writeJSON( pw, service, locale, null);
     }
 
 
@@ -306,16 +313,16 @@ public class ServicesServlet extends Sim
     }
 
 
-    private void writeJSON( final Writer pw, final ServiceReference service, final Locale locale ) throws IOException
+    private void writeJSON(final Writer pw, final ServiceReference service, final Locale locale, final String filter) throws IOException
     {
-        writeJSON( pw, service, false, locale );
+        writeJSON( pw, service, false, locale, filter );
     }
 
 
-    private void writeJSON( final Writer pw, final ServiceReference service, final boolean fullDetails, final Locale locale )
+    private void writeJSON( final Writer pw, final ServiceReference service, final boolean fullDetails, final Locale locale, final String filter )
         throws IOException
     {
-        final ServiceReference[] allServices = this.getServices();
+        final ServiceReference[] allServices = this.getServices(filter);
         final String statusLine = getStatusLine( allServices );
 
         final ServiceReference[] services = ( service != null ) ? new ServiceReference[]
@@ -392,13 +399,15 @@ public class ServicesServlet extends Sim
 
         final String appRoot = ( String ) request.getAttribute( WebConsoleConstants.ATTR_APP_ROOT );
         StringWriter w = new StringWriter();
-        writeJSON(w, reqInfo.service, request.getLocale());
+        final String filter = request.getParameter(FILTER_PARAM);
+        writeJSON(w, reqInfo.service, request.getLocale(), filter);
 
         // prepare variables
         DefaultVariableResolver vars = ( ( DefaultVariableResolver ) WebConsoleUtil.getVariableResolver( request ) );
         vars.put( "bundlePath", appRoot +  "/" + BundlesServlet.NAME + "/" );
         vars.put( "drawDetails", String.valueOf(reqInfo.serviceRequested));
         vars.put( "__data__", w.toString() );
+        vars.put( "filter", filter == null ? "" : filter);
 
         response.getWriter().print( TEMPLATE );
     }

Modified: felix/trunk/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties?rev=1517092&r1=1517091&r2=1517092&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties (original)
+++ felix/trunk/webconsole/src/main/resources/OSGI-INF/l10n/bundle.properties Sat Aug 24 00:01:32 2013
@@ -81,6 +81,8 @@ services.usingBundles=Using Bundles
 services.info.name=Used Services
 services.info.descr=This is a OSGi service that is used by the current bundle. Click to see more details in 'Services' plugin.
 services.info.key=Service #{0} of type(s) {1}
+services.filter.help=An LDAP filter string to match against service properties.
+services.filter.apply=Apply Filter
 
 # Log plugin
 logs.pluginTitle=Log Service

Modified: felix/trunk/webconsole/src/main/resources/res/ui/bundles.css
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/res/ui/bundles.css?rev=1517092&r1=1517091&r2=1517092&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/res/ui/bundles.css (original)
+++ felix/trunk/webconsole/src/main/resources/res/ui/bundles.css Sat Aug 24 00:01:32 2013
@@ -24,7 +24,6 @@ th.col_Symbolic_Name { width: 9em }
 th.col_Version,
 th.col_Status   { width: 7em }
 th.col_Actions { width: 121px }
-.filterBox      { float: left; margin-left: 1em }
 .symName                 { font-style: italic }
 .symName:before { content: " (" }
 .symName:after   { content: ")"  }

Modified: felix/trunk/webconsole/src/main/resources/res/ui/webconsole.css
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/res/ui/webconsole.css?rev=1517092&r1=1517091&r2=1517092&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/res/ui/webconsole.css (original)
+++ felix/trunk/webconsole/src/main/resources/res/ui/webconsole.css Sat Aug 24 00:01:32 2013
@@ -191,3 +191,8 @@ ul.icons li {
 /* language selection element */
 #langSelect { position: absolute;	top: 5px; right: 5px }
 #langSelect img   { display: block; padding: 2px 0 }
+
+.filterBox      { float: left; margin-left: 1em }
+.servicesFilter { width: 400px; }
+.servicesFilterApply { width: 85px; }
+

Modified: felix/trunk/webconsole/src/main/resources/templates/services.html
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/templates/services.html?rev=1517092&r1=1517091&r2=1517092&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/templates/services.html [UTF-8] (original)
+++ felix/trunk/webconsole/src/main/resources/templates/services.html [UTF-8] Sat Aug 24 00:01:32 2013
@@ -19,7 +19,18 @@ var data = ${__data__};
 
 <p class="statline">&nbsp;</p>
 
-<div class="ui-widget-header ui-corner-top buttonGroup">${services.caption}</div>
+<form method="get" action="" class="filterForm">
+    <div class="ui-widget-header ui-corner-top buttonGroup">
+        <div class="filterBox">
+            <label>
+                Filter:
+                <input class="servicesFilter" name="filter" value="${filter}" title="${services.filter.help}"/>
+            </label>
+            <input type="submit" value="${services.filter.apply}" class="servicesFilterApply"/>
+        </div>
+        <span>${services.caption}</span>
+    </div>
+</form>
 
 <table id="plugin_table" class="tablesorter nicetable noauto">
 	<thead>