karaf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ldywi...@apache.org
Subject svn commit: r1164838 - in /karaf/sandbox/webconsole/trunk: core/src/main/java/org/apache/karaf/webconsole/core/internal/ core/src/main/java/org/apache/karaf/webconsole/core/navigation/ core/src/main/java/org/apache/karaf/webconsole/core/page/ core/src/...
Date Sat, 03 Sep 2011 09:10:29 GMT
Author: ldywicki
Date: Sat Sep  3 09:10:29 2011
New Revision: 1164838

URL: http://svn.apache.org/viewvc?rev=1164838&view=rev
Log:
Refactor sidebar, now it uses SidebarProvider which may be injected and use dynamic resources
from other bundles.

Added:
    karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
    karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
    karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
    karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java
    karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/
    karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
    karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/
    karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
    karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java
      - copied, changed from r1164539, karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
    karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/
    karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
Modified:
    karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java
    karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
    karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/security/JaasWebSession.java
    karaf/sandbox/webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html
    karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java
    karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java
    karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java
    karaf/sandbox/webconsole/trunk/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml
    karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/OsgiPage.java
    karaf/sandbox/webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
    karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
    karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
    karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/navigation/ServiceMixConsoleTabProvider.java
    karaf/sandbox/webconsole/trunk/servicemix/src/main/resources/OSGI-INF/blueprint/servicemix.xml

Modified: karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java
(original)
+++ karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/internal/SidebarPanel.java
Sat Sep  3 09:10:29 2011
@@ -16,28 +16,32 @@
  */
 package org.apache.karaf.webconsole.core.internal;
 
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
 import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.util.ListModel;
 
 public class SidebarPanel extends Panel {
 
-    public SidebarPanel(String id, Class<? extends Page> basePage, ListModel<Class<?
extends Page>> listModel) {
-        super(id, listModel);
+    public SidebarPanel(String id, SidebarProvider provider) {
+        super(id);
 
-        add(new BookmarkablePageLink<Page>("masterPageLink", basePage).add(new Label("masterPageLabel",
basePage.getSimpleName())));
+        add(provider.getMasterPageLink("masterPageLink", "masterPageLabel"));
 
-        add(new ListView<Class<? extends Page>>("subPageLinks", listModel) {
+        add(new ListView<Link<Page>>("subPageLinks", provider.getItems("subPageLink",
"subPageLabel")) {
             @Override
-            protected void populateItem(ListItem<Class<? extends Page>> item)
{
-                Class<? extends Page> page = item.getModelObject();
-                BookmarkablePageLink<Page> link = new BookmarkablePageLink<Page>("subPageLink",
page);
-                link.add(new Label("subPageLabel", page.getSimpleName()));
-                item.add(link);
+            protected void populateItem(ListItem<Link<Page>> item) {
+                item.add(item.getModelObject());
+            }
+        });
+
+        add(new ListView<WidgetProvider>("widgets", provider.getWidgetProviders())
{
+            @Override
+            protected void populateItem(ListItem<WidgetProvider> item) {
+                item.add(item.getModelObject().getWidgetPanel("widget"));
             }
         });
     }

Added: karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
(added)
+++ karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/ExtendableSidebarProvider.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,50 @@
+package org.apache.karaf.webconsole.core.navigation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+public class ExtendableSidebarProvider implements SidebarProvider {
+
+    private Collection<NavigationProvider> navigationProviders;
+    private Collection<WidgetProvider> widgetProviders;
+    private SidebarProvider base;
+
+    public ExtendableSidebarProvider(SidebarProvider base) {
+        this.base = base;
+    }
+
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        // create new list because instance returned from base provider may be read only..
+        List<Link<Page>> items = new ArrayList<Link<Page>>(base.getItems(componentId,
labelId));
+
+        for (NavigationProvider provider : navigationProviders) {
+            items.addAll(provider.getItems(componentId, labelId));
+        }
+
+        return items;
+    }
+
+    public Link<Page> getMasterPageLink(String linkId, String labelId) {
+        return base.getMasterPageLink(linkId, labelId);
+    }
+
+    public List<WidgetProvider> getWidgetProviders() {
+        List<WidgetProvider> list = new ArrayList<WidgetProvider>(base.getWidgetProviders());
+        list.addAll(widgetProviders);
+        return list;
+    }
+
+    public void setNavigationProviders(Collection<NavigationProvider> navigationProviders)
{
+        this.navigationProviders = navigationProviders;
+    }
+
+
+    public void setWidgetProviders(Collection<WidgetProvider> widgetProviders) {
+        this.widgetProviders = widgetProviders;
+    }
+}

Added: karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
(added)
+++ karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/navigation/SidebarProvider.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,31 @@
+package org.apache.karaf.webconsole.core.navigation;
+
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+/**
+ * Sidebar provider is responsible for enriching sidebar, it have a master page
+ * link and set od widget providers.
+ */
+public interface SidebarProvider extends NavigationProvider {
+
+    /**
+     * Gets master page link - default page which should be on top of all.
+     * 
+     * @param linkId Link element id.
+     * @param labelId Label element id.
+     * @return Master page link.
+     */
+    Link<Page> getMasterPageLink(String linkId, String labelId);
+
+    /**
+     * Gets widget providers for given sidebar.
+     * 
+     * @return
+     */
+    List<WidgetProvider> getWidgetProviders();
+
+}

Modified: karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/page/SidebarPage.java
Sat Sep  3 09:10:29 2011
@@ -16,31 +16,31 @@
  */
 package org.apache.karaf.webconsole.core.page;
 
-import java.util.Collections;
-import java.util.List;
-
 import org.apache.karaf.webconsole.core.internal.SidebarPanel;
-import org.apache.wicket.Page;
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.util.ListModel;
 
+/**
+ * Page with sidebar on left side which may be used to place additiona links
+ * and widgets.
+ */
 public class SidebarPage extends SecuredPage {
 
     private Panel sidebar;
 
-    public SidebarPage() {
-        ListModel<Class<? extends Page>> listModel = new ListModel<Class<?
extends Page>>(getSubPages());
-
-        sidebar = new SidebarPanel("sidebar", getClass(), listModel);
-        add(sidebar);
+    protected void setSidebarProvider(SidebarProvider provider) {
+        if (sidebar == null) {
+            sidebar = new SidebarPanel("sidebar", provider);
+            add(sidebar);
+        }
     }
 
-    public Panel getSidebar() {
+    /**
+     * Sidebar accessor for child pages.
+     * @return
+     */
+    protected final Panel getSidebar() {
         return sidebar;
     }
 
-    protected List<Class<? extends Page>> getSubPages() {
-        return Collections.emptyList();
-    }
-
 }

Modified: karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/security/JaasWebSession.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/security/JaasWebSession.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/security/JaasWebSession.java
(original)
+++ karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/security/JaasWebSession.java
Sat Sep  3 09:10:29 2011
@@ -1,3 +1,19 @@
+/*
+ * 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.karaf.webconsole.core.security;
 
 import java.io.IOException;
@@ -15,11 +31,15 @@ import org.apache.karaf.jaas.modules.Rol
 import org.apache.wicket.Request;
 import org.apache.wicket.authentication.AuthenticatedWebSession;
 import org.apache.wicket.authorization.strategies.role.Roles;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+/**
+ * Authenticated web session which uses JAAS to authenticate user and obtain roles.
+ */
 public class JaasWebSession extends AuthenticatedWebSession {
-    public static final String ROLES_GROUP_NAME = "ROLES";
 
-    public static final String ROLES_PREFIX = "ROLE_";
+    private Logger logger = LoggerFactory.getLogger(JaasWebSession.class);
 
     public static final String APPLICATION_POLICY_NAME = "karaf";
 
@@ -39,18 +59,19 @@ public class JaasWebSession extends Auth
             authenticated = true;
 
             for (Principal p : ctx.getSubject().getPrincipals()) {
-                if (p instanceof RolePrincipal) {
+                if (isRole(p)) {
                     roles.add(p.getName());
                 }
             }
         } catch (LoginException e) {
+            logger.error("Unable to complete JAAS login operation", e);
             authenticated = false;
         }
         return authenticated;
     }
 
     protected boolean isRole(Principal p) {
-        return p.getName().startsWith(ROLES_PREFIX);
+        return p instanceof RolePrincipal;
     }
 
     public Roles getRoles() {

Added: karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
(added)
+++ karaf/sandbox/webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/LinkUtils.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,31 @@
+package org.apache.karaf.webconsole.core.util;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.Link;
+
+/**
+ * Utility class to create links.
+ */
+public abstract class LinkUtils {
+
+    /**
+     * Creates new bookmarkable page link to given page class.
+     * 
+     * @param <T> Type of page.
+     * 
+     * @param linkId Link element id.
+     * @param labelId Inner link element label.
+     * @param label Text label.
+     * @param page Page class to link.
+     * @return Bookmarkable link.
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public static <T extends Page> Link<Page> createPageLink(String linkId, String
labelId, String label, Class<T> page) {
+        Link link = new BookmarkablePageLink<T>(linkId, page);
+        link.add(new Label(labelId, label));
+        return link;
+    }
+
+}

Modified: karaf/sandbox/webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html
(original)
+++ karaf/sandbox/webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/internal/SidebarPanel.html
Sat Sep  3 09:10:29 2011
@@ -39,6 +39,14 @@
                 </ul>
             </li>
         </ul>
+
+        <ul>
+            <li wicket:id="widgets">
+                <div wicket:id="widget">
+                    Widget...
+                </div>
+            </li>
+        </ul>
     </wicket:panel>
 
 </body>

Added: karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java
(added)
+++ karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,20 @@
+package org.apache.karaf.webconsole.karaf.internal;
+
+import org.apache.karaf.features.FeaturesService;
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
+import org.apache.karaf.webconsole.core.page.SidebarPage;
+import org.ops4j.pax.wicket.api.PaxWicketBean;
+
+public class KarafFeaturesPage extends SidebarPage {
+
+    @PaxWicketBean(name = "featuresService")
+    protected FeaturesService featuresService;
+
+    @PaxWicketBean(name = "featuresSidebar")
+    protected SidebarProvider featuresSidebar;
+
+    public KarafFeaturesPage() {
+        setSidebarProvider(featuresSidebar);
+    }
+
+}

Modified: karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java
Sat Sep  3 09:10:29 2011
@@ -22,10 +22,9 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.karaf.features.Feature;
-import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Repository;
-import org.apache.karaf.webconsole.core.page.SinglePage;
 import org.apache.karaf.webconsole.karaf.internal.FeaturesProvider;
+import org.apache.karaf.webconsole.karaf.internal.KarafFeaturesPage;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
@@ -38,17 +37,13 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.model.StringResourceModel;
-import org.ops4j.pax.wicket.api.PaxWicketBean;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
 /**
  * Features
  */
 @PaxWicketMountPoint(mountPoint = "/karaf/features")
-public class FeaturesPage extends SinglePage {
-
-    @PaxWicketBean(name = "featuresService")
-    private FeaturesService featuresService;
+public class FeaturesPage extends KarafFeaturesPage {
 
     private Map<String, String> feature2repo = new HashMap<String, String>();
 

Modified: karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java
Sat Sep  3 09:10:29 2011
@@ -16,16 +16,14 @@
  */
 package org.apache.karaf.webconsole.karaf.internal.repository;
 
-import org.apache.karaf.webconsole.core.page.SidebarPage;
+import org.apache.karaf.webconsole.karaf.internal.KarafFeaturesPage;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
 @PaxWicketMountPoint(mountPoint = "/karaf/repositories/add")
-public class AddRepositoryPage extends SidebarPage {
+public class AddRepositoryPage extends KarafFeaturesPage {
 
     public AddRepositoryPage() {
-
         add(new AddRepositoryForm("add"));
-
     }
 
 }

Modified: karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java
Sat Sep  3 09:10:29 2011
@@ -23,6 +23,7 @@ import org.apache.karaf.features.Feature
 import org.apache.karaf.features.Repository;
 import org.apache.karaf.webconsole.core.page.SidebarPage;
 import org.apache.karaf.webconsole.core.table.OrdinalColumn;
+import org.apache.karaf.webconsole.karaf.internal.KarafFeaturesPage;
 import org.apache.karaf.webconsole.karaf.internal.RepositoriesProvider;
 import org.apache.wicket.Page;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
@@ -37,10 +38,7 @@ import org.ops4j.pax.wicket.api.PaxWicke
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
 @PaxWicketMountPoint(mountPoint = "/karaf/repositories")
-public class RepositoriesPage extends SidebarPage {
-
-    @PaxWicketBean(name = "featuresService")
-    private FeaturesService featuresService;
+public class RepositoriesPage extends KarafFeaturesPage {
 
     public RepositoriesPage() {
         IColumn[] columns = new IColumn[] {
@@ -58,11 +56,4 @@ public class RepositoriesPage extends Si
         add(new DefaultDataTable<Repository>("repositories", columns, new RepositoriesProvider(featuresService),
20));
     }
 
-    @Override
-    protected List<Class<? extends Page>> getSubPages() {
-        List<Class<? extends Page>> list = new ArrayList<Class<? extends
Page>>();
-        list.add(AddRepositoryPage.class);
-        return list;
-    }
-
 }

Added: karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
(added)
+++ karaf/sandbox/webconsole/trunk/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,34 @@
+package org.apache.karaf.webconsole.karaf.internal.sidebar;
+
+import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
+import org.apache.karaf.webconsole.karaf.internal.feature.FeaturesPage;
+import org.apache.karaf.webconsole.karaf.internal.repository.AddRepositoryPage;
+import org.apache.karaf.webconsole.karaf.internal.repository.RepositoriesPage;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+public class KarafFeaturesSidebar implements SidebarProvider {
+
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        return Arrays.asList(
+            createPageLink(componentId, labelId, "Repositories", RepositoriesPage.class),
+            createPageLink(componentId, labelId, "Add repository", AddRepositoryPage.class)
+        );
+    }
+
+    public Link<Page> getMasterPageLink(String linkId, String labelId) {
+        return createPageLink(linkId, labelId, "Features", FeaturesPage.class);
+    }
+
+    public List<WidgetProvider> getWidgetProviders() {
+        return Collections.emptyList();
+    }
+
+}

Modified: karaf/sandbox/webconsole/trunk/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml (original)
+++ karaf/sandbox/webconsole/trunk/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml Sat
Sep  3 09:10:29 2011
@@ -33,4 +33,6 @@
         <argument ref="featuresService" />
     </bean>
 
+    <bean id="featuresSidebar" class="org.apache.karaf.webconsole.karaf.internal.sidebar.KarafFeaturesSidebar"
/>
+
 </blueprint>

Modified: karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/OsgiPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/OsgiPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/OsgiPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/OsgiPage.java
Sat Sep  3 09:10:29 2011
@@ -16,27 +16,21 @@
  */
 package org.apache.karaf.webconsole.osgi.internal;
 
-import java.util.LinkedList;
-import java.util.List;
-
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
 import org.apache.karaf.webconsole.core.page.SidebarPage;
-import org.apache.karaf.webconsole.osgi.internal.configuration.ConfigurationsPage;
-import org.apache.karaf.webconsole.osgi.internal.event.EventsPage;
-import org.apache.wicket.Page;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 import org.osgi.framework.BundleContext;
 
 public abstract class OsgiPage extends SidebarPage {
 
+    @PaxWicketBean(name = "osgiSidebar")
+    private SidebarProvider provider;
+
     @PaxWicketBean(name = "blueprintBundleContext")
     protected BundleContext context;
 
-    @Override
-    protected List<Class<? extends Page>> getSubPages() {
-        List<Class<? extends Page>> subpages = new LinkedList<Class<? extends
Page>>();
-        subpages.add(ConfigurationsPage.class);
-        subpages.add(EventsPage.class);
-        return subpages;
+    protected OsgiPage() {
+        setSidebarProvider(provider);
     }
 
 }

Added: karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
(added)
+++ karaf/sandbox/webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/sidebar/OsgiSidebar.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,34 @@
+package org.apache.karaf.webconsole.osgi.internal.sidebar;
+
+import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
+import org.apache.karaf.webconsole.osgi.internal.bundle.BundlesPage;
+import org.apache.karaf.webconsole.osgi.internal.configuration.ConfigurationsPage;
+import org.apache.karaf.webconsole.osgi.internal.event.EventsPage;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+public class OsgiSidebar implements SidebarProvider {
+
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        return Arrays.asList(
+            createPageLink(componentId, labelId, "Configuration", ConfigurationsPage.class),
+            createPageLink(componentId, labelId, "Events", EventsPage.class)
+        );
+    }
+
+    public Link<Page> getMasterPageLink(String linkId, String labelId) {
+        return createPageLink(linkId, labelId, "Bundles", BundlesPage.class);
+    }
+
+    public List<WidgetProvider> getWidgetProviders() {
+        return Collections.emptyList();
+    }
+
+}

Modified: karaf/sandbox/webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml (original)
+++ karaf/sandbox/webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml Sat
Sep  3 09:10:29 2011
@@ -44,6 +44,8 @@
         <argument ref="blueprintBundleContext" />
     </bean>
 
+    <bean id="osgiSidebar" class="org.apache.karaf.webconsole.osgi.internal.sidebar.OsgiSidebar"
/>
+
     <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"
availability="optional" />
     <reference id="startLevel" interface="org.osgi.service.startlevel.StartLevel" />
     <reference id="packageAdmin" interface="org.osgi.service.packageadmin.PackageAdmin"
/>

Copied: karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java
(from r1164539, karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java)
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java?p2=karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java&p1=karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java&r1=1164539&r2=1164838&rev=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/EndpointsPage.java
Sat Sep  3 09:10:29 2011
@@ -22,6 +22,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
 import org.apache.karaf.webconsole.core.page.SidebarPage;
 import org.apache.karaf.webconsole.core.table.OrdinalColumn;
 import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
@@ -40,12 +41,9 @@ import org.ops4j.pax.wicket.api.PaxWicke
 /**
  * ServiceMix page, it shows list of registered endpoints.
  */
-public class ServiceMixPage extends SidebarPage {
+public class EndpointsPage extends ServiceMixPage {
 
-    @PaxWicketBean(name = "nmr")
-    private NMR nmr;
-
-    public ServiceMixPage() {
+    public EndpointsPage() {
         IColumn[] columns = new IColumn[] {
             new OrdinalColumn<Map<String, Object>>(),
             new PropertyColumnExt<Map<String, Object>>("Name", Endpoint.NAME),
@@ -83,9 +81,4 @@ public class ServiceMixPage extends Side
         add(new DefaultDataTable<Map<String, Object>>("endpoints", columns, provider,
20));
     }
 
-    @Override
-    protected List<Class<? extends Page>> getSubPages() {
-        Class<? extends Page>[] pages = new Class[] {TrackNmrPage.class};
-        return Arrays.asList(pages);
-    }
 }

Modified: karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/ServiceMixPage.java
Sat Sep  3 09:10:29 2011
@@ -1,91 +1,19 @@
-/*
- * 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.karaf.webconsole.servicemix.internal;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
 import org.apache.karaf.webconsole.core.page.SidebarPage;
-import org.apache.karaf.webconsole.core.table.OrdinalColumn;
-import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
-import org.apache.servicemix.nmr.api.Endpoint;
-import org.apache.servicemix.nmr.api.EndpointRegistry;
 import org.apache.servicemix.nmr.api.NMR;
-import org.apache.wicket.Page;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
-import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
-/**
- * ServiceMix page, it shows list of registered endpoints.
- */
 public class ServiceMixPage extends SidebarPage {
 
     @PaxWicketBean(name = "nmr")
-    private NMR nmr;
-
-    public ServiceMixPage() {
-        IColumn[] columns = new IColumn[] {
-            new OrdinalColumn<Map<String, Object>>(),
-            new PropertyColumnExt<Map<String, Object>>("Name", Endpoint.NAME),
-            new PropertyColumnExt<Map<String, Object>>("Version", Endpoint.VERSION),
-            new PropertyColumnExt<Map<String, Object>>("Endpoint Name", Endpoint.ENDPOINT_NAME),
-            new PropertyColumnExt<Map<String, Object>>("Interface", Endpoint.INTERFACE_NAME),
-            new PropertyColumnExt<Map<String, Object>>("Service name", Endpoint.SERVICE_NAME),
-            new PropertyColumnExt<Map<String, Object>>("Sync?", Endpoint.CHANNEL_SYNC_DELIVERY),
-            new PropertyColumnExt<Map<String, Object>>("Untargetable?", Endpoint.UNTARGETABLE),
-            new PropertyColumnExt<Map<String, Object>>("Wsdl url", Endpoint.WSDL_URL)
-        };
-
-        ISortableDataProvider<Map<String, Object>> provider = new SortableDataProvider<Map<String,
Object>>() {
-
-            public Iterator<? extends Map<String, Object>> iterator(int first,
int count) {
-                List<Map<String, Object>> props = new ArrayList<Map<String,Object>>();
-
-                EndpointRegistry endpointRegistry = nmr.getEndpointRegistry();
-                for (Endpoint endpoint : endpointRegistry.getServices()) {
-                    props.add((Map<String, Object>) endpointRegistry.getProperties(endpoint));
-                }
+    protected NMR nmr;
 
-                return props.subList(first, count).iterator();
-            }
+    @PaxWicketBean(name = "smxSidebar")
+    private SidebarProvider provider;
 
-            public int size() {
-                return nmr.getEndpointRegistry().getServices().size();
-            }
-
-            public IModel<Map<String, Object>> model(Map<String, Object>
object) {
-                return Model.ofMap(object);
-            }
-        };
-
-        add(new DefaultDataTable<Map<String, Object>>("endpoints", columns, provider,
20));
-    }
-
-    @Override
-    protected List<Class<? extends Page>> getSubPages() {
-        Class<? extends Page>[] pages = new Class[] {TrackNmrPage.class};
-        return Arrays.asList(pages);
+    public ServiceMixPage() {
+        setSidebarProvider(provider);
     }
 }

Modified: karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
(original)
+++ karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/TrackNmrPage.java
Sat Sep  3 09:10:29 2011
@@ -36,7 +36,7 @@ import org.ops4j.pax.wicket.api.PaxWicke
 /**
  * Page which shows list of last exchanges. 
  */
-public class TrackNmrPage extends SidebarPage {
+public class TrackNmrPage extends ServiceMixPage {
 
     @PaxWicketBean(name = "tracker")
     private ITrackingExchangeListener listener;

Modified: karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/navigation/ServiceMixConsoleTabProvider.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/navigation/ServiceMixConsoleTabProvider.java?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/navigation/ServiceMixConsoleTabProvider.java
(original)
+++ karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/navigation/ServiceMixConsoleTabProvider.java
Sat Sep  3 09:10:29 2011
@@ -20,7 +20,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider;
-import org.apache.karaf.webconsole.servicemix.internal.ServiceMixPage;
+import org.apache.karaf.webconsole.servicemix.internal.EndpointsPage;
 import org.apache.karaf.webconsole.servicemix.internal.TrackNmrPage;
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.basic.Label;
@@ -42,7 +42,7 @@ public class ServiceMixConsoleTabProvide
     }
 
     public Link<Page> getModuleLink(String componentId, String labelId) {
-        Link<Page> link = new BookmarkablePageLink<Page>(componentId, ServiceMixPage.class);
+        Link<Page> link = new BookmarkablePageLink<Page>(componentId, EndpointsPage.class);
         link.add(new Label(labelId, "ServiceMix"));
         return link;
     }

Added: karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java?rev=1164838&view=auto
==============================================================================
--- karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
(added)
+++ karaf/sandbox/webconsole/trunk/servicemix/src/main/java/org/apache/karaf/webconsole/servicemix/internal/sidebar/ServicemixSidebar.java
Sat Sep  3 09:10:29 2011
@@ -0,0 +1,33 @@
+package org.apache.karaf.webconsole.servicemix.internal.sidebar;
+
+import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
+import org.apache.karaf.webconsole.servicemix.internal.EndpointsPage;
+import org.apache.karaf.webconsole.servicemix.internal.TrackNmrPage;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+
+public class ServicemixSidebar implements SidebarProvider {
+
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        return Arrays.asList(
+            createPageLink(componentId, labelId, "Exchanges", TrackNmrPage.class)
+        );
+    }
+
+    public Link<Page> getMasterPageLink(String linkId, String labelId) {
+        return createPageLink(linkId, labelId, "Endpoints", EndpointsPage.class);
+    }
+
+    public List<WidgetProvider> getWidgetProviders() {
+        return Collections.emptyList();
+    }
+
+}

Modified: karaf/sandbox/webconsole/trunk/servicemix/src/main/resources/OSGI-INF/blueprint/servicemix.xml
URL: http://svn.apache.org/viewvc/karaf/sandbox/webconsole/trunk/servicemix/src/main/resources/OSGI-INF/blueprint/servicemix.xml?rev=1164838&r1=1164837&r2=1164838&view=diff
==============================================================================
--- karaf/sandbox/webconsole/trunk/servicemix/src/main/resources/OSGI-INF/blueprint/servicemix.xml
(original)
+++ karaf/sandbox/webconsole/trunk/servicemix/src/main/resources/OSGI-INF/blueprint/servicemix.xml
Sat Sep  3 09:10:29 2011
@@ -32,6 +32,8 @@
 
     <reference id="nmr" interface="org.apache.servicemix.nmr.api.NMR"/>
 
+    <bean id="smxSidebar" class="org.apache.karaf.webconsole.servicemix.internal.sidebar.ServicemixSidebar"
/>
+
     <!--
     <service ref="widgetProvider" interface="org.apache.karaf.webconsole.core.widget.WidgetProvider">
         <service-properties>



Mime
View raw message