coordinators.put(name, coordinator);
// top level interaction unit & context
final Context context = new Context();
final ProgressWindow progress = new ProgressWindow("Building Dialog");
// build reification pipeline
Function<Context> prepareContext = new Function<Context>() {
@Override
public void execute(Control<Context> control) {
context.set(ContextKey.EVENTBUS, coordinator.getLocalBus());
context.set(ContextKey.COORDINATOR, coordinator);
context.set(ContextKey.SECURITY_CONTEXT, framework.getSecurityFramework());
control.proceed();
}
};
Function<Context> readOperationMetaData = new Function<Context>() {
@Override
public void execute(final Control<Context> control) {
ReadOperationDescriptions operationMetaData = new ReadOperationDescriptions(framework.getDispatcher());
operationMetaData.prepareAsync(dialog, context, new ReificationBootstrap.Callback()
{
@Override
public void onError(Throwable caught) {
Log.error("ReadOperationDescriptions failed: " + caught.getMessage(), caught);
progress.getBar().setProgress(25.0);
control.abort();
}
@Override
public void onSuccess() {
Log.info("Successfully retrieved operation meta data");
progress.getBar().setProgress(25.0);
control.proceed();
}
});
}
};
Function<Context> createSecurityContext = new Function<Context>() {
@Override
public void execute(final Control<Context> control) {
SecurityFramework securityFramework = framework.getSecurityFramework();
RequiredResources resourceVisitor = new RequiredResources();
dialog.getInterfaceModel().accept(resourceVisitor);
securityFramework.createSecurityContext(activeDialog, resourceVisitor.getRequiredresources(),
new AsyncCallback<SecurityContext>() {
@Override
public void onFailure(Throwable caught) {
Console.error("Failed to create security context", caught.getMessage());
progress.getBar().setProgress(50.0);
control.abort();
}
@Override
public void onSuccess(SecurityContext result) {
control.getContext().set(ContextKey.SECURITY_CONTEXT, result);
progress.getBar().setProgress(50.0);
control.proceed();
}
}
);
}
};
Function<Context> readResourceMetaData = new Function<Context>() {
@Override
public void execute(final Control<Context> control) {
ReificationBootstrap readResourceDescription = new ReadResourceDescription(framework.getDispatcher());
readResourceDescription.prepareAsync(dialog, context, new ReificationBootstrap.Callback()
{
@Override
public void onSuccess()
{
Log.info("Successfully retrieved resource meta data");
// setup & start the reification pipeline
ReificationPipeline pipeline = new ReificationPipeline(
new UniqueIdCheckStep(),
new BuildUserInterfaceStep(),
new ImplicitBehaviourStep(framework.getDispatcher()),
new IntegrityStep());
pipeline.execute(dialog, context);
progress.getBar().setProgress(100.0);
control.proceed();
}
@Override
public void onError(final Throwable caught)
{
Log.error("ReadResourceDescription failed: " + caught.getMessage(), caught);
progress.getBar().setProgress(100.0);
control.abort();
}
});
}
};
Outcome<Context> outcome = new Outcome<Context>() {
@Override
public void onFailure(final Context context) {
progress.hide();
Window.alert("Reification failed");
}
@Override
public void onSuccess(final Context context) {
progress.hide();
// show result
ReificationWidget widget = context.get(ContextKey.WIDGET);
assert widget !=null;
cachedWidgets.put(name, widget);
BranchActivation activation = new BranchActivation();
dialog.getInterfaceModel().accept(activation);
//System.out.println("<< Default Activation: "+activation.getCandidate()+">>");
callback.onSuccess(widget.asWidget());
}
};
// execute pipeline
progress.center();
progress.getBar().setProgress(25.0);
new Async<Context>().waterfall(
context, outcome,
prepareContext, readOperationMetaData, createSecurityContext, readResourceMetaData
);