package klik.client.mvp.setup;
import java.util.LinkedHashMap;
import klik.client.MyCallback;
import klik.client.dispatch.CachingDispatchAsync;
import klik.shared.constants.ServerAction;
import klik.shared.event.AlertEvent;
import klik.shared.rpc.RetrieveSetupAction;
import klik.shared.rpc.RetrieveSetupResult;
import klik.shared.rpc.SaveSetupAction;
import klik.shared.rpc.SaveSetupResult;
import klik.shared.rpc.SendServerCommandAction;
import klik.shared.rpc.SendServerCommandResult;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.mvp.client.HasUiHandlers;
import com.gwtplatform.mvp.client.PopupView;
import com.gwtplatform.mvp.client.PresenterWidget;
public class SetupWidgetPresenter extends
PresenterWidget<SetupWidgetPresenter.MyView>
implements SetupWidgetUiHandlers {
public interface MyView extends PopupView, HasUiHandlers<SetupWidgetUiHandlers> {
void fillFields(boolean isRunning, LinkedHashMap<String, String> comPorts, String activePort);
void setIsRunning(boolean isRunning);
String getSelectedPort();
}
private final CachingDispatchAsync dispatcher;
@Inject
public SetupWidgetPresenter(final EventBus eventBus, final MyView view,
final CachingDispatchAsync dispatcher) {
super(eventBus, view);
this.dispatcher = dispatcher;
getView().setUiHandlers(this);
}
@Override
protected void onReveal() {
super.onReveal();
dispatcher.execute(new RetrieveSetupAction(), new MyCallback<RetrieveSetupResult>(this) {
@Override
public void onSuccesss(RetrieveSetupResult result) {
getView().fillFields(result.isRunning(), result.getComPorts(), result.getActivePort());
}
});
}
@Override
public void onClose() {
}
@Override
public void onShutDown() {
dispatchServerCommand(ServerAction.SHUT_DOWN);
}
@Override
public void onRestart() {
dispatchServerCommand(ServerAction.RESTART);
}
@Override
public void onSave() {
dispatcher.execute(new SaveSetupAction(getView().getSelectedPort()), new MyCallback<SaveSetupResult>(this) {
@Override
public void onSuccesss(SaveSetupResult result) {
getEventBus().fireEvent(new AlertEvent(AlertType.SUCCESS, "Saved!"));
getView().hide();
}
});
}
private void dispatchServerCommand(ServerAction action) {
dispatcher.execute(new SendServerCommandAction(action), new MyCallback<SendServerCommandResult>(this) {
@Override
public void onSuccesss(SendServerCommandResult result) {
getView().setIsRunning(result.isRunning());
if (result.isRunning()) {
getEventBus().fireEvent(new AlertEvent(AlertType.SUCCESS, result.getMessage()));
} else {
getEventBus().fireEvent(new AlertEvent(AlertType.ERROR, result.getMessage()));
}
}
});
}
}