You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ld...@apache.org on 2012/02/20 08:41:10 UTC

svn commit: r1291139 [2/2] - in /karaf/webconsole/trunk/osgi: blueprint/src/main/java/org/apache/karaf/webconsole/osgi/blueprint/details/ blueprint/src/main/resources/org/apache/karaf/webconsole/osgi/blueprint/ blueprint/src/main/resources/org/apache/k...

Added: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ImportServiceTable.java Mon Feb 20 07:41:08 2012
@@ -0,0 +1,43 @@
+/*
+ * 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.osgi.core.service;
+
+import org.apache.karaf.webconsole.osgi.core.service.column.ObjectClassColumn;
+import org.apache.karaf.webconsole.osgi.core.service.column.ServicePropertyColumn;
+import org.apache.karaf.webconsole.osgi.core.service.column.ServiceProviderColumn;
+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.model.Model;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+
+public class ImportServiceTable extends DefaultDataTable<ServiceReference> {
+
+    private static final long serialVersionUID = 1L;
+
+    private static IColumn<ServiceReference>[] columns = new IColumn[] {
+        new ServicePropertyColumn("Service Id", Constants.SERVICE_ID),
+        new ObjectClassColumn(Model.of("Object classes")),
+        new ServiceProviderColumn(Model.of("Provider")),
+    };
+
+    public ImportServiceTable(String id, Bundle bundle) {
+        super(id, columns, new ImportServiceDataProvider(bundle), Integer.MAX_VALUE);
+    }
+
+}

Modified: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/ServiceDetailPage.java Mon Feb 20 07:41:08 2012
@@ -1,5 +1,59 @@
+/*
+ * 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.osgi.core.service;
 
-public class ServiceDetailPage {
+import org.apache.karaf.webconsole.osgi.core.shared.OsgiPage;
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.RepeatingView;
+import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Service details page.
+ */
+public class ServiceDetailPage extends OsgiPage {
+
+    public ServiceDetailPage(PageParameters parameters) {
+        long serviceId = parameters.getLong("id");
+
+        RepeatingView repeatingView = new RepeatingView("keys");
+        add(repeatingView);
+
+        String filter = "(" + Constants.SERVICE_ID + "=" + serviceId + ")";
+        try {
+            ServiceReference[] references = context.getServiceReferences(null, filter);
+
+            if (references != null && references.length == 1) {
+                ServiceReference reference = references[0];
+
+                for(String key : reference.getPropertyKeys()) {
+                    WebMarkupContainer container = new WebMarkupContainer(repeatingView.newChildId());
+                    container.add(new Label("key", key));
+                    container.add(new Label("value", reference.getProperty(key).toString()));
+                    repeatingView.add(container);
+                }
+            }
+        } catch (InvalidSyntaxException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
 
 }

Added: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassColumn.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassColumn.java?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassColumn.java (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassColumn.java Mon Feb 20 07:41:08 2012
@@ -0,0 +1,37 @@
+/*
+ * 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.osgi.core.service.column;
+
+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.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.osgi.framework.ServiceReference;
+
+public class ObjectClassColumn extends AbstractColumn<ServiceReference> {
+
+    private static final long serialVersionUID = 1L;
+
+    public ObjectClassColumn(IModel<String> displayModel) {
+        super(displayModel);
+    }
+
+    public void populateItem(Item<ICellPopulator<ServiceReference>> cellItem, String componentId, IModel<ServiceReference> rowModel) {
+        cellItem.add(new ObjectClassPanel(componentId, rowModel));
+    }
+
+}

Copied: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.java (from r1291138, karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/DecorationPanel.java)
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.java?p2=karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.java&p1=karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/DecorationPanel.java&r1=1291138&r2=1291139&rev=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/DecorationPanel.java (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.java Mon Feb 20 07:41:08 2012
@@ -14,44 +14,43 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.osgi.core.bundle.list;
+package org.apache.karaf.webconsole.osgi.core.service.column;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-import org.apache.karaf.webconsole.osgi.core.spi.IDecorationProvider;
-import org.apache.wicket.Component;
-import org.apache.wicket.markup.html.CSSPackageResource;
+import org.apache.wicket.markup.html.basic.Label;
 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.IModel;
-import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
 
-public class DecorationPanel extends Panel {
+public class ObjectClassPanel extends Panel {
 
     private static final long serialVersionUID = 1L;
 
-    public DecorationPanel(String id, IModel<Bundle> model, List<IDecorationProvider> decorationProviders) {
+    public ObjectClassPanel(String id, IModel<ServiceReference> model) {
         super(id, model);
 
-        add(CSSPackageResource.getHeaderContribution(DecorationPanel.class, "decoration.css"));
-
-        List<Component> components = new ArrayList<Component>();
-        for (IDecorationProvider provider : decorationProviders) {
-            Component decoration = provider.getDecoration("extension", model);
-            if (decoration != null) {
-                components.add(decoration);
-            }
+        Object property = model.getObject().getProperty(Constants.OBJECTCLASS);
+        List<String> objectClasses = new ArrayList<String>();
+        if (property instanceof String[]) {
+            Collections.addAll(objectClasses, (String[]) property);
+        } else {
+            objectClasses.add(property.toString());
         }
 
-        add(new ListView<Component>("extensions", components) {
+        add(new ListView<String>("objectClasses", objectClasses) {
+            private static final long serialVersionUID = 1L;
+
             @Override
-            protected void populateItem(ListItem<Component> item) {
-                item.add(item.getModelObject());
+            protected void populateItem(ListItem<String> item) {
+                item.add(new Label("objectClass", item.getModel()));
             }
         });
-
     }
 
 }

Added: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerColumn.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerColumn.java?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerColumn.java (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerColumn.java Mon Feb 20 07:41:08 2012
@@ -0,0 +1,38 @@
+/*
+ * 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.osgi.core.service.column;
+
+import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.osgi.framework.ServiceReference;
+
+public class ServiceConsumerColumn extends PropertyColumnExt<ServiceReference> {
+
+    private static final long serialVersionUID = 1L;
+
+    public ServiceConsumerColumn(String property) {
+        super(property);
+    }
+
+    @Override
+    public void populateItem(Item<ICellPopulator<ServiceReference>> item, String componentId, IModel<ServiceReference> rowModel) {
+        item.add(new ServiceConsumerPanel(componentId, rowModel));
+    }
+
+}

Copied: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.java (from r1291138, karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/DecorationPanel.java)
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.java?p2=karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.java&p1=karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/DecorationPanel.java&r1=1291138&r2=1291139&rev=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/bundle/list/DecorationPanel.java (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.java Mon Feb 20 07:41:08 2012
@@ -14,44 +14,44 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.osgi.core.bundle.list;
+package org.apache.karaf.webconsole.osgi.core.service.column;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
-import org.apache.karaf.webconsole.osgi.core.spi.IDecorationProvider;
-import org.apache.wicket.Component;
-import org.apache.wicket.markup.html.CSSPackageResource;
+import org.apache.karaf.webconsole.osgi.core.bundle.SingleBundlePage;
+import org.apache.wicket.markup.html.basic.Label;
+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.IModel;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
 
-public class DecorationPanel extends Panel {
+public class ServiceConsumerPanel extends Panel {
 
     private static final long serialVersionUID = 1L;
 
-    public DecorationPanel(String id, IModel<Bundle> model, List<IDecorationProvider> decorationProviders) {
+    public ServiceConsumerPanel(String id, IModel<ServiceReference> model) {
         super(id, model);
 
-        add(CSSPackageResource.getHeaderContribution(DecorationPanel.class, "decoration.css"));
-
-        List<Component> components = new ArrayList<Component>();
-        for (IDecorationProvider provider : decorationProviders) {
-            Component decoration = provider.getDecoration("extension", model);
-            if (decoration != null) {
-                components.add(decoration);
-            }
+        List<Bundle> consumers = new ArrayList<Bundle>();
+        Bundle[] usingBundles = model.getObject().getUsingBundles();
+        if (usingBundles != null && usingBundles.length > 0) {
+            Collections.addAll(consumers, usingBundles);
         }
+        add(new ListView<Bundle>("bundles", consumers) {
+            private static final long serialVersionUID = 1L;
 
-        add(new ListView<Component>("extensions", components) {
             @Override
-            protected void populateItem(ListItem<Component> item) {
-                item.add(item.getModelObject());
+            protected void populateItem(ListItem<Bundle> item) {
+                Link<SingleBundlePage> link = SingleBundlePage.createLink("link", item.getModelObject());
+                link.add(new Label("label", item.getModelObject().getSymbolicName()));
+                item.add(link);
             }
         });
-
     }
 
 }

Added: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServicePropertyColumn.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServicePropertyColumn.java?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServicePropertyColumn.java (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServicePropertyColumn.java Mon Feb 20 07:41:08 2012
@@ -0,0 +1,44 @@
+/*
+ * 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.osgi.core.service.column;
+
+import java.io.Serializable;
+
+import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.osgi.framework.ServiceReference;
+
+public class ServicePropertyColumn extends PropertyColumnExt<ServiceReference> {
+
+    private static final long serialVersionUID = 1L;
+
+    public ServicePropertyColumn(String label, String property) {
+        super(label, property);
+    }
+
+    @Override
+    protected IModel<?> createLabelModel(IModel<ServiceReference> rowModel) {
+        Object property = rowModel.getObject().getProperty(getPropertyExpression());
+
+        if (property instanceof Serializable) {
+            return Model.of((Serializable) property);
+        } else {
+            return Model.of(property.toString());
+        }
+    }
+}

Added: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderColumn.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderColumn.java?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderColumn.java (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderColumn.java Mon Feb 20 07:41:08 2012
@@ -0,0 +1,37 @@
+/*
+ * 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.osgi.core.service.column;
+
+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.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.osgi.framework.ServiceReference;
+
+public class ServiceProviderColumn extends AbstractColumn<ServiceReference> {
+
+    private static final long serialVersionUID = 1L;
+
+    public ServiceProviderColumn(IModel<String> displayModel) {
+        super(displayModel);
+    }
+
+    public void populateItem(Item<ICellPopulator<ServiceReference>> cellItem, String componentId, IModel<ServiceReference> rowModel) {
+        cellItem.add(new ServiceProviderPanel(componentId, rowModel));
+    }
+
+}

Added: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.java?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.java (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.java Mon Feb 20 07:41:08 2012
@@ -0,0 +1,40 @@
+/*
+ * 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.osgi.core.service.column;
+
+import org.apache.karaf.webconsole.osgi.core.bundle.SingleBundlePage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+
+public class ServiceProviderPanel extends Panel {
+
+    private static final long serialVersionUID = 1L;
+
+    public ServiceProviderPanel(String id, IModel<ServiceReference> model) {
+        super(id);
+
+        Bundle bundle = model.getObject().getBundle();
+        Link<SingleBundlePage> link = SingleBundlePage.createLink("link", bundle);
+        link.add(new Label("label", bundle.getSymbolicName()));
+        add(link);
+    }
+
+}

Modified: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/service/list/ServicePage.java Mon Feb 20 07:41:08 2012
@@ -17,15 +17,16 @@
 package org.apache.karaf.webconsole.osgi.core.service.list;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
-import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
+import org.apache.karaf.webconsole.osgi.core.service.column.ObjectClassColumn;
+import org.apache.karaf.webconsole.osgi.core.service.column.ServiceConsumerColumn;
+import org.apache.karaf.webconsole.osgi.core.service.column.ServicePropertyColumn;
+import org.apache.karaf.webconsole.osgi.core.service.column.ServiceProviderColumn;
 import org.apache.karaf.webconsole.osgi.core.shared.OsgiPage;
 import org.apache.karaf.webconsole.osgi.core.shared.ServiceDataProvider;
 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.model.IModel;
 import org.apache.wicket.model.Model;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 import org.osgi.framework.Constants;
@@ -39,22 +40,12 @@ public class ServicePage extends OsgiPag
 
     public ServicePage() {
         List<IColumn<ServiceReference>> columns = new ArrayList<IColumn<ServiceReference>>();
-        columns.add(new PropertyColumnExt<ServiceReference>("Service Id") {
-            @Override
-            protected IModel<?> createLabelModel(IModel<ServiceReference> rowModel) {
-                return Model.of((Long) rowModel.getObject().getProperty(Constants.SERVICE_ID));
-            }
-        });
-
-        columns.add(new PropertyColumnExt<ServiceReference>("Interfaces") {
-            @Override
-            protected IModel<?> createLabelModel(IModel<ServiceReference> rowModel) {
-                return Model.of(Arrays.toString((String[]) rowModel.getObject().getProperty(Constants.OBJECTCLASS)));
-            }
-        });
-        columns.add(new PropertyColumnExt<ServiceReference>("Exporter", "bundle.symbolicName"));
+        columns.add(new ServicePropertyColumn("Service Id", Constants.SERVICE_ID));
+        columns.add(new ObjectClassColumn(Model.of("Object classes")));
+        columns.add(new ServiceProviderColumn(Model.of("Provider")));
+        columns.add(new ServiceConsumerColumn("Consumers"));
 
-        add(new DefaultDataTable<ServiceReference>("services", columns, new ServiceDataProvider(context, (String) null), 100));
+        add(new DefaultDataTable<ServiceReference>("services", columns, new ServiceDataProvider(context, (String) null), Integer.MAX_VALUE));
     }
 
 }

Modified: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/ServiceDataProvider.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/ServiceDataProvider.java?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/ServiceDataProvider.java (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/ServiceDataProvider.java Mon Feb 20 07:41:08 2012
@@ -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.osgi.core.shared;
 
 import java.util.ArrayList;
@@ -20,13 +36,10 @@ public class ServiceDataProvider extends
 
     private static final long serialVersionUID = 1L;
 
-    private transient List<ServiceReference> services;
-
-    private BundleContext context;
-
-    private final String clazz;
-
-    private final String filter;
+    /**
+     * List of services.
+     */
+    private final transient List<ServiceReference> services;
 
     /**
      * Base constructor.
@@ -35,22 +48,25 @@ public class ServiceDataProvider extends
      * @param clazz Class name.
      * @param filter Filter to apply.
      */
+    public ServiceDataProvider(ServiceReference ... services) {
+        if (services != null) {
+            this.services = Arrays.asList(services);
+        } else {
+            this.services = new ArrayList<ServiceReference>();
+        }
+    }
+
     public ServiceDataProvider(BundleContext context, String clazz, String filter) {
-        this.context = context;
-        this.clazz = clazz;
-        this.filter = filter;
+        this(retrieveServices(context, clazz, filter));
     }
 
-    private List<ServiceReference> getServices() {
-        if (services == null) {
-            try {
-                ServiceReference[] references = context.getServiceReferences(clazz, filter);
-                this.services = references != null ? Arrays.asList(references) : new ArrayList<ServiceReference>();
-            } catch (InvalidSyntaxException e) {
-                throw new RuntimeException("Unable to list services", e);
-            }
+    private static ServiceReference[] retrieveServices(BundleContext context, String clazz, String filter) {
+        try {
+            ServiceReference[] references = context.getServiceReferences(clazz, filter);
+            return references != null ? references : new ServiceReference[0];
+        } catch (InvalidSyntaxException e) {
+            throw new RuntimeException("Unable to list services", e);
         }
-        return services;
     }
 
     public ServiceDataProvider(BundleContext context, String clazz) {
@@ -67,7 +83,7 @@ public class ServiceDataProvider extends
 
     // provide methods
     public Iterator<? extends ServiceReference> iterator(int first, int count) {
-        return getServices().subList(first, count).iterator();
+        return services.subList(first, count).iterator();
     }
 
     public IModel<ServiceReference> model(ServiceReference object) {
@@ -75,7 +91,7 @@ public class ServiceDataProvider extends
     }
 
     public int size() {
-        return getServices().size();
+        return services.size();
     }
 
 }

Modified: karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/State.java
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/State.java?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/State.java (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/java/org/apache/karaf/webconsole/osgi/core/shared/State.java Mon Feb 20 07:41:08 2012
@@ -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.osgi.core.shared;
 
 import org.osgi.framework.Bundle;

Added: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/BundlePanel.html
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/BundlePanel.html?rev=1291139&view=auto
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/BundlePanel.html (added)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/BundlePanel.html Mon Feb 20 07:41:08 2012
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<wicket:panel xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+    <table class="table table-stipped table-bordered">
+        <tr>
+            <td><wicket:message key="bundle.id" /></td>
+            <td><span wicket:id="bundleId"></span></td>
+        </tr>
+        <tr>
+            <td><wicket:message key="bundle.symbolicName" /></td>
+            <td><span wicket:id="symbolicName"></span></td>
+        </tr>
+        <tr>
+            <td><wicket:message key="bundle.state" /></td>
+            <td><span wicket:id="state"></span></td>
+        </tr>
+        <tr>
+            <td><wicket:message key="bundle.version" /></td>
+            <td><span wicket:id="version"></span></td>
+        </tr>
+        <tr>
+            <td><wicket:message key="bundle.location" /></td>
+            <td><span wicket:id="location"></span></td>
+        </tr>
+    </table>
+    <a wicket:id="link">More</a>
+</wicket:panel>
\ No newline at end of file

Modified: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.html
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.html?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.html (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/SingleBundlePage.html Mon Feb 20 07:41:08 2012
@@ -16,42 +16,59 @@
    limitations under the License.
 -->
 <wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-    <h1><span wicket:id="name">symbolic name</span> <small>details</small></h1>
+    <h1>
+        <wicket:message key="bundle" />
+        <span wicket:id="symbolicName"></span> 
+        <small>
+            <span wicket:id="version"></span>
+            <wicket:message key="details" />
+        </small>
+    </h1>
+
+    <div wicket:id="bundle"></div>
 
     <ul class="nav nav-pills">
         <li class="active">
-            <a href="#imports" data-toggle="tab">Imports</a>
+            <a href="#imports" data-toggle="tab">
+                <wicket:message key="package.imports" />
+            </a>
         </li>
         <li>
-            <a href="#exports" data-toggle="tab">Exports</a>
+            <a href="#exports" data-toggle="tab">
+                <wicket:message key="package.exports" />
+            </a>
         </li>
         <li>
-            <a href="#servicesIn" data-toggle="tab">Services in use</a>
+            <a href="#servicesIn" data-toggle="tab">
+                <wicket:message key="service.imports" />
+            </a>
         </li>
         <li>
-            <a href="#servicesOut" data-toggle="tab">Services provided</a>
+            <a href="#servicesOut" data-toggle="tab">
+                <wicket:message key="service.exports" />
+            </a>
         </li>
     </ul>
 
     <div class="tab-content">
         <div class="tab-pane active" id="imports">
-            <h2>Imports</h2>
+            <h2><wicket:message key="package.imports" /></h2>
             <table wicket:id="imports" class="table table-stripped table-bordered"></table>
         </div>
 
         <div class="tab-pane" id="exports">
-            <h3>Exports</h3>
+            <h3><wicket:message key="package.exports" /></h3>
             <table wicket:id="exports" class="table table-stripped table-bordered"></table>
         </div>
 
         <div class="tab-pane" id="servicesIn">
-            <h3>Services in use</h3>
-<!--             <div wicket:id="servicesIn"></div> -->
+            <h3><wicket:message key="service.imports" /></h3>
+            <table wicket:id="serviceImports" class="table table-stripped table-bordered"></table>
         </div>
 
         <div class="tab-pane" id="servicesOut">
-            <h3>Services provided by bundle</h3>
-<!--             <div wicket:id="servicesOut"></div> -->
+            <h3><wicket:message key="service.exports" /></h3>
+            <table wicket:id="serviceExports" class="table table-stripped table-bordered"></table>
         </div>
     </div>
 

Modified: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/list/decoration.css
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/list/decoration.css?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/list/decoration.css (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/bundle/list/decoration.css Mon Feb 20 07:41:08 2012
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
 div.decorations ul {
     list-style-type: none;
     margin: 0px;

Modified: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/package.properties
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/package.properties?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/package.properties (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/package.properties Mon Feb 20 07:41:08 2012
@@ -14,6 +14,12 @@
  # limitations under the License. 
 
 bundle Bundle
+bundle.id Bundle ID
+bundle.symbolicName Symbolic name
+bundle.version Version
+bundle.state State
+bundle.location Location
+
 bundle.install Install new bundle
 
 bundle.start Bundle $\{symbolicName\} ($\{bundleId\}) started
@@ -32,4 +38,15 @@ bundle.refresh Bundle $\{symbolicName\} 
 bundle.refresh.fail Bundle refresh fail: ${message}
 
 bundle.resolve Bundle $\{symbolicName\} ($\{bundleId\}) resolved
-bundle.resolve.fail Bundle resolving error: ${message}
\ No newline at end of file
+bundle.resolve.fail Bundle resolving error: ${message}
+
+package Package
+
+package.imports Imported packages
+package.exports Exported packages
+
+service.imports Imported services
+service.exports Exported services
+
+package.exporter Exporting bundle
+package.importers Importing bundles
\ No newline at end of file

Modified: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/PackagePage.html
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/PackagePage.html?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/PackagePage.html (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/PackagePage.html Mon Feb 20 07:41:08 2012
@@ -16,26 +16,36 @@
    limitations under the License.
 -->
 <wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-    <h1><span wicket:id="package"></span> <small><span wicket:id="version"></span> details</small></h1>
+    <h1>
+        <wicket:message key="package" />
+        <span wicket:id="package"></span>
+        <small>
+            <span wicket:id="version"></span>
+            <wicket:message key="details" />
+        </small>
+    </h1>
 
     <div class="row-fluid">
-        <div class="span4">
-            <h2>Exporter</h2>
-            <a wicket:id="exporterLink">
-                <span wicket:id="exporterLabel"></span>
-            </a>
-        </div>
-        <div class="span4">
-            <h2>Package</h2>
-            <span wicket:id="packageDet"></span>
+        <h2>
+            <wicket:message key="package" />
+        </h2>
+        <span wicket:id="packageDet"></span>
+    </div>
+
+    <div class="row-fluid">
+        <div class="span6">
+            <h2>
+                <wicket:message key="package.exporter" />
+            </h2>
+            <div wicket:id="exporter"></div>
         </div>
-        <div class="span4">
-            <h2>Importer</h2>
-            <ul>
+        <div class="span6">
+            <h2>
+                <wicket:message key="package.importers" />
+            </h2>
+            <ul class="unstyled">
                 <li wicket:id="importers">
-                    <a wicket:id="importerLink">
-                        <span wicket:id="importerLabel"></span>
-                    </a>
+                    <div wicket:id="importer"></div>
                 </li>
             </ul>
         </div>

Copied: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.html (from r1291138, karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html)
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.html?p2=karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.html&p1=karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html&r1=1291138&r2=1291139&rev=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/pkg/list/PackagePage.html Mon Feb 20 07:41:08 2012
@@ -16,7 +16,9 @@
    limitations under the License.
 -->
 <wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-    <h1>Events</h1>
+    <h1>
+        <wicket:message key="package" />
+    </h1>
 
-    <table wicket:id="topics" />
+    <table wicket:id="packages" class="table table-stripped table-condensed" />
 </wicket:extend>
\ No newline at end of file

Copied: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.html (from r1291138, karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html)
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.html?p2=karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.html&p1=karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html&r1=1291138&r2=1291139&rev=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ObjectClassPanel.html Mon Feb 20 07:41:08 2012
@@ -15,8 +15,10 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-    <h1>Events</h1>
-
-    <table wicket:id="topics" />
-</wicket:extend>
\ No newline at end of file
+<wicket:panel xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+    <ul class="unstyled">
+        <li wicket:id="objectClasses">
+            <span wicket:id="objectClass"></span>
+        </li>
+    </ul>
+</wicket:panel>
\ No newline at end of file

Copied: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.html (from r1291138, karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html)
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.html?p2=karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.html&p1=karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html&r1=1291138&r2=1291139&rev=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceConsumerPanel.html Mon Feb 20 07:41:08 2012
@@ -15,8 +15,12 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-    <h1>Events</h1>
-
-    <table wicket:id="topics" />
-</wicket:extend>
\ No newline at end of file
+<wicket:panel xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+    <ul class="unstyled">
+        <li wicket:id="bundles">
+            <a wicket:id="link">
+                <span wicket:id="label"></span>
+            </a>
+        </li>
+    </ul>
+</wicket:panel>
\ No newline at end of file

Copied: karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.html (from r1291138, karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html)
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.html?p2=karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.html&p1=karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html&r1=1291138&r2=1291139&rev=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html (original)
+++ karaf/webconsole/trunk/osgi/core/src/main/resources/org/apache/karaf/webconsole/osgi/core/service/column/ServiceProviderPanel.html Mon Feb 20 07:41:08 2012
@@ -15,8 +15,8 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-    <h1>Events</h1>
-
-    <table wicket:id="topics" />
-</wicket:extend>
\ No newline at end of file
+<wicket:panel xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+    <a wicket:id="link">
+        <span wicket:id="label"></span>
+    </a>
+</wicket:panel>
\ No newline at end of file

Modified: karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html (original)
+++ karaf/webconsole/trunk/osgi/event/src/main/resources/org/apache/karaf/webconsole/osgi/event/EventsPage.html Mon Feb 20 07:41:08 2012
@@ -18,5 +18,5 @@
 <wicket:extend xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
     <h1>Events</h1>
 
-    <table wicket:id="topics" />
+    <table wicket:id="topics" class="table table-striped table-condensed" />
 </wicket:extend>
\ No newline at end of file

Modified: karaf/webconsole/trunk/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css
URL: http://svn.apache.org/viewvc/karaf/webconsole/trunk/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css?rev=1291139&r1=1291138&r2=1291139&view=diff
==============================================================================
--- karaf/webconsole/trunk/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css (original)
+++ karaf/webconsole/trunk/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css Mon Feb 20 07:41:08 2012
@@ -1,3 +1,20 @@
+/*
+ * 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.
+ */
+
 .scr {
     background: url("scr.gif");
     width: 16px;