package fr.lteconsulting.mvp.client;
import javax.inject.Inject;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import dagger.Component;
import dagger.Module;
import dagger.Provides;
import fr.lteconsulting.hexa.client.ui.UiBuilder;
/**
* The GWT EntryPoint class to MVP application
*
* @author Arnaud Tournier
*
*/
public class Application implements EntryPoint
{
@Module
static class WPModule
{
@Provides
Closer provideCloser()
{
Window.alert("Je suis un closer !");
return new Closer()
{
@Override
public boolean canClose()
{
return false;
}
};
}
}
// static class WPMaker
// {
// @Inject
// WPMaker()
// {
// }
//
// @Inject
// Closer closer;
//
// @Inject
// MonIWorkPanel workPanel;
// }
@Component(modules = WPModule.class)
interface WPShop
{
// WPMaker maker();
MonIWorkPanel panel();
}
public static class MonIWorkPanel implements IWorkPanel
{
private final Closer closer;
@Inject
public MonIWorkPanel(Closer closer)
{
this.closer = closer;
}
IWPContext context;
Button cancel = new Button("cancel");
Button validate = new Button("validate");
Button exception = new Button("exception");
@Override
public void start(final IWPContext context)
{
this.context = context;
context.display(UiBuilder.vert(new Label("Welcome !"), validate, exception, cancel));
validate.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
context.exit((Integer)53);
}
});
exception.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
context.exit(new IllegalStateException("bad bad bad!"));
}
});
cancel.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
context.exit();
}
});
}
@Override
public void close(IClosingProcess closingProcess)
{
boolean res = closer.canClose();
if (res)
context.exit();
else
closingProcess.abort();
}
}
interface Closer
{
boolean canClose();
}
@Override
public void onModuleLoad()
{
WorkPanelController ctrl = new WorkPanelController();
RootLayoutPanel.get().add(ctrl);
IWorkPanel workPanel = DaggerApplication_WPShop.builder().wPModule(new WPModule()).build().panel();
ctrl.startWorkPanel(workPanel, new XWPExec()
{
@Override
public void onResult(Object result)
{
Window.alert("Result ! : " + result);
}
@Override
public void onError(Throwable throwable)
{
Window.alert("Error ! : " + throwable);
}
@Override
public void onCancel()
{
Window.alert("Cancelled...");
}
}, WPDisplayMode.DIALOG);
}
}