package org.gcube.portlets.user.dataminermanager.client.dataspace; import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider; import org.gcube.portlets.user.dataminermanager.client.events.DataMinerWorkAreaEvent; import org.gcube.portlets.user.dataminermanager.client.events.DeleteItemRequestEvent; import org.gcube.portlets.user.dataminermanager.client.events.RefreshDataMinerWorkAreaEvent; import org.gcube.portlets.user.dataminermanager.client.events.SessionExpiredEvent; import org.gcube.portlets.user.dataminermanager.client.events.UIStateEvent; import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletServiceAsync; import org.gcube.portlets.user.dataminermanager.client.type.DataMinerWorkAreaElementType; import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3; import org.gcube.portlets.user.dataminermanager.shared.exception.ExpiredSessionServiceException; import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload; import org.gcube.portlets.widgets.wsexplorer.client.explore.WorkspaceResourcesExplorerPanel; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; import org.gcube.portlets.widgets.wsexplorer.shared.Item; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale; import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign; import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.widget.core.client.ContentPanel; import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer; import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; import com.sencha.gxt.widget.core.client.event.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; import com.sencha.gxt.widget.core.client.toolbar.ToolBar; /** * * @author Giancarlo Panichi email: g.panichi@isti.cnr.it * */ public class OutputDataSetsPanel extends ContentPanel { private Item selectedItem; private MultipleDNDUpload dnd; private WorkspaceResourcesExplorerPanel wsResourcesExplorerPanel; private TextButton btnOpen; private TextButton btnDelete; private TextButton btnRefresh; private VerticalLayoutContainer v; public OutputDataSetsPanel() { super(); Log.debug("OutputDataSetsPanel"); // msgs = GWT.create(ServiceCategoryMessages.class); init(); bindToEvents(); } private void init() { setId("OutputDataSetsPanel"); forceLayoutOnResize = true; setBodyBorder(false); setBorders(false); setHeaderVisible(true); setResize(true); setAnimCollapse(false); setHeadingText("Output Data Sets"); } private void bindToEvents() { EventBusProvider.INSTANCE.addHandler(UIStateEvent.TYPE, new UIStateEvent.UIStateEventHandler() { @Override public void onChange(UIStateEvent event) { manageStateEvents(event); } }); EventBusProvider.INSTANCE.addHandler(DataMinerWorkAreaEvent.TYPE, new DataMinerWorkAreaEvent.DataMinerWorkAreaEventHandler() { @Override public void onChange(DataMinerWorkAreaEvent event) { manageDataMinerWorkAreaEvents(event); } }); EventBusProvider.INSTANCE .addHandler( RefreshDataMinerWorkAreaEvent.TYPE, new RefreshDataMinerWorkAreaEvent.RefreshDataMinerWorkAreaEventHandler() { @Override public void onRefresh( RefreshDataMinerWorkAreaEvent event) { manageRefreshDataMinerWorkAreaEvents(event); } }); } private void manageStateEvents(UIStateEvent event) { Log.debug("OutputDataSetsPanel recieved UIStateEvent: " + event.toString()); switch (event.getUiStateType()) { case START: break; case WAITING: break; case UPDATE: break; default: break; } } private void manageDataMinerWorkAreaEvents(DataMinerWorkAreaEvent event) { Log.debug("OutputDataSetsPanel recieved UIStateEvent: " + event.toString()); switch (event.getDataMinerWorkAreaEventType()) { case OPEN: case UPDATE: refreshWSResourceExplorerPanel(event); break; default: break; } } private void manageRefreshDataMinerWorkAreaEvents( RefreshDataMinerWorkAreaEvent event) { switch (event.getDataMinerWorkAreaElementType()) { case Computations: break; case InputDataSets: break; case OutputDataSets: refreshWSResourceExplorerPanel(); break; default: break; } } private void create(DataMinerWorkAreaEvent event) { try { if (event == null || event.getDataMinerWorkArea() == null || event.getDataMinerWorkArea().getOutputDataSets() == null || event.getDataMinerWorkArea().getOutputDataSets() .getFolder() == null || event.getDataMinerWorkArea().getOutputDataSets() .getFolder().getId() == null || event.getDataMinerWorkArea().getOutputDataSets() .getFolder().getId().isEmpty()) { if (v != null) { remove(v); forceLayout(); } return; } wsResourcesExplorerPanel = new WorkspaceResourcesExplorerPanel( event.getDataMinerWorkArea().getOutputDataSets() .getFolder().getId(), false); WorskpaceExplorerSelectNotificationListener wsResourceExplorerListener = new WorskpaceExplorerSelectNotificationListener() { @Override public void onSelectedItem(Item item) { Log.debug("Listener Selected Item " + item); selectedItem = item; } @Override public void onFailed(Throwable throwable) { Log.error(throwable.getLocalizedMessage()); throwable.printStackTrace(); } @Override public void onAborted() { } @Override public void onNotValidSelection() { selectedItem = null; } }; wsResourcesExplorerPanel .addWorkspaceExplorerSelectNotificationListener(wsResourceExplorerListener); wsResourcesExplorerPanel.ensureDebugId("wsResourceExplorerPanel"); VerticalLayoutContainer vResourcesExplorerContainer = new VerticalLayoutContainer(); vResourcesExplorerContainer.setScrollMode(ScrollMode.AUTO); vResourcesExplorerContainer.add(wsResourcesExplorerPanel, new VerticalLayoutData(1, -1, new Margins(0))); // DND dnd = new MultipleDNDUpload(); dnd.setParameters(event.getDataMinerWorkArea().getOutputDataSets() .getFolder().getId(), UPLOAD_TYPE.File); dnd.addUniqueContainer(vResourcesExplorerContainer); WorskpaceUploadNotificationListener workspaceUploaderListener = new WorskpaceUploadNotificationListener() { @Override public void onUploadCompleted(String parentId, String itemId) { Log.debug("Upload completed: [parentID: " + parentId + ", itemId: " + itemId + "]"); wsResourcesExplorerPanel.refreshRootFolderView(); forceLayout(); } @Override public void onUploadAborted(String parentId, String itemId) { Log.debug("Upload Aborted: [parentID: " + parentId + ", itemId: " + itemId + "]"); } @Override public void onError(String parentId, String itemId, Throwable throwable) { Log.debug("Upload Error: [parentID: " + parentId + ", itemId: " + itemId + "]"); throwable.printStackTrace(); } @Override public void onOverwriteCompleted(String parentId, String itemId) { Log.debug("Upload Override Completed: [parentID: " + parentId + ", itemId: " + itemId + "]"); wsResourcesExplorerPanel.refreshRootFolderView(); forceLayout(); } }; dnd.addWorkspaceUploadNotificationListener(workspaceUploaderListener); // ToolBar btnOpen = new TextButton("Open"); // btnOpen.setIcon(StatAlgoImporterResources.INSTANCE.download16()); btnOpen.setScale(ButtonScale.SMALL); btnOpen.setIconAlign(IconAlign.LEFT); btnOpen.setToolTip("Open"); btnOpen.addSelectHandler(new SelectHandler() { @Override public void onSelect(SelectEvent event) { openFile(); } }); btnDelete = new TextButton("Delete"); // btnDelete.setIcon(StatAlgoImporterResources.INSTANCE.delete16()); btnDelete.setScale(ButtonScale.SMALL); btnDelete.setIconAlign(IconAlign.LEFT); btnDelete.setToolTip("Delete"); btnDelete.addSelectHandler(new SelectHandler() { @Override public void onSelect(SelectEvent event) { deleteItem(event); } }); btnRefresh = new TextButton("Refresh"); // btnRefresh.setIcon(StatAlgoImporterResources.INSTANCE.reload16()); btnRefresh.setScale(ButtonScale.SMALL); btnRefresh.setIconAlign(IconAlign.LEFT); btnRefresh.setToolTip("Refresh"); btnRefresh.addSelectHandler(new SelectHandler() { @Override public void onSelect(SelectEvent event) { refreshWSResourceExplorerPanel(); } }); ToolBar toolBar = new ToolBar(); toolBar.add(btnOpen, new BoxLayoutData(new Margins(0))); toolBar.add(btnDelete, new BoxLayoutData(new Margins(0))); toolBar.add(btnRefresh, new BoxLayoutData(new Margins(0))); v = new VerticalLayoutContainer(); v.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0))); v.add(dnd, new VerticalLayoutData(1, 1, new Margins(0))); add(v); forceLayout(); } catch (Exception e) { Log.error("Error opening wsResourceExplorerPanel"); e.printStackTrace(); } } private void refreshWSResourceExplorerPanel() { if (wsResourcesExplorerPanel != null) { wsResourcesExplorerPanel.refreshRootFolderView(); } } private void refreshWSResourceExplorerPanel(DataMinerWorkAreaEvent event) { try { if (v != null) { remove(v); create(event); } else { create(event); } } catch (Throwable e) { Log.error("Error in OutputDataSetsPanel: " + e.getLocalizedMessage()); e.printStackTrace(); } } private void deleteItem(SelectEvent event) { ItemDescription itemDescription = new ItemDescription( selectedItem.getId(), selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath(), selectedItem .getType().name()); DeleteItemRequestEvent deleteItemEvent = new DeleteItemRequestEvent( DataMinerWorkAreaElementType.OutputDataSets, itemDescription); EventBusProvider.INSTANCE.fireEvent(deleteItemEvent); Log.debug("Fired: " + deleteItemEvent); } private void openFile() { if (selectedItem != null && !selectedItem.isFolder()) { final ItemDescription itemDescription = new ItemDescription( selectedItem.getId(), selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath(), selectedItem.getType().name()); DataMinerPortletServiceAsync.INSTANCE.getPublicLink( itemDescription, new AsyncCallback() { @Override public void onFailure(Throwable caught) { if (caught instanceof ExpiredSessionServiceException) { EventBusProvider.INSTANCE .fireEvent(new SessionExpiredEvent()); } else { Log.error("Error open file: " + caught.getLocalizedMessage()); UtilsGXT3.alert("Error", caught.getLocalizedMessage()); } caught.printStackTrace(); } @Override public void onSuccess(String link) { Log.debug("Retrieved link: " + link); Window.open(link, itemDescription.getName(), ""); } }); } else { UtilsGXT3.info("Attention", "Select a file!"); } } }