vre-manager-portlet/src/main/java/org/gcube/portlets/admin/vredeployment/client/presenter/VREDeploymentPresenter.java

393 lines
13 KiB
Java

package org.gcube.portlets.admin.vredeployment.client.presenter;
import java.util.ArrayList;
import org.gcube.portlets.admin.vredeployment.client.VREDeploymentServiceAsync;
import org.gcube.portlets.admin.vredeployment.client.view.Display;
import org.gcube.portlets.admin.vredeployment.shared.VREDefinitionBean;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Html;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.ScrollPanel;
/**
*
* @author Massimiliano Assante (assante@isti.cnr.it)
*
*/
public class VREDeploymentPresenter implements Presenter {
private final VREDeploymentServiceAsync rpcService;
private final HandlerManager eventBus;
private final Display display;
String location = null;
/**
*
* @param rpcService
* @param eventBus
* @param display
*/
public VREDeploymentPresenter(VREDeploymentServiceAsync rpcService, HandlerManager eventBus, Display display) {
this.rpcService = rpcService;
this.eventBus = eventBus;
this.display = display;
}
@SuppressWarnings("unchecked")
public void bind() {
///*** BUTTONS & Menu
//VIEW listener
SelectionListener viewsl = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doViewDetails(vreEPR, vreName);
}
};
display.getViewButton().addSelectionListener(viewsl);
display.getViewMenu().addSelectionListener(viewsl);
//APPROVE
SelectionListener approvesl = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doApprove(vreEPR, vreName);
}
};
display.getApproveButton().addSelectionListener(approvesl);
display.getApproveMenu().addSelectionListener(approvesl);
// EDIT
SelectionListener editsl = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doEdit(vreEPR, vreName);
}
};
display.getEditButton().addSelectionListener(editsl);
display.getEditMenu().addSelectionListener(editsl);
// REFRESH
display.getRefreshButton().addSelectionListener( new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
fetchVREDefinitions();
}
});
// REMOVE
SelectionListener removesl = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doRemove(vreEPR, vreName);
}
};
display.getRemoveButton().addSelectionListener(removesl);
display.getRemoveMenu().addSelectionListener(removesl);
// REMOVE
@SuppressWarnings("rawtypes")
SelectionListener undeploysl = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doUndeploy(vreEPR, vreName);
}
};
display.getUndeployButton().addSelectionListener(undeploysl);
// VIEW REPORT
SelectionListener viewreportSL = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doViewReport(vreEPR, vreName);
}
};
display.getViewReportButton().addSelectionListener(viewreportSL);
display.getViewReportMenu().addSelectionListener(viewreportSL);
// VIEW TEXTUAL REPORT
SelectionListener viewTreportSL = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreEPR = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doViewTextualReport(vreEPR, vreName);
}
};
display.getViewTextualReportButton().addSelectionListener(viewTreportSL);
//POSTPONE
SelectionListener postPonesl = new SelectionListener<ComponentEvent>() {
public void componentSelected(ComponentEvent ce) {
String vreId = display.getGridSelectionModel().getSelectedItem().getId();
String vreName = display.getGridSelectionModel().getSelectedItem().getName();
doPostPone(vreId, vreName);
}
};
display.getPostPoneButton().addSelectionListener(postPonesl);
///*** GRID
display.getGridSelectionModel().addSelectionChangedListener(new SelectionChangedListener<VREDefinitionBean>() {
public void selectionChanged(SelectionChangedEvent<VREDefinitionBean> event) {
if (event.getSelectedItem() != null)
display.setGridContextMenu(event.getSelectedItem().getStatus());
display.enableActionButtons(event.getSelectedItem());
}
});
}
/**
* go method
*/
@Override
public void go(HasWidgets container) {
bind();
container.clear();
container.add(display.asWidget());
fetchVREDefinitions();
}
/**
* fetch all the workflow documents belongin to this user
*/
private void fetchVREDefinitions() {
display.maskCenterPanel("Loading VRE definitions, please wait", true);
rpcService.getVREDefinitions(new AsyncCallback<ArrayList<VREDefinitionBean>>() {
@Override
public void onSuccess(ArrayList<VREDefinitionBean> docs) {
display.maskCenterPanel("", false);
display.setData(docs);
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to get VRE list from service " + arg0.getMessage());
}
});
}
private void doApprove(String vreEPR, String vreName) {
display.maskCenterPanel("Approving VRE " + vreName +", please wait", true);
rpcService.doApprove(vreEPR, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean arg0) {
display.maskCenterPanel("", false);
loadDeployer();
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to approve VRE" + arg0.getMessage());
}
});
}
private void doRemove(final String vreEPR, final String vreName) {
MessageBox.confirm("Confirm", "Are you sure you want to remove "+ vreName +"?", new Listener<MessageBoxEvent>() {
public void handleEvent(MessageBoxEvent ce) {
if (ce.getButtonClicked().getText().equals("Yes")) {
display.maskCenterPanel("Removing VRE " + vreName +", please wait", true);
rpcService.doRemove(vreEPR, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean arg0) {
display.maskCenterPanel("", false);
fetchVREDefinitions();
Info.display("VRE Removal", "The '{0}' VRE was successfully removed", vreName);
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to remove VRE" + arg0.getMessage());
}
});
}
}
});
}
protected void doUndeploy(final String vreEPR, final String vreName) {
MessageBox.confirm("Confirm", "Are you REALLY REALLY sure you want to undeploy "+ vreName +"?", new Listener<MessageBoxEvent>() {
public void handleEvent(MessageBoxEvent ce) {
if (ce.getButtonClicked().getText().equals("Yes")) {
display.maskCenterPanel("Undeploying VRE " + vreName +", please wait", true);
rpcService.doUndeploy(vreEPR, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean arg0) {
display.maskCenterPanel("", false);
fetchVREDefinitions();
Info.display("VRE Removal", "The '{0}' VRE undeploy has been successfully triggered. "
+ "The infrastructure feels now relieved by having these resources back available. Thank you", vreName);
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to remove VRE" + arg0.getMessage());
}
});
}
}
});
}
private void doViewReport(String vreEPR, String vreName) {
display.maskCenterPanel("Switching to VRE report for " + vreName +", please wait", true);
rpcService.doViewReport(vreEPR, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean arg0) {
display.maskCenterPanel("", false);
loadDeployer();
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to view report VRE" + arg0.getMessage());
}
});
}
private void doViewTextualReport(String vreEPR, String vreName) {
display.maskCenterPanel("Fetching textual VRE report for " + vreName +", please wait", true);
rpcService.getHTMLReport(vreEPR, new AsyncCallback<String>() {
@Override
public void onSuccess(String reportHTML) {
final com.extjs.gxt.ui.client.widget.Window window = new com.extjs.gxt.ui.client.widget.Window();
window.setSize(700, 550);
window.setPlain(true);
window.setModal(true);
window.setBlinkModal(true);
window.setHeading("Textual Report");
ContentPanel cp = new ContentPanel();
cp.setHeaderVisible(false);
ScrollPanel scroller = new ScrollPanel();
scroller.setSize("700", "550");
scroller.add(new Html(reportHTML));
cp.add(scroller);
cp.setLayout(new FitLayout());
window.add(cp);
window.setLayout(new FitLayout());
window.addButton(new Button("Close", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
window.hide();
}
}));
cp.layout();
display.maskCenterPanel("", false);
window.show();
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to view report VRE" + arg0.getMessage());
}
});
}
private void doEdit(String vreEPR, String vreName) {
display.maskCenterPanel("Switching to edit mode for " + vreName +", please wait", true);
rpcService.doEdit(vreEPR, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean arg0) {
display.maskCenterPanel("", false);
loadDefinition();
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to edit VRE" + arg0.getMessage());
}
});
}
private void doPostPone(String vreId, String vreName) {
Window.confirm("You are going to postpone of 6 months the expiration date of " + vreName);
rpcService.postPone(vreId, new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
display.maskCenterPanel("", false);
Window.alert("Failed to postpone VRE of 6 months" + caught.getMessage());
}
@Override
public void onSuccess(Boolean result) {
display.maskCenterPanel("", false);
fetchVREDefinitions();
}
});
}
private void doViewDetails(String vreEPR, String vreName) {
display.maskCenterPanel("Retrieving details for VRE " + vreName +", please wait", true);
rpcService.doViewDetails(vreEPR, new AsyncCallback<String>() {
@Override
public void onSuccess(String html2Show) {
display.maskCenterPanel("", false);
display.showDetailsDialog(html2Show);
}
@Override
public void onFailure(Throwable arg0) {
display.maskCenterPanel("", false);
Window.alert("Failed to get VRE details" + arg0.getMessage());
}
});
}
/**
* Redirect to VRE Deployer Portlet
*/
public void loadDeployer(){
getUrl();
location += "/../vre-deployer";
Window.open(location, "_self", "");
}
/**
* Redirect to VRE Definition Portlet
*/
public void loadDefinition(){
getUrl();
location += "/../vre-definition";
Window.open(location, "_self", "");
}
/**
* Get URL from browser
*/
public native void getUrl()/*-{
this.@org.gcube.portlets.admin.vredeployment.client.presenter.VREDeploymentPresenter::location = $wnd.location.href;
}-*/;
}