Extend BundleActionsPanel to support start/stop/refresh/uninstall operations
git-svn-id: https://svn.apache.org/repos/asf/karaf/sandbox/webconsole/trunk@1164477 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java
index ba479d7..f83370d 100644
--- a/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java
+++ b/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/bundle/view/BundleActionsPanel.java
@@ -21,16 +21,26 @@
import org.apache.karaf.webconsole.core.table.ActionsPanel;
import org.apache.karaf.webconsole.osgi.bundle.IActionProvider;
+import org.apache.karaf.webconsole.osgi.internal.bundle.BundlesPage;
import org.apache.karaf.webconsole.osgi.internal.bundle.DetailsPage;
+import org.apache.karaf.webconsole.osgi.internal.bundle.State;
import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.Session;
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.model.IModel;
+import org.ops4j.pax.wicket.api.PaxWicketBean;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.service.packageadmin.PackageAdmin;
public class BundleActionsPanel extends ActionsPanel<Bundle> {
+ @PaxWicketBean(name = "packageAdmin")
+ private PackageAdmin admin;
+
public BundleActionsPanel(String componentId, final IModel<Bundle> model, List<IActionProvider> actionProviders) {
super(componentId, model);
@@ -57,6 +67,95 @@
links.add(link);
+ switch (State.of(object.getState())) {
+ case ACTIVE:
+ links.add(createStopLink(id));
+ break;
+ case INSTALLED:
+ case RESOLVED:
+ links.add(createStartLink(id));
+ }
+
+ links.add(createRefreshLink(id));
+ links.add(createUninstallLink(id));
+
return links;
}
+
+ private Link createUninstallLink(String id) {
+ Link link = new Link(id) {
+ @Override
+ public void onClick() {
+ Bundle bundle = (Bundle) BundleActionsPanel.this.getDefaultModelObject();
+
+ try {
+ bundle.uninstall();
+
+ Session.get().info("Bundle " + bundle.getSymbolicName() + " uninstalled");
+ RequestCycle.get().setResponsePage(BundlesPage.class);
+ } catch (BundleException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ };
+ link.add(new Label("label", "Uninstall"));
+ return link;
+ }
+
+ private Link createRefreshLink(String id) {
+ Link link = new Link(id) {
+ @Override
+ public void onClick() {
+ Bundle bundle = (Bundle) BundleActionsPanel.this.getDefaultModelObject();
+
+ admin.refreshPackages(new Bundle[] {bundle});
+ Session.get().info("Bundle " + bundle.getSymbolicName() + " refreshed");
+ RequestCycle.get().setResponsePage(BundlesPage.class);
+ }
+
+ };
+ link.add(new Label("label", "Refresh"));
+ return link;
+ }
+
+ private Link createStartLink(String id) {
+ Link link = new Link(id) {
+ @Override
+ public void onClick() {
+ Bundle bundle = (Bundle) BundleActionsPanel.this.getDefaultModelObject();
+
+ try {
+ bundle.start();
+ Session.get().info("Bundle " + bundle.getSymbolicName() + " started");
+ RequestCycle.get().setResponsePage(BundlesPage.class);
+ } catch (BundleException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ };
+ link.add(new Label("label", "Start"));
+ return link;
+ }
+
+ private Link createStopLink(String id) {
+ Link link = new Link(id) {
+ public void onClick() {
+ Bundle bundle = (Bundle) BundleActionsPanel.this.getDefaultModelObject();
+ try {
+ bundle.stop();
+ Session.get().info("Bundle " + bundle.getSymbolicName() + " stopped");
+ RequestCycle.get().setResponsePage(BundlesPage.class);
+ } catch (BundleException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ };
+ link.add(new Label("label", "Stop"));
+ return link;
+ }
}
diff --git a/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml b/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
index 9ca6654..149f5c6 100644
--- a/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
+++ b/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
@@ -46,6 +46,7 @@
<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" />
<reference id="metaTypeService" interface="org.osgi.service.metatype.MetaTypeService" />
<reference-list id="columnProviders" interface="org.apache.karaf.webconsole.osgi.bundle.IColumnProvider" availability="optional" />