Author: vvalchev
Date: Wed Mar 17 08:13:39 2010
New Revision: 924190

URL: http://svn.apache.org/viewvc?rev=924190&view=rev
Log:
Resolved FELIX-1441 /Search manifest entries of bundles/

Modified:
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
    
felix/trunk/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties
    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/bundles.js
    felix/trunk/webconsole/src/main/resources/templates/bundles.html

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java?rev=924190&r1=924189&r2=924190&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
 Wed Mar 17 08:13:39 2010
@@ -112,7 +112,6 @@ public class BundlesServlet extends Simp
 
     // templates
     private final String TEMPLATE_MAIN;
-    private final String TEMPLATE_UPLOAD;
 
     /** Default constructor */
     public BundlesServlet()
@@ -121,7 +120,6 @@ public class BundlesServlet extends Simp
 
         // load templates
         TEMPLATE_MAIN = readTemplateFile( "/templates/bundles.html" );
-        TEMPLATE_UPLOAD = readTemplateFile( "/templates/bundles_upload.html" );
     }
 
     /**
@@ -462,20 +460,13 @@ public class BundlesServlet extends Simp
         vars.put( "drawDetails", reqInfo.bundleRequested ? Boolean.TRUE : 
Boolean.FALSE );
         vars.put( "currentBundle", (reqInfo.bundleRequested && reqInfo.bundle 
!= null ? String.valueOf(reqInfo.bundle.getBundleId()) : "null"));
 
-        if ( "upload".equals(reqInfo.pathInfo) )
-        {
-            response.getWriter().print(TEMPLATE_UPLOAD);
-        }
-        else
-        {
-            final String pluginRoot = ( String ) request.getAttribute( 
WebConsoleConstants.ATTR_PLUGIN_ROOT );
-            final String servicesRoot = getServicesRoot ( request );
-            StringWriter w = new StringWriter();
-            writeJSON(w, reqInfo.bundle, pluginRoot, servicesRoot, 
request.getLocale() );
-            vars.put( "__bundles__", w.toString());
+        final String pluginRoot = ( String ) request.getAttribute( 
WebConsoleConstants.ATTR_PLUGIN_ROOT );
+        final String servicesRoot = getServicesRoot ( request );
+        StringWriter w = new StringWriter();
+        writeJSON(w, reqInfo.bundle, pluginRoot, servicesRoot, 
request.getLocale() );
+        vars.put( "__bundles__", w.toString());
 
-            response.getWriter().print(TEMPLATE_MAIN);
-        }
+        response.getWriter().print(TEMPLATE_MAIN);
     }
 
     private void renderJSON( final HttpServletResponse response, final Bundle 
bundle, final String pluginRoot, final String servicesRoot, final Locale locale 
)
@@ -617,6 +608,10 @@ public class BundlesServlet extends Simp
         jw.value( bundle.getBundleId() );
         jw.key( "name" );
         jw.value( Util.getName( bundle, locale ) );
+        jw.key( "fragment" );
+        jw.value( isFragmentBundle(bundle) );
+        jw.key( "stateRaw" );
+        jw.value( bundle.getState() );
         jw.key( "state" );
         jw.value( toStateString( bundle ) );
         jw.key( "version" );
@@ -624,25 +619,6 @@ public class BundlesServlet extends Simp
         jw.key( "symbolicName" );
         jw.value( Util.getHeaderValue(bundle, Constants.BUNDLE_SYMBOLICNAME) );
 
-        jw.key( "actions" );
-        jw.array();
-
-        if ( bundle.getBundleId() != 0 )
-        {
-            if ( hasStart(bundle) )
-            {
-                action( jw, hasStart( bundle ), "start", "Start", "start" );
-            }
-            else
-            {
-                action( jw, hasStop( bundle ), "stop", "Stop", "stop" );
-            }
-            action( jw, true, "refresh", "Refresh Package Imports", "refresh" 
);
-            action( jw, true, "update", "Update", "update" );
-            action( jw, hasUninstall( bundle ), "uninstall", "Uninstall", 
"delete" );
-        }
-        jw.endArray();
-
         if ( details )
         {
             bundleDetails( jw, bundle, pluginRoot, servicesRoot, locale );
@@ -683,50 +659,11 @@ public class BundlesServlet extends Simp
         }
     }
 
-
-    private void action( JSONWriter jw, boolean enabled, String op, String 
opLabel, String image ) throws JSONException
-    {
-        jw.object();
-        jw.key( "enabled" ).value( enabled );
-        jw.key( "name" ).value( opLabel );
-        jw.key( "link" ).value( op );
-        jw.key( "image" ).value( image );
-        jw.endObject();
-    }
-
     private final boolean isFragmentBundle( Bundle bundle)
     {
         return getPackageAdmin().getBundleType( bundle ) == 
PackageAdmin.BUNDLE_TYPE_FRAGMENT;
     }
 
-    private final boolean hasStart( Bundle bundle )
-    {
-        if ( isFragmentBundle(bundle) )
-        {
-            return false;
-        }
-        return bundle.getState() == Bundle.INSTALLED || bundle.getState() == 
Bundle.RESOLVED;
-    }
-
-
-    private final boolean hasStop( Bundle bundle )
-    {
-        if ( isFragmentBundle(bundle) )
-        {
-            return false;
-        }
-        return bundle.getState() == Bundle.ACTIVE;
-    }
-
-
-    private static final boolean hasUninstall( Bundle bundle )
-    {
-        return bundle.getState() == Bundle.INSTALLED || bundle.getState() == 
Bundle.RESOLVED
-            || bundle.getState() == Bundle.ACTIVE;
-
-    }
-
-
     private final void bundleDetails( JSONWriter jw, Bundle bundle, final 
String pluginRoot, final String servicesRoot, final Locale locale)
         throws JSONException
     {

Modified: 
felix/trunk/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties?rev=924190&r1=924189&r2=924190&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties 
[UTF-8] (original)
+++ 
felix/trunk/webconsole/src/main/native2ascii/OSGI-INF/l10n/bundle_bg.properties 
[UTF-8] Wed Mar 17 08:13:39 2010
@@ -128,7 +128,7 @@ bundles.startlevel=Стартово ни
 bundles.classpath=Bundle Classpath
 bundles.pkg.exported=Предотставяни пакети
 bundles.pkg.imported=Използвани пакети
-bundles.pkg.importingBundles=Използвани бъндъли
+bundles.pkg.importingBundles=Използващи бъндъли
 bundles.manifest.headers=Manifest Headers
 bundles.hosts=Host Bundles
 bundles.framents=Закачени фрагменти
@@ -140,6 +140,19 @@ bundles.refreshImports=Обновява� 
bundles.upload.caption=Качване/инсталиране на бъндъли
 bundles.upload.start=Стартиране
 bundles.upload.level=Стартиращо ниво
+# filter
+bundles.filter.apply=Прилагане филтър
+bundles.filter.clear=Изчистване филтър
+bundles.filter.help=Низ или регулярен израз, който се съдържа в ID-то, името, 
символното име или версията на бъндъла.
+# states
+bundles.state.1=Деинсталиран
+bundles.state.2=Инсталиран
+bundles.state.4=Ресолвнат
+bundles.state.8=Стартиран
+bundles.state.16=Спрян
+bundles.state.32=Активен
+bundles.state.unknown=Непознат статус: {0}
+bundles.state.fragment=Фрагмент
 
 
 # Components plugin

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=924190&r1=924189&r2=924190&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 
Wed Mar 17 08:13:39 2010
@@ -140,6 +140,19 @@ bundles.refreshImports=Refresh Package I
 bundles.upload.caption=Upload / Install Bundles
 bundles.upload.start=Start Bundle
 bundles.upload.level=Start Level
+# filter
+bundles.filter.apply=Apply Filter
+bundles.filter.clear=Clear Filter
+bundles.filter.help=A string or RegExp expression which is matched againse 
bundle id, name, symbolic name or version.
+# states
+bundles.state.1=Uninstalled
+bundles.state.2=Installed
+bundles.state.4=Resolved
+bundles.state.8=Starting
+bundles.state.16=Stopping
+bundles.state.32=Active
+bundles.state.unknown=Unknown State: {0}
+bundles.state.fragment=Fragment
 
 
 # Components plugin

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=924190&r1=924189&r2=924190&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/res/ui/bundles.css (original)
+++ felix/trunk/webconsole/src/main/resources/res/ui/bundles.css Wed Mar 17 
08:13:39 2010
@@ -22,3 +22,5 @@
 
 .col_Status   { width: 50px;  }
 .col_Actions { width: 121px; }
+.filterBox      { float: left; margin-left: 1em }
+#uploadDialog, div.ui-dialog-buttonpane button { font-size: 50% }

Modified: felix/trunk/webconsole/src/main/resources/res/ui/bundles.js
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/res/ui/bundles.js?rev=924190&r1=924189&r2=924190&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/res/ui/bundles.js (original)
+++ felix/trunk/webconsole/src/main/resources/res/ui/bundles.js Wed Mar 17 
08:13:39 2010
@@ -14,14 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+// ui elements
+var uploadDialog = false;
+var bundlesTable    = false;
+var bundlesBody     = false;
+var bundlesTemplate = false;
 
-function renderData( eventData )  {
+function renderData( eventData, filter )  {
+       lastBundleData = eventData;
        var s = eventData.s;
-    $(".statline").html(i18n.statline.msgFormat(s[0], s[1], s[2], s[3], s[4]));
-    $("#plugin_table > tbody > tr").remove();
+    $('.statline').html(i18n.statline.msgFormat(s[0], s[1], s[2], s[3], s[4]));
+       bundlesBody.empty();
     for ( var idx in eventData.data ) {
         if ( currentBundle == null || !drawDetails || currentBundle == 
eventData.data[idx].id) {
-            entry( eventData.data[idx] );
+            entry( eventData.data[idx], filter );
         }
     }
     if ( drawDetails && eventData.data.length == 1 ) {
@@ -34,94 +40,66 @@ function renderData( eventData )  {
     initStaticWidgets();
 }
 
-function entry( /* Object */ dataEntry ) {
-    var trElement = tr( null, { id: "entry" + dataEntry.id } );
-    entryInternal( trElement,  dataEntry );
-    $("#plugin_table > tbody").append(trElement);   
-}
-
-function actionButton( /* Element */ parent, /* string */ id, /* Obj */ action 
) {
-    if ( !action.enabled ) {
-        return;
-    }
-    var enabled = action.enabled;
-    var op = action.link;
-    var opLabel = action.name;
-    var img = action.image;
-    // fixup JQuery UI icons
-    if(img == "start" ) img = "play";
-    if(img == "update") img = "transferthick-e-w";
-    if(img == "delete") img = "trash";
-
-       // apply i18n
-       opLabel = i18n[opLabel] ? i18n[opLabel] : opLabel;
-    
-    var input = createElement('li', 'dynhover', {
-        title: opLabel
-    });
-    $(input)
-        .html('<span class="ui-icon ui-icon-'+img+'"></span>')
-        .click(function() {changeDataEntryState(id, op)});
-
-    if (!enabled) {
-        $(input).attr("disabled", true).addClass("ui-state-disabled");
-    }
-    parent.appendChild( input );
-}
-
-function entryInternal( /* Element */ parent, /* Object */ dataEntry ) {
-    var id = dataEntry.id;
-    var name = dataEntry.name;
-    var state = dataEntry.state;
-
-    // right arrow
-    var inputElement = createElement('span', 'ui-icon ui-icon-triangle-1-e', {
-        title: "Details",
-        id: 'img' + id,
-        style: {display: "inline-block"}
-    });
-    $(inputElement).click(function() {showDetails(id)});
-    var titleElement;
-    if ( drawDetails ) {
-        titleElement = text(name);
-    } else {
-        titleElement = createElement ("a", null, {
-            href: window.location.pathname + "/" + id
-        });
-        titleElement.appendChild(text(name));
-    }
-    
-    parent.appendChild( td( null, null, [ text( id ) ] ) );
-    parent.appendChild( td( null, null, [ inputElement, text(" "), 
titleElement ] ) );
-    parent.appendChild( td( null, null, [ text( dataEntry.version ) ] ) );
-    parent.appendChild( td( null, null, [ text( dataEntry.symbolicName ) ] ) );
-    parent.appendChild( td( null, null, [ text( state ) ] ) );
-    var actionsTd = td( null, null );
-    var div = createElement('ul', 'icons ui-widget');
-    actionsTd.appendChild(div);
-    
-    for ( var a in dataEntry.actions ) {
-        actionButton( div, id, dataEntry.actions[a] );
-    }
-    parent.appendChild( actionsTd );
+function entry( /* Object */ bundle, filter ) {
+       var matches = !(filter && typeof filter.test == 'function') ? true :
+               filter.test(bundle.id) || filter.test(bundle.name) || 
filter.test(bundle.symbolicName) || filter.test(bundle.version);
+
+       if (matches) entryInternal( bundle ).appendTo(bundlesBody);
+}
+
+function hasStart(b) { return (!b.fragment) && (b.stateRaw == 2 || b.stateRaw 
== 4) } // !isFragment && (installed | resolved)
+function hasStop(b)  { return (!b.fragment) && (b.stateRaw == 32) } // 
!isFragment && active
+function hasUninstall(b)  { return b.stateRaw == 2 || b.stateRaw == 4 || 
b.stateRaw == 32 } // installed | resolved | active
+function stateString(b) {
+       var s = b.stateRaw;
+       return  b.fragment && s == 4 ? 
+               i18n.state.fragment : // fragment & resolved
+               i18n.state[s] ? i18n.state[s] : i18n.state.unknown.msgFormat(s)
+}
+
+function entryInternal( /* Object */ bundle ) {
+       var tr = bundlesTemplate.clone();
+    var id = bundle.id;
+    var name = bundle.name;
+
+       tr.attr('id', 'entry'+id);
+       tr.find('td:eq(0)').text(id);
+       tr.find('td:eq(1) span:eq(0)').attr('id', 'img'+id).click(function() 
{showDetails(id)});
+       tr.find('td:eq(1) span:eq(1)').html( drawDetails ? name : '<a href="' + 
pluginRoot + '/' + id + '">' + name + '</a>' );
+       tr.find('td:eq(2)').text( bundle.version );
+       tr.find('td:eq(3)').text( bundle.symbolicName );
+       tr.find('td:eq(4)').text( stateString(bundle) );
+       if (id == 0) { // system bundle has no actions
+               tr.find('td:eq(5) ul').addClass('ui-helper-hidden');
+       } else {
+               var start   = tr.find('td:eq(5) ul li:eq(0)');
+               var stop    = tr.find('td:eq(5) ul li:eq(1)');
+               var refresh = tr.find('td:eq(5) ul li:eq(2)').click(function() 
{changeDataEntryState(id, 'refresh')});
+               var update  = tr.find('td:eq(5) ul li:eq(3)').click(function() 
{changeDataEntryState(id, 'update')});
+               var remove  = tr.find('td:eq(5) ul li:eq(4)');
+               start = hasStart(bundle) ?
+                       start.click(function() {changeDataEntryState(id, 
'start')}) :
+                       start.addClass('ui-helper-hidden');
+               stop = hasStop(bundle) ?
+                       stop.click(function() {changeDataEntryState(id, 
'stop')}) :
+                       stop.addClass('ui-helper-hidden');
+               remove = hasUninstall(bundle) ?
+                       remove.click(function() {changeDataEntryState(id, 
'uninstall')}) :
+                       remove.addClass('ui-helper-hidden');
+       }
+       return tr;
 }
 
 function loadData() {
-    $.get(pluginRoot + "/.json", null, function(data) {
-        renderData(data);
-    }, "json"); 
+    $.get(pluginRoot + "/.json", null, renderData, "json"); 
 }
 
 function changeDataEntryState(/* long */ id, /* String */ action) {
-    $.post(pluginRoot + "/" + id, {"action":action}, function(data) {
-        renderData(data);
-    }, "json"); 
+    $.post(pluginRoot + "/" + id, {"action":action}, renderData, "json"); 
 }
 
 function refreshPackages() {
-    $.post(window.location.pathname, {"action": "refreshPackages"}, 
function(data) {
-        renderData(data);
-    }, "json"); 
+    $.post(pluginRoot, {"action": "refreshPackages"}, renderData, "json"); 
 }
 
 function showDetails( id ) {
@@ -196,18 +174,47 @@ function renderDetails( data ) {
     }
 }
 
+
 $(document).ready(function(){
-       $(".refreshPackages").click(refreshPackages);
-       $(".reloadButton").click(loadData);
-       $(".installButton").click(function() {
-               document.location = pluginRoot + "/upload";
+       $('.refreshPackages').click(refreshPackages);
+       $('.reloadButton').click(loadData);
+       $('.installButton').click(function() {
+               uploadDialog.dialog('open');
+               return false;
+       });
+
+       // filter
+       $('input.filter').click(function() {$(this).val('')});
+       $('.filterApply').click(function() {
+               var el = $(this).parent().find('input.filter');
+               var filter = el.length && el.val() ? new RegExp(el.val()) : 
false;
+               renderData(lastBundleData, filter);
+       });
+       $('.filterForm').submit(function() {
+               $(this).find('.filterApply').click();
+               return false;
+       });
+       $('.filterClear').click(function() {
+               $('input.filter').val('');
+               renderData(lastBundleData);
+       });
+
+       // upload dialog
+       var uploadDialogButtons = {};
+       uploadDialogButtons[i18n.install_update] = function() {
+               $(this).find('form').submit();
+       }
+       uploadDialog = $('#uploadDialog').dialog({
+               autoOpen: false,
+               modal   : true,
+               width   : '50%',
+               buttons : uploadDialogButtons
        });
-       renderData(__bundles__);
 
        // check for cookie
        var cv = $.cookies.get("webconsolebundlelist");
        var lo = (cv ? cv.split(",") : [1,0]);
-       $("#plugin_table").tablesorter({
+       bundlesTable = $("#plugin_table").tablesorter({
                headers: {
                        0: { sorter:"digit" },
                        5: { sorter: false }
@@ -215,8 +222,12 @@ $(document).ready(function(){
                textExtraction:mixedLinksExtraction,
                sortList: cv ? [lo] : false
        }).bind("sortEnd", function() {
-               var table = $("#plugin_table").eq(0).attr("config");
-               $.cookies.set("webconsolebundlelist", 
table.sortList.toString());
+               bundlesTable.eq(0).attr("config");
+               $.cookies.set("webconsolebundlelist", 
bundlesTable.sortList.toString());
        });
+       bundlesBody     = bundlesTable.find('tbody');
+       bundlesTemplate = bundlesBody.find('tr').clone();
+
+       renderData(lastBundleData);
 });
 

Modified: felix/trunk/webconsole/src/main/resources/templates/bundles.html
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/resources/templates/bundles.html?rev=924190&r1=924189&r2=924190&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/resources/templates/bundles.html [UTF-8] 
(original)
+++ felix/trunk/webconsole/src/main/resources/templates/bundles.html [UTF-8] 
Wed Mar 17 08:13:39 2010
@@ -1,10 +1,11 @@
-<script type="text/javascript" src="${appRoot}/res/ui/bundles.js"></script>
+<script type="text/javascript" 
src="${appRoot}/res/lib/jquery.multifile-1.4.6.js"></script>
+<script type="text/javascript" src="${appRoot}/res/ui/bundles.js"></script>
 <script type="text/javascript">
 // <![CDATA[
 var startLevel = ${startLevel};
 var drawDetails = ${drawDetails};
 var currentBundle = ${currentBundle};
-var __bundles__ = ${__bundles__};
+var lastBundleData = ${__bundles__};
 var i18n = {
        'Symbolic Name'       : '${bundles.name.symb}',
        'Version'             : '${version}',
@@ -30,7 +31,18 @@ var i18n = {
        'Uninstall'           : '${bundles.uninstall}',
        'Refresh Package Imports' : '${bundles.refreshImports}',
        //
-       statline              : '${bundles.statline}'
+       statline              : '${bundles.statline}',
+       install_update        : '${bundles.install_or_update}',
+       state                 : {
+               1  : '${bundles.state.1}', // uninstalled
+               2  : '${bundles.state.2}', // installed
+               4  : '${bundles.state.4}', // resolved
+               8  : '${bundles.state.8}', // starting
+               16 : '${bundles.state.16}', // stopping
+               32 : '${bundles.state.32}', // active
+               'unknown' : '${bundles.state.unknown}', // Unknown State: {0}
+               'fragment' : '${bundles.state.fragment}' // Fragment
+       }
 }
 // ]]>
 </script>
@@ -39,16 +51,16 @@ var i18n = {
 <p class="statline">&nbsp;</p>
 
 <!-- top header -->
-<form method="post" enctype="multipart/form-data" action="">
+<form method="post" enctype="multipart/form-data" action="" class="filterForm">
        <div class="ui-widget-header ui-corner-top buttonGroup">
-               <input name="action" value="install" type="hidden" />
-               <input name="bundlestart" value="start" type="hidden" />
-               <input name="bundlestartlevel" value="5" type="hidden" />
-               <input name="bundlefile" style="margin-left: 10px;" type="file" 
/>
-               <input value="${bundles.install_or_update}" style="margin-left: 
10px;" type="submit" />
-               <button class="reloadButton" type="button" name="reload" 
style="margin-left: 60px;">${reload}</button>
-               <button class="installButton" type="button" 
name="install">${bundles.install_update}</button>
-               <button class="refreshPackages" type="button" 
name="refresh">${bundles.refreshPkg}</button>
+               <div class="filterBox">
+                       <input class="filter" value="^Apache" 
title="${bundles.filter.help}" />
+                       <button class="filterApply" 
type="button">${bundles.filter.apply}</button>
+                       <button class="filterClear" 
type="button">${bundles.filter.clear}</button>
+               </div>
+               <button class="reloadButton" type="button" style="margin-left: 
60px;">${reload}</button>
+               <button class="installButton" 
type="button">${bundles.install_update}</button>
+               <button class="refreshPackages" 
type="button">${bundles.refreshPkg}</button>
        </div>
 </form>
 
@@ -64,23 +76,65 @@ var i18n = {
                </tr>
        </thead>
        <tbody>
-               <tr><td colspan="6">&nbsp;</td></tr>
+               <tr><!-- template -->
+                       <td>&nbsp;</td><!-- ID -->
+                       <td>
+                               <span class="ui-icon ui-icon-triangle-1-e" 
style="display: inline-block" title="Show Details">&nbsp;</span>
+                               <span>&nbsp;</span> <!-- here goest bundle 
name/link -->
+                       </td>
+                       <td>&nbsp;</td><!-- version -->
+                       <td>&nbsp;</td><!-- symbolic name -->
+                       <td>&nbsp;</td><!-- status -->
+                       <td><!-- actions -->
+                               <ul class="icons ui-widget">
+                                       <li class="dynhover" 
title="${start}"><span class="ui-icon ui-icon-play">&nbsp;</span></li>
+                                       <li class="dynhover" 
title="${stop}"><span class="ui-icon ui-icon-stop">&nbsp;</span></li>
+                                       <li class="dynhover" 
title="${bundles.refreshImports}"><span class="ui-icon 
ui-icon-refresh">&nbsp;</span></li>
+                                       <li class="dynhover" 
title="${bundles.update}"><span class="ui-icon 
ui-icon-transferthick-e-w">&nbsp;</span></li>
+                                       <li class="dynhover" 
title="${bundles.uninstall}"><span class="ui-icon 
ui-icon-trash">&nbsp;</span></li>
+                               </ul>
+                       </td>
+               </tr>
        </tbody>
 </table>
 
 <!-- bottom header -->
-<form method="post" enctype="multipart/form-data" action="">
+<form method="post" enctype="multipart/form-data" action="" class="filterForm">
        <div class="ui-widget-header ui-corner-bottom buttonGroup">
-               <input name="action" value="install" type="hidden" />
-               <input name="bundlestart" value="start" type="hidden" />
-               <input name="bundlestartlevel" value="5" type="hidden" />
-               <input name="bundlefile" style="margin-left: 10px;" type="file" 
/>
-               <input value="${bundles.install_or_update}" style="margin-left: 
10px;" type="submit" />
-               <button class="reloadButton" type="button" name="reload" 
style="margin-left: 60px;">${reload}</button>
-               <button class="installButton" type="button" 
name="install">${bundles.install_update}</button>
-               <button class="refreshPackages" type="button" 
name="refresh">${bundles.refreshPkg}</button>
+               <div class="filterBox">
+                       <input class="filter" value="^Apache" 
title="${bundles.filter.help}" />
+                       <button class="filterApply" 
type="button">${bundles.filter.apply}</button>
+                       <button class="filterClear" 
type="button">${bundles.filter.clear}</button>
+               </div>
+               <button class="reloadButton" type="button" style="margin-left: 
60px;">${reload}</button>
+               <button class="installButton" 
type="button">${bundles.install_update}</button>
+               <button class="refreshPackages" 
type="button">${bundles.refreshPkg}</button>
        </div>
 </form>
 
 <!-- status line -->
 <p class="statline">&nbsp;</p>
+
+<div id="uploadDialog" class="ui-helper-hidden" 
title="${bundles.upload.caption}">
+       <form method="post" enctype="multipart/form-data" 
action="${pluginRoot}">
+       <table class="nicetable">
+               <tr>
+                       <td 
style="text-align:right">${bundles.upload.start}</td>
+                       <td>
+                               <input type="hidden" name="action" 
value="install"/>
+                               <input type="checkbox" name="bundlestart" 
value="start"/>
+                       </td>
+               </tr>
+               <tr>
+                       <td 
style="text-align:right">${bundles.upload.level}</td>
+                       <td><input type="text" name="bundlestartlevel" 
id="bundlestartlevel" value="${startLevel}" size="4"/></td>
+               </tr>
+               <tr>
+                       <td>&nbsp;</td>
+                       <td>
+                               <input class="multi" accept="jar" type="file" 
name="bundlefile" />
+                       </td>
+               </tr>
+       </table>
+       </form>
+</div>


Reply via email to