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() { 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() { 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() { 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() { public void componentSelected(ButtonEvent ce) { fetchVREDefinitions(); } }); // REMOVE SelectionListener removesl = new SelectionListener() { 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() { 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() { 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() { 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() { 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() { public void selectionChanged(SelectionChangedEvent 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>() { @Override public void onSuccess(ArrayList 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() { @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() { public void handleEvent(MessageBoxEvent ce) { if (ce.getButtonClicked().getText().equals("Yes")) { display.maskCenterPanel("Removing VRE " + vreName +", please wait", true); rpcService.doRemove(vreEPR, new AsyncCallback() { @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() { public void handleEvent(MessageBoxEvent ce) { if (ce.getButtonClicked().getText().equals("Yes")) { display.maskCenterPanel("Undeploying VRE " + vreName +", please wait", true); rpcService.doUndeploy(vreEPR, new AsyncCallback() { @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() { @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() { @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() { @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() { @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() { @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() { @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; }-*/; }