/**************************************************************************** * This software is part of the gCube Project. * Site: http://www.gcube-system.org/ **************************************************************************** * The gCube/gCore software is licensed as Free Open Source software * conveying to the EUPL (http://ec.europa.eu/idabc/eupl). * The software and documentation is provided by its authors/distributors * "as is" and no expressed or * implied warranty is given for its use, quality or fitness for a * particular case. **************************************************************************** * Filename: Callbacks.java **************************************************************************** * @author Daniele Strollo ***************************************************************************/ package org.gcube.portlets.admin.resourcemanagement.client.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.gcube.portlets.admin.resourcemanagement.client.ContexClientModel; import org.gcube.portlets.admin.resourcemanagement.client.views.profile.ResourceProfilePanel; import org.gcube.portlets.admin.resourcemanagement.client.views.resourcedetails.ResourceDetailsPanel; import org.gcube.portlets.admin.resourcemanagement.client.views.resourcedetails.ResourceGridFactory; import org.gcube.portlets.admin.resourcemanagement.client.views.resourcetree.ResourcesTreePanel; import org.gcube.portlets.admin.resourcemanagement.client.views.resourcetree.WSResourcesTreePanel; import org.gcube.portlets.admin.resourcemanagement.client.widgets.console.ConsoleMessageBroker; import org.gcube.portlets.admin.resourcemanagement.client.widgets.panels.MainPanel; import org.gcube.portlets.admin.resourcemanagement.client.widgets.registry.UIIdentifiers; import org.gcube.portlets.admin.resourcemanagement.client.widgets.registry.WidgetsRegistry; import org.gcube.portlets.admin.resourcemanagement.client.widgets.taskbar.TaskbarItem; import org.gcube.portlets.admin.resourcemanagement.client.widgets.taskbar.TaskbarRegister; import org.gcube.resourcemanagement.support.client.utils.LocalStatus; import org.gcube.resourcemanagement.support.client.utils.StatusHandler; import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator; import org.gcube.resourcemanagement.support.shared.types.Tuple; import org.gcube.resourcemanagement.support.shared.types.datamodel.CompleteResourceProfile; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; /** * In order to simplify the management of asynchronous commands * executed by the application that involve access to the servlet * the invocations have been represented in {@link Commands} and * the related callbacks here. * * @author Daniele Strollo (ISTI-CNR) */ public class Callbacks { public static final AsyncCallback> handleGetAvailableScopes = new AsyncCallback>() { public void onSuccess(final List result) { if (!WidgetsRegistry.containsElem(UIIdentifiers.BUTTON_AVAILABLE_SCOPES_ID)) { //MessageBox.info("Failure", "cannot retrieve the scopes button", null); Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID); return; } @SuppressWarnings("unchecked") ComboBox select = (ComboBox) WidgetsRegistry.getWidget(UIIdentifiers.BUTTON_AVAILABLE_SCOPES_ID); LocalStatus.getInstance().getAvailableScopes().clear(); final ListStore yourStore = select.getStore(); for (String scope : result) { final String currScope = scope; LocalStatus.getInstance().getAvailableScopes().add(currScope); String splits[] = currScope.split("/"); String context = splits[splits.length-1]; if (splits.length > 3) { //VRE context += " ("+splits[2]+")"; } else if (splits.length == 3) { //VO context += " ("+splits[1]+")"; } yourStore.add(new ContexClientModel(scope, context)); Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID); } } public void onFailure(final Throwable caught) { Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID); MessageBox.info("Failure", "cannot retrieve the scopes", null); GWT.log("cannot retrieve the scopes", caught); } }; public static final void builtResourceTree(final HashMap> result, final boolean clearGrid) { MainPanel panel = WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL); List wsResourcesTypes = null; if (result.containsKey(ResourceTypeDecorator.WSResource.name())) { wsResourcesTypes = result.get(ResourceTypeDecorator.WSResource.name()); result.remove(ResourceTypeDecorator.WSResource.name()); } // Creates the tree of resources ResourcesTreePanel resourceTree = new ResourcesTreePanel(result); resourceTree.getWidget().setWidth("100%"); resourceTree.getWidget().setHeight("100%"); ContentPanel cp = new ContentPanel(); cp.setAnimCollapse(false); cp.setHeading("Resources"); cp.setLayout(new FitLayout()); cp.add(resourceTree.getWidget()); panel.add(cp, true); if (wsResourcesTypes != null && wsResourcesTypes.size() > 0) { // Creates the tree of WSResources WSResourcesTreePanel wsresourceTree = new WSResourcesTreePanel(wsResourcesTypes); wsresourceTree.getWidget().setWidth("100%"); wsresourceTree.getWidget().setHeight("100%"); cp = new ContentPanel(); cp.setAnimCollapse(false); cp.setHeading("WSResources"); cp.setLayout(new FitLayout()); cp.add(wsresourceTree.getWidget()); panel.add(cp, false); } if (clearGrid) { Commands.clearResourceGridPanel(); } Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask( UIIdentifiers.GLOBAL_STATUS_BAR_ID, UIIdentifiers.GLOBAL_MENUBAR_ID); } /** * Once received the list of Types/Subtypes they are shown in a tree panel. * Here implemented the logics for that. */ public static final AsyncCallback>> handleLoadResourceTree = new AsyncCallback>>() { public void onSuccess(final HashMap> result) { builtResourceTree(result, true); } public void onFailure(final Throwable caught) { MessageBox.info("Failure", caught.getMessage(), null); Commands.clearResourceTreePanel(); ConsoleMessageBroker.error("loading resource", caught.getMessage()); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask( UIIdentifiers.GLOBAL_STATUS_BAR_ID, UIIdentifiers.GLOBAL_MENUBAR_ID); } }; /** * Once received the list of Types/Subtypes they are shown in a tree panel. * Here implemented the logics for that. */ public static final AsyncCallback>> handleReloadResourceTree = new AsyncCallback>>() { public void onSuccess(final HashMap> result) { builtResourceTree(result, false); } public void onFailure(final Throwable caught) { MessageBox.info("Failure", caught.getMessage(), null); Commands.clearResourceTreePanel(); ConsoleMessageBroker.error("loading resource", caught.getMessage()); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask( UIIdentifiers.GLOBAL_STATUS_BAR_ID, UIIdentifiers.GLOBAL_MENUBAR_ID); } }; /** * Once received the list of resource profiles for resources of a given type, * they will be shown inside a grid that is created here. */ public static final AsyncCallback> handleLoadResourceDetailsGrid = new AsyncCallback>() { public void onSuccess(final List result) { Commands.mask( "Rendering grid", WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer() ); try { ResourceDetailsPanel resGrid = Commands.getResourceDetailPanel(); Grid grid = ResourceGridFactory.createGrid(StatusHandler.getStatus().getCurrentResourceType(), result, "SubType"); resGrid.setGrid(grid, true); } catch (NullPointerException e1) { MessageBox.info( "Failure", "the grid container cannot be retrieved", null); } Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer()); Commands.setLoadedResources(result != null ? result.size() : 0); Commands.showPopup("Grid Creation", "Retrieved " + (result != null ? result.size() : 0) + " elements."); } public void onFailure(final Throwable caught) { MessageBox.info("Failure", "the grid has not been built", null); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer()); } }; public static final AsyncCallback> handleFilterResourceDetailsGrid = new AsyncCallback>() { public void onSuccess(final List result) { try { ResourceDetailsPanel resGrid = Commands.getResourceDetailPanel(); Grid grid = ResourceGridFactory.createGrid(StatusHandler.getStatus().getCurrentResourceType(), result, null); resGrid.setGrid(grid, false); } catch (NullPointerException e1) { MessageBox.info( "Failure", "the grid container cannot be retrieved", null); } finally { Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer()); } Commands.setLoadedResources(result != null ? result.size() : 0); Commands.showPopup("Grid Creation", "Retrieved " + (result != null ? result.size() : 0) + " elements."); } public void onFailure(final Throwable caught) { MessageBox.info("Failure", "the grid has not been built", null); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_NAVIGATION_PANEL).getContainer()); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer()); } }; public static final AsyncCallback handleGetResourceProfile = new AsyncCallback() { public void onSuccess(final CompleteResourceProfile result) { Dialog dlg = new Dialog(); dlg.setLayout(new FitLayout()); dlg.setHeading("XML Resource Profile"); dlg.setModal(true); dlg.setWidth(800); dlg.setHeight(400); dlg.setHideOnButtonClick(true); // HtmlContainer htmlContainer = new HtmlContainer(); try { // This resource has already been opened if (TaskbarRegister.contains(result.getID())) { TaskbarRegister.getTaskbarItem(result.getID()).destroy(); Commands.showPopup("Retrieve Resource Profile", "Refreshing profile for id: " + result.getID(), 3000); } MainPanel taskbarContainer = WidgetsRegistry.getPanel(UIIdentifiers.TASKBAR_PANEL); TaskbarItem tkItem = new TaskbarItem( StatusHandler.getStatus().getCurrentScope(), result.getType(), taskbarContainer, result.getID(), //result.getType() + ": " + result.getTitle(), result.getTitle(), "resource-profile-taskbar-item", "profile-big-icon"); tkItem.getRelatedWindow().setMainWidget( new ResourceProfilePanel( result.getType(), result.getXmlRepresentation(), result.getHtmlRepresentation()).getWidget()); TaskbarRegister.registerTaskbarWidget(result.getID(), tkItem); } catch (Exception e) { GWT.log("During HTML conversion", e); } finally { Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer()); } } public void onFailure(final Throwable caught) { MessageBox.info("Failure", "the profile has not been retrieved", null); GWT.log("on handleGetResourceProfile", caught); Commands.unmask(WidgetsRegistry.getPanel(UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL).getContainer()); } }; public static final AsyncCallback> handleGetDeploymentReport = new AsyncCallback>() { public void onSuccess(final Tuple result) { if (result.size() < 3) { MessageBox.alert("Invalid Report Received", "Don't know why :(", null); Commands.unmask(UIIdentifiers.GLOBAL_STATUS_BAR_ID); Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID, UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL); return; } Dialog dlg = new Dialog(); dlg.setLayout(new FitLayout()); dlg.setHeading("XML Resource Profile"); dlg.setModal(true); dlg.setWidth(800); dlg.setHeight(400); dlg.setHideOnButtonClick(true); // HtmlContainer htmlContainer = new HtmlContainer(); try { String reportID = result.get(0); String resourceTitle = ResourceTypeDecorator.DeployReport.getLabel() + ": " + reportID; // This resource has already been opened if (TaskbarRegister.contains(reportID)) { TaskbarRegister.getTaskbarItem(reportID).destroy(); Commands.showPopup("Retrieve Report", "Refreshing Report id: " + reportID, 3000); } MainPanel taskbarContainer = WidgetsRegistry.getPanel(UIIdentifiers.TASKBAR_PANEL); TaskbarItem tkItem = new TaskbarItem( StatusHandler.getStatus().getCurrentScope(), ResourceTypeDecorator.DeployReport, taskbarContainer, reportID, resourceTitle, "resource-profile-taskbar-item", ResourceTypeDecorator.DeployReport.getIcon()); tkItem.getRelatedWindow().setMainWidget( new ResourceProfilePanel( ResourceTypeDecorator.DeployReport, result.get(1), result.get(2)).getWidget()); TaskbarRegister.registerTaskbarWidget(reportID, tkItem); } catch (Exception e) { GWT.log("During HTML conversion", e); } finally { Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID, UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL); Commands.unmask(UIIdentifiers.GLOBAL_STATUS_BAR_ID); } } public void onFailure(final Throwable caught) { MessageBox.info("Failure", "the report has not been retrieved", null); GWT.log("on handleGetDeploymentReport", caught); Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID, UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL); Commands.unmask(UIIdentifiers.GLOBAL_STATUS_BAR_ID); } }; }