319 lines
9.4 KiB
Java
319 lines
9.4 KiB
Java
package org.gcube.portlets.user.dataminermanager.client;
|
|
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.ComputationItem;
|
|
import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.CancelComputationRequestEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputationExecutionEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.ResubmitComputationExecutionRequestEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.StartComputationExecutionEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.events.StartComputationExecutionRequestEvent;
|
|
import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync;
|
|
import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaEventType;
|
|
import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
|
|
import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId;
|
|
import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException;
|
|
import org.gcube.portlets.user.dataminermanager.shared.session.UserInfo;
|
|
import org.gcube.portlets.user.dataminermanager.shared.workspace.DataMinerWorkArea;
|
|
import org.gcube.portlets.widgets.sessionchecker.client.CheckSession;
|
|
|
|
import com.allen_sauer.gwt.log.client.Log;
|
|
import com.google.gwt.event.shared.EventBus;
|
|
import com.google.gwt.user.client.Timer;
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
|
|
|
/**
|
|
*
|
|
* @author Giancarlo Panichi email: <a
|
|
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
|
*
|
|
*/
|
|
public class DataMinerManagerController {
|
|
private EventBus eventBus;
|
|
private UserInfo userInfo;
|
|
private DataMinerWorkArea dataMinerWorkArea;
|
|
|
|
public DataMinerManagerController() {
|
|
eventBus = EventBusProvider.INSTANCE;
|
|
init();
|
|
}
|
|
|
|
public UserInfo getUserInfo() {
|
|
return userInfo;
|
|
}
|
|
|
|
public DataMinerWorkArea getDataMinerWorkArea() {
|
|
return dataMinerWorkArea;
|
|
}
|
|
|
|
private void init() {
|
|
callHello();
|
|
checkSession();
|
|
bindToEvents();
|
|
}
|
|
|
|
private void checkSession() {
|
|
// if you do not need to something when the session expire
|
|
CheckSession.getInstance().startPolling();
|
|
}
|
|
|
|
private void sessionExpiredShow() {
|
|
CheckSession.showLogoutDialog();
|
|
}
|
|
|
|
private void sessionExpiredShowDelayed() {
|
|
Timer timeoutTimer = new Timer() {
|
|
public void run() {
|
|
sessionExpiredShow();
|
|
|
|
}
|
|
};
|
|
int TIMEOUT = 3; // 3 second timeout
|
|
|
|
timeoutTimer.schedule(TIMEOUT * 1000); // timeout is in milliseconds
|
|
|
|
}
|
|
|
|
private void callHello() {
|
|
DataMinerPortletServiceAsync.INSTANCE
|
|
.hello(new AsyncCallback<UserInfo>() {
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
Log.info("No valid user found: " + caught.getMessage());
|
|
if (caught instanceof ExpiredSessionServiceException) {
|
|
UtilsGXT3.alert("Error", "Expired Session");
|
|
sessionExpiredShowDelayed();
|
|
} else {
|
|
UtilsGXT3.alert(
|
|
"Error",
|
|
"No user found: "
|
|
+ caught.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(UserInfo result) {
|
|
userInfo = result;
|
|
Log.info("Hello: " + userInfo.getUsername());
|
|
retrieveDataMinerWorkArea();
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
private void bindToEvents() {
|
|
|
|
EventBusProvider.INSTANCE.addHandler(SessionExpiredEvent.TYPE,
|
|
new SessionExpiredEvent.SessionExpiredEventHandler() {
|
|
|
|
@Override
|
|
public void onChange(SessionExpiredEvent event) {
|
|
Log.debug("Catch SessionExpiredEvent");
|
|
sessionExpiredShow();
|
|
|
|
}
|
|
});
|
|
|
|
EventBusProvider.INSTANCE
|
|
.addHandler(
|
|
StartComputationExecutionRequestEvent.TYPE,
|
|
new StartComputationExecutionRequestEvent.StartComputationExecutionRequestEventHandler() {
|
|
|
|
@Override
|
|
public void onStart(
|
|
StartComputationExecutionRequestEvent event) {
|
|
Log.debug("Catch StartComputationExecutionRequestEvent");
|
|
startComputationRequest(event);
|
|
|
|
}
|
|
});
|
|
|
|
|
|
EventBusProvider.INSTANCE
|
|
.addHandler(
|
|
CancelComputationRequestEvent.TYPE,
|
|
new CancelComputationRequestEvent.CancelComputationRequestEventHandler() {
|
|
|
|
@Override
|
|
public void onCancel(
|
|
CancelComputationRequestEvent event) {
|
|
Log.debug("Catch CancelComputationRequestEvent");
|
|
cancelComputationRequest(event);
|
|
|
|
}
|
|
});
|
|
|
|
EventBusProvider.INSTANCE
|
|
.addHandler(
|
|
ResubmitComputationExecutionRequestEvent.TYPE,
|
|
new ResubmitComputationExecutionRequestEvent.ResubmitComputationExecutionRequestEventHandler() {
|
|
|
|
@Override
|
|
public void onResubmit(
|
|
ResubmitComputationExecutionRequestEvent event) {
|
|
Log.debug("Catch ResubmitComputationExecutionRequestEvent");
|
|
resubmitComputationRequest(event);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
/*
|
|
* EventBusProvider.INSTANCE.addHandler(
|
|
* ResubmitComputationEvent.getType(), new
|
|
* ResubmitComputationEvent.ResubmitComputationHandler() {
|
|
*
|
|
* @Override public void onResubmitComputation( ResubmitComputationEvent
|
|
* event) { switchTo(experimentPanel);
|
|
* header.setMenuSelected(MenuItem.EXPERIMENT); } });
|
|
*/
|
|
|
|
}
|
|
|
|
private void startComputationRequest(
|
|
final StartComputationExecutionRequestEvent event) {
|
|
|
|
DataMinerPortletServiceAsync.INSTANCE.startComputation(event.getOp(),
|
|
event.getComputationTitle(), event.getComputationDescription(),
|
|
new AsyncCallback<ComputationId>() {
|
|
@Override
|
|
public void onSuccess(ComputationId computationId) {
|
|
if (computationId == null)
|
|
UtilsGXT3.alert("Error",
|
|
"Failed to start computation "
|
|
+ event.getOp().getName()
|
|
+ ", the computation id is null");
|
|
else {
|
|
startComputation(computationId,
|
|
event.getComputationStatusPanelIndex());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
UtilsGXT3.alert("Error",
|
|
"Failed to start computation "
|
|
+ event.getOp().getName()
|
|
+ "<br/>Cause:" + caught.getCause()
|
|
+ "<br/>Message:" + caught.getMessage());
|
|
caught.printStackTrace();
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
private void startComputation(ComputationId computationId,
|
|
int computationStatusPanelIndex) {
|
|
StartComputationExecutionEvent event = new StartComputationExecutionEvent(
|
|
computationId, computationStatusPanelIndex);
|
|
EventBusProvider.INSTANCE.fireEvent(event);
|
|
}
|
|
|
|
private void cancelComputationRequest(CancelComputationRequestEvent event) {
|
|
final ComputationId computationId = event.getComputationId();
|
|
|
|
DataMinerPortletServiceAsync.INSTANCE.cancelComputation(computationId,
|
|
new AsyncCallback<String>() {
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
if (caught instanceof ExpiredSessionServiceException) {
|
|
UtilsGXT3.alert("Error", "Expired Session");
|
|
EventBusProvider.INSTANCE
|
|
.fireEvent(new SessionExpiredEvent());
|
|
} else {
|
|
UtilsGXT3.alert(
|
|
"Error",
|
|
"Error in cancel computation: ComputationId="
|
|
+ computationId.getId()
|
|
+ ", Error="
|
|
+ caught.getLocalizedMessage());
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(String result) {
|
|
Log.debug("Computation Deleted!");
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
private void resubmitComputationRequest(
|
|
final ResubmitComputationExecutionRequestEvent event) {
|
|
DataMinerPortletServiceAsync.INSTANCE.resubmit(event.getComputationId(), new AsyncCallback<ComputationId>() {
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
UtilsGXT3.alert("Error",
|
|
"Failed to resubmit computation "
|
|
+ event.getComputationId()
|
|
+ "<br/>Cause:" + caught.getCause()
|
|
+ "<br/>Message:" + caught.getMessage());
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(ComputationId result) {
|
|
if (result == null)
|
|
UtilsGXT3
|
|
.alert("Error",
|
|
"Failed to resubmit computation, the computation id is null!");
|
|
else {
|
|
resubmitComputation(result);
|
|
}
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
private void resubmitComputation(ComputationId computationId) {
|
|
ComputationItem computationItem=new ComputationItem(computationId, null);
|
|
ResubmitComputationExecutionEvent event = new ResubmitComputationExecutionEvent(
|
|
computationItem);
|
|
EventBusProvider.INSTANCE.fireEvent(event);
|
|
}
|
|
|
|
|
|
private void retrieveDataMinerWorkArea() {
|
|
DataMinerPortletServiceAsync.INSTANCE
|
|
.getDataMinerWorkArea(new AsyncCallback<DataMinerWorkArea>() {
|
|
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
Log.info("No valid user found: " + caught.getMessage());
|
|
if (caught instanceof ExpiredSessionServiceException) {
|
|
UtilsGXT3.alert("Error", "Expired Session");
|
|
sessionExpiredShowDelayed();
|
|
} else {
|
|
UtilsGXT3.alert("Error",
|
|
"Error retrieving DataMiner work area info: "
|
|
+ caught.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onSuccess(DataMinerWorkArea result) {
|
|
Log.debug("DataMinerWorkArea: " + result);
|
|
fireDataMinerWorkAreaEventRetrieved(result);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
private void fireDataMinerWorkAreaEventRetrieved(DataMinerWorkArea result) {
|
|
dataMinerWorkArea = result;
|
|
DataMinerWorkAreaEvent dataMinerWorkAreaEvent = new DataMinerWorkAreaEvent(
|
|
DataMinerWorkAreaEventType.OPEN, result);
|
|
eventBus.fireEvent(dataMinerWorkAreaEvent);
|
|
}
|
|
|
|
}
|