Package io.fabric8.fab.osgi.commands.fab

Source Code of io.fabric8.fab.osgi.commands.fab.InfoCommand

/**
*  Copyright 2005-2014 Red Hat, Inc.
*
*  Red Hat 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 io.fabric8.fab.osgi.commands.fab;

import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
import io.fabric8.fab.DependencyTree;
import io.fabric8.fab.osgi.FabBundleInfo;
import io.fabric8.fab.osgi.FabResolver;
import io.fabric8.fab.osgi.commands.CommandSupport;
import io.fabric8.utils.Strings;
import org.osgi.framework.Constants;

import java.io.PrintStream;
import java.net.URI;
import java.util.Collection;
import java.util.List;

import static io.fabric8.utils.Strings.emptyIfNull;

/**
* Show some information about what exactly is being installed as part of the FAB: non-shared and shared dependencies,
* features and features URLs
*/
@Command(name = "info", scope = "fab", description = "Display information about the features and bundles that get installed by a FAB")
public class InfoCommand extends CommandSupport {

    @Argument(index = 0, name = "fab", description = "The Bundle ID, URL or file of the FAB", required = true)
    private String fab;

    @Override
    protected Object doExecute() throws Exception {
        FabResolver resolver = getFabResolver(fab);
        if (fab != null) {
            FabBundleInfo info = resolver.getInfo();

            PrintStream console = System.out;
            console.printf("URL: %s%n", info.getUrl());
            printEmbedded(console, getClassPathElements(info.getManifest().getValue(Constants.BUNDLE_CLASSPATH)));
            printBundles(console, info.getBundles());
            printFeatures(console, info.getFeatures());
            printFeatureURLs(console, info.getFeatureURLs());
            console.printf("%nFor more information about this FAB:%n");
            console.printf("  use 'fab:headers %s' to view the OSGi headers%n", fab);
            console.printf("  use 'fab:tree %s' to view a tree representation of the dependencies%n", fab);
        }
        return null;
    }

    private void printEmbedded(PrintStream console, List<String> elements) {
        if (elements.size() == 0) {
            console.printf("%nNo embedded/non-shared dependencies%n");
        } else {
            console.printf("%nNon-shared dependencies (embedded in FAB):%n");
            for (String element : elements) {
                console.printf("    %s%n", element);
            }
        }
    }

    private void printFeatureURLs(PrintStream console, Collection<URI> uris) {
        if (uris.size() == 0) {
            console.printf("%nNo additional features repositories required%n");
        } else {
            console.printf("%nAdditional features respositories:%n");
            for (URI uri : uris) {
                console.printf("    %s%n", uri);
            }
        }
    }

    private void printFeatures(PrintStream console, Collection<String> features) {
        if (features.size() == 0) {
            console.printf("%nNo additional features required%n");
        } else {
            console.printf("%nAdditional features:%n");
            for (String feature : features) {
                console.printf("    %s%n", feature);
            }
        }
    }

    private void printBundles(PrintStream console, Collection<DependencyTree> bundles) {
        if (bundles.size() == 0) {
            console.printf("%nNo shared/bundle dependencies required%n");
        } else {
            console.printf("%nShared dependencies (installed as bundles when necessary):%n");
            for (DependencyTree bundle : bundles) {
                console.printf("    mvn:%s/%s/%s%n", bundle.getGroupId(), bundle.getArtifactId(), bundle.getVersion());
            }
        }
    }

    protected static List<String> getClassPathElements(String value) {
        List<String> list = Strings.splitAndTrimAsList(emptyIfNull(value), ",");
        list.remove(".");
        return list;
    }
}
TOP

Related Classes of io.fabric8.fab.osgi.commands.fab.InfoCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.