protected Object doExecute()

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;
    }