blob: 4104642482b830ca3d4c68730c6f760b8cc968e1 [file] [log] [blame]
/*
* 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.shell.web;
import java.util.Map;
import org.apache.felix.gogo.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
import org.ops4j.pax.web.service.spi.WebEvent;
import org.ops4j.pax.web.service.spi.WebEvent.WebTopic;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
import org.osgi.service.startlevel.StartLevel;
@Command(scope = "web", name = "list", description = "Lists details for war bundles.")
public class WebListCommand extends OsgiCommandSupport {
private StartLevel startLevelService;
private WebEventHandler eventHandler;
/* (non-Javadoc)
* @see org.apache.karaf.shell.war.WarCommandSupport#doExecute(org.osgi.service.packageadmin.PackageAdmin)
*/
@Override
protected Object doExecute() {
Bundle[] bundles = getBundleContext().getBundles();
Map<Long, WebEvent> bundleEvents = eventHandler.getBundleEvents();
if (bundles != null) {
String level = (startLevelService == null) ? "" : " Level ";
String webState = (bundleEvents == null || bundleEvents.isEmpty()) ? "" : " Web-State ";
String headers = " ID State ";
headers += webState + level + " Web-ContextPath Name";
System.out.println(headers);
for (int i = 0; i < bundles.length; i++) {
//First check if this bundle contains a webapp ctxt
String webappctxt = (String) bundles[i].getHeaders().get("Web-ContextPath");
if (webappctxt == null)
webappctxt = (String) bundles[i].getHeaders().get("Webapp-Context");//this one is used by pax-web but is deprecated.
if (webappctxt == null)
continue; //only list war archives.
webappctxt.trim();
// Get the bundle name or location.
String name = (String) bundles[i].getHeaders().get(Constants.BUNDLE_NAME);
// If there is no name, then default to symbolic name.
name = (name == null) ? bundles[i].getSymbolicName() : name;
// If there is no symbolic name, resort to location.
name = (name == null) ? bundles[i].getLocation() : name;
// Show bundle version if not showing location.
String version = (String) bundles[i].getHeaders().get(Constants.BUNDLE_VERSION);
name = ((version != null)) ? name + " (" + version + ")" : name;
long l = bundles[i].getBundleId();
String id = String.valueOf(l);
if (startLevelService == null) {
level = "";
}
else {
level = String.valueOf(startLevelService.getBundleStartLevel(bundles[i]));
}
while (level.length() < 5) {
level = " " + level;
}
while (id.length() < 4) {
id = " " + id;
}
//prepend ctxt with slash (looks better)
if (!webappctxt.startsWith("/"))
webappctxt = "/" + webappctxt;
while (webappctxt.length() < 24) {
webappctxt += " ";
}
String line = "[" + id + "] [" + getStateString(bundles[i]) + "]";
if (bundleEvents != null && !bundleEvents.isEmpty())
line += " ["+ getWebStateString(bundles[i]) +"] ";
line += " [" + level + "] [" + webappctxt + "] " + name;
System.out.println(line);
}
}
return null;
}
public String getStateString(Bundle bundle)
{
int state = bundle.getState();
if (state == Bundle.ACTIVE) {
return "Active ";
} else if (state == Bundle.INSTALLED) {
return "Installed ";
} else if (state == Bundle.RESOLVED) {
return "Resolved ";
} else if (state == Bundle.STARTING) {
return "Starting ";
} else if (state == Bundle.STOPPING) {
return "Stopping ";
} else {
return "Unknown ";
}
}
public String getWebStateString(Bundle bundle) {
long bundleId = bundle.getBundleId();
Map<Long, WebEvent> bundleEvents = eventHandler.getBundleEvents();
String topic = "Unknown ";
if (bundleEvents.containsKey(bundleId)) {
WebEvent webEvent = bundleEvents.get(bundleId);
switch(webEvent.getType()) {
case WebEvent.DEPLOYING:
topic = "Deploying ";
break;
case WebEvent.DEPLOYED:
topic = "Deployed ";
break;
case WebEvent.UNDEPLOYING:
topic = "Undeploying";
break;
case WebEvent.UNDEPLOYED:
topic = "Undeployed ";
break;
case WebEvent.FAILED:
topic = "Unknown ";
topic = "Failed ";
break;
default:
topic = "Failed ";
}
}
while (topic.length() < 11) {
topic += " ";
}
return topic;
}
/**
* @param startLevelService the startLevelService to set
*/
public void setStartLevelService(StartLevel startLevelService) {
this.startLevelService = startLevelService;
}
/**
* @return the startLevelService
*/
public StartLevel getStartLevelService() {
return startLevelService;
}
/**
* @param eventHandler the eventHandler to set
*/
public void setEventHandler(WebEventHandler eventHandler) {
this.eventHandler = eventHandler;
}
/**
* @return the eventHandler
*/
public WebEventHandler getEventHandler() {
return eventHandler;
}
}