How to use Eclipse Interface Command Provider in Activator class in OSGI

eclipse, java, osgi, osgi-bundle

Solution

OSGI console is used mainly for debugging OSGI applications. It's not very convenient way to implement a calculator. Plain console application would be better. Anyway, it's a good way to familiarize yourself with the API.

First, create a class implementing CommandProvider:

public class Calculator implements CommandProvider {

    // add prints sum of its two arguments
    public void _add(CommandInterpreter ci) {
        int a = Integer.parseInt(ci.nextArgument());
        int b = Integer.parseInt(ci.nextArgument());
        ci.println(a+b);
    }

    // quit just calls "exit"
    public void _quit(CommandInterpreter ci) {
        ci.execute("exit");
    }

    @Override
    public String getHelp() {
        return "";
    }

}

You need to register it in your bundle's activator:

public class Activator implements BundleActivator {

    public void start(BundleContext bundleContext) throws Exception {
        bundleContext.registerService(CommandProvider.class.getName(),
                new Calculator(), null);
    }

    @Override
    public void stop(BundleContext context) throws Exception {
    }
}

To actually use those command, you need to start RCP application with `-console` command line argument. If your bundle is loaded lazily, it needs to be started before commands will be available:

osgi> start com.example.mybundle
osgi> add 2 2
4
osgi> quit
Really want to stop Equinox? (y/n; default=y)  y

Problem

I'm new to code with Eclipse Interface Command Provider. I saw an example at the website ``` public void _say(CommandInterpreter ci) { ci.print("You said:" + ci.nextArgument()); } @Override public String getHelp() { return "\tsay - repeats what you say\n"; } ``` It is used to get command as String and print it again. Now this is another one to execute the command ``` String command = intcp.nextArgument(); if (command != null) { intcp.execute(command); } ``` Why we use this `execute(command)` method? and How to use it? Are there any examples for it ?

Original source