in features/src/main/java/org/apache/karaf/cellar/features/shell/ListFeaturesCommand.java [66:146]
protected Object doExecute() throws Exception {
Group group = groupManager.findGroupByName(groupName);
if (group == null) {
System.err.println("Cluster group " + groupName + " doesn't exist");
return null;
}
CellarSupport support = new CellarSupport();
support.setClusterManager(clusterManager);
support.setGroupManager(groupManager);
support.setConfigurationAdmin(configurationAdmin);
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
Map<String, ExtendedFeatureState> features = gatherFeatures();
if (features != null && !features.isEmpty()) {
ShellTable table = new ShellTable();
table.column("Name");
table.column("Version");
table.column("Installed");
table.column("Located");
table.column("Blocked");
List<ExtendedFeatureState> featureStates = new ArrayList<ExtendedFeatureState>(features.values());
if (ordered) {
Collections.sort(featureStates, new FeatureComparator());
}
for (ExtendedFeatureState info : featureStates) {
String name = info.getName();
String version = info.getVersion();
boolean isInstalled = info.getInstalled();
String located = "";
boolean cluster = info.isCluster();
boolean local = info.isLocal();
if (cluster && local)
located = "cluster/local";
if (local && !cluster) {
located = "local";
if (onlyCluster)
continue;
}
if (cluster && !local) {
located = "cluster";
if (onlyLocal)
continue;
}
String blocked = "";
boolean inbound = support.isAllowed(group, Constants.CATEGORY, name, EventType.INBOUND);
boolean outbound = support.isAllowed(group, Constants.CATEGORY, name, EventType.OUTBOUND);
if (inbound && outbound && onlyBlocked)
continue;
if (!inbound && !outbound)
blocked = "in/out";
if (!inbound && outbound)
blocked = "in";
if (!outbound && inbound)
blocked = "out";
if (version == null)
version = "";
if (!installed || (installed && isInstalled)) {
table.addRow().addContent(name, version,
isInstalled ? "x" : " ",
located, blocked);
}
}
table.print(System.out, !noFormat);
} else System.err.println("No features in cluster group " + groupName);
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
return null;
}