import cornell.slk.jkernel.core.Task;
import cornell.slk.jkernel.core.SharedClass;
import cornell.slk.jkernel.core.Resolver;
import cornell.slk.jkernel.std.Start;
import cornell.slk.jkernel.util.TableResolver;
import cornell.slk.jkernel.util.CompoundResolver;

public class Hello
{
    public static void main(String[] args)
        throws Exception
    {
        System.out.println("Hello.");

        // Share the class Counter, and create a resolver that
        // returns the SharedClass object for Counter:
        SharedClass counterClass = Task.shareClass("Counter");
        TableResolver counterClassResolver = new TableResolver();
        counterClassResolver.setMapping("Counter", counterClass);

        // Create a resolver for the new task:
        Resolver childResolver = new CompoundResolver(
            new Resolver[] {
                Start.data.standardResolver,
                counterClassResolver,
                Start.data.mainResolver
            });

        // Create the child task:
        Task child = new Task(childResolver);

        // Seed the child task with a CounterImpl object,
        // and get the capability for this object:
        Counter counter = (Counter) child.seed("CounterImpl");

        // Now we can use the counter to make calls into the
        // child task:
        System.out.println(counter.incrementCount());
        System.out.println(counter.incrementCount());
        System.out.println(counter.incrementCount());
    }
}
