371 lines
13 KiB
Java
371 lines
13 KiB
Java
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.tools.explorer;
|
|
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.BinaryCodeSetEvent;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.DeleteItemEvent;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.MainCodeSetEvent;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ProjectStatusEvent;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils.UtilsGXT3;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.workspace.DownloadWidget;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectSupportBashEdit;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectSupportBlackBox;
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.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 org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
|
|
|
|
import com.allen_sauer.gwt.log.client.Log;
|
|
import com.google.gwt.event.shared.EventBus;
|
|
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.AccordionLayoutContainer.AccordionLayoutAppearance;
|
|
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
|
|
import com.sencha.gxt.widget.core.client.container.MarginData;
|
|
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
|
|
*
|
|
*
|
|
*/
|
|
public class ExplorerProjectPanel extends ContentPanel {
|
|
|
|
private EventBus eventBus;
|
|
private Item selectedItem;
|
|
private MultipleDNDUpload dnd;
|
|
private WorkspaceResourcesExplorerPanel wsResourcesExplorerPanel;
|
|
private TextButton btnSetMain;
|
|
private TextButton btnOpen;
|
|
private TextButton btnDelete;
|
|
private TextButton btnReload;
|
|
|
|
public ExplorerProjectPanel(EventBus eventBus) {
|
|
super();
|
|
Log.debug("ExplorerProjectPanel");
|
|
this.eventBus = eventBus;
|
|
|
|
// msgs = GWT.create(ServiceCategoryMessages.class);
|
|
init();
|
|
bindToEvents();
|
|
|
|
}
|
|
|
|
public ExplorerProjectPanel(EventBus eventBus, AccordionLayoutAppearance appearance) {
|
|
super(appearance);
|
|
Log.debug("ExplorerProjectPanel");
|
|
this.eventBus = eventBus;
|
|
init();
|
|
bindToEvents();
|
|
|
|
}
|
|
|
|
private void init() {
|
|
setId("ExplorerProjectPanel");
|
|
forceLayoutOnResize = true;
|
|
setBodyBorder(true);
|
|
setBorders(true);
|
|
setHeaderVisible(true);
|
|
setResize(true);
|
|
setAnimCollapse(false);
|
|
setHeadingText("Project Explorer");
|
|
|
|
}
|
|
|
|
private void bindToEvents() {
|
|
|
|
eventBus.addHandler(ProjectStatusEvent.TYPE, new ProjectStatusEvent.ProjectStatusEventHandler() {
|
|
|
|
@Override
|
|
public void onProjectStatus(ProjectStatusEvent event) {
|
|
Log.debug("ExplorerProjectPanel Catch Event ProjectStatus: " + event);
|
|
|
|
manageProjectStatusEvents(event);
|
|
|
|
}
|
|
});
|
|
|
|
Log.debug("ExplorerProjectPanel bind to Event do!");
|
|
}
|
|
|
|
private void manageProjectStatusEvents(ProjectStatusEvent event) {
|
|
if (event == null || event.getProjectStatusEventType() == null) {
|
|
Log.error("Invalid event: " + event);
|
|
return;
|
|
}
|
|
Log.debug("Project Status Event: " + event.getProjectStatusEventType());
|
|
switch (event.getProjectStatusEventType()) {
|
|
case START:
|
|
break;
|
|
case OPEN:
|
|
case UPDATE:
|
|
case ADD_RESOURCE:
|
|
case DELETE_RESOURCE:
|
|
case DELETE_MAIN_CODE:
|
|
create(event);
|
|
break;
|
|
case SAVE:
|
|
case MAIN_CODE_SET:
|
|
case BINARY_CODE_SET:
|
|
case SOFTWARE_PUBLISH:
|
|
case SOFTWARE_REPACKAGE:
|
|
case EXPLORER_REFRESH:
|
|
reloadWSResourceExplorerPanel();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void create(ProjectStatusEvent event) {
|
|
try {
|
|
|
|
wsResourcesExplorerPanel = new WorkspaceResourcesExplorerPanel(
|
|
event.getProject().getProjectFolder().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.getProject().getProjectFolder().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
|
|
if (event.getProject().getProjectConfig().getProjectSupport() instanceof ProjectSupportBlackBox
|
|
|| event.getProject().getProjectConfig().getProjectSupport() instanceof ProjectSupportBashEdit) {
|
|
btnSetMain = new TextButton("Set Code");
|
|
btnSetMain.setIcon(StatAlgoImporterResources.INSTANCE.add16());
|
|
btnSetMain.setScale(ButtonScale.SMALL);
|
|
btnSetMain.setIconAlign(IconAlign.LEFT);
|
|
btnSetMain.setToolTip("Set code");
|
|
btnSetMain.addSelectHandler(new SelectHandler() {
|
|
|
|
@Override
|
|
public void onSelect(SelectEvent event) {
|
|
setBinaryCode(event);
|
|
}
|
|
|
|
});
|
|
} else {
|
|
|
|
btnSetMain = new TextButton("Set Main");
|
|
btnSetMain.setIcon(StatAlgoImporterResources.INSTANCE.add16());
|
|
btnSetMain.setScale(ButtonScale.SMALL);
|
|
btnSetMain.setIconAlign(IconAlign.LEFT);
|
|
btnSetMain.setToolTip("Set main code");
|
|
btnSetMain.addSelectHandler(new SelectHandler() {
|
|
|
|
@Override
|
|
public void onSelect(SelectEvent event) {
|
|
setMainCode(event);
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
});
|
|
|
|
btnReload = new TextButton("Reload");
|
|
btnReload.setIcon(StatAlgoImporterResources.INSTANCE.reload16());
|
|
btnReload.setScale(ButtonScale.SMALL);
|
|
btnReload.setIconAlign(IconAlign.LEFT);
|
|
btnReload.setToolTip("Reload");
|
|
btnReload.addSelectHandler(new SelectHandler() {
|
|
|
|
@Override
|
|
public void onSelect(SelectEvent event) {
|
|
reloadWSResourceExplorerPanel();
|
|
}
|
|
|
|
});
|
|
|
|
ToolBar toolBar = new ToolBar();
|
|
toolBar.add(btnSetMain, new BoxLayoutData(new Margins(0)));
|
|
toolBar.add(btnOpen, new BoxLayoutData(new Margins(0)));
|
|
toolBar.add(btnDelete, new BoxLayoutData(new Margins(0)));
|
|
toolBar.add(btnReload, new BoxLayoutData(new Margins(0)));
|
|
|
|
VerticalLayoutContainer 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, new MarginData(new Margins(0)));
|
|
forceLayout();
|
|
|
|
} catch (Throwable e) {
|
|
Log.error("Error opening wsResourceExplorerPanel: " + e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
protected void reloadWSResourceExplorerPanel() {
|
|
if (wsResourcesExplorerPanel != null) {
|
|
wsResourcesExplorerPanel.refreshRootFolderView();
|
|
}
|
|
|
|
}
|
|
|
|
private void deleteItem(SelectEvent event) {
|
|
Log.debug("Selected Item: " + selectedItem);
|
|
if (selectedItem != null) {
|
|
ItemDescription itemDescription = new ItemDescription(selectedItem.getId(), selectedItem.getName(),
|
|
selectedItem.getOwner(), selectedItem.getPath(), selectedItem.getType().name());
|
|
DeleteItemEvent deleteItemEvent = new DeleteItemEvent(itemDescription);
|
|
Log.debug("DeleteItemEvent: " + itemDescription);
|
|
eventBus.fireEvent(deleteItemEvent);
|
|
Log.debug("Fired: " + deleteItemEvent);
|
|
} else {
|
|
UtilsGXT3.info("Attention", "Select a item!");
|
|
}
|
|
}
|
|
|
|
private void setMainCode(SelectEvent event) {
|
|
Log.debug("Set Code");
|
|
if (selectedItem != null && selectedItem.getType() != ItemType.FOLDER
|
|
&& selectedItem.getType() != ItemType.PRIVATE_FOLDER && selectedItem.getType() != ItemType.SHARED_FOLDER
|
|
&& selectedItem.getType() != ItemType.VRE_FOLDER) {
|
|
setMainCodeData();
|
|
} else {
|
|
UtilsGXT3.info("Attention", "Select a valid file to be used as main!");
|
|
}
|
|
}
|
|
|
|
private void setMainCodeData() {
|
|
ItemDescription itemDescription = new ItemDescription(selectedItem.getId(), selectedItem.getName(),
|
|
selectedItem.getOwner(), selectedItem.getPath(), selectedItem.getType().name());
|
|
MainCodeSetEvent mainCodeSetEvent = new MainCodeSetEvent(itemDescription);
|
|
eventBus.fireEvent(mainCodeSetEvent);
|
|
Log.debug("Fired: " + mainCodeSetEvent);
|
|
|
|
}
|
|
|
|
private void setBinaryCode(SelectEvent event) {
|
|
Log.debug("Set Code");
|
|
if (selectedItem != null && selectedItem.getType() != ItemType.FOLDER
|
|
&& selectedItem.getType() != ItemType.PRIVATE_FOLDER && selectedItem.getType() != ItemType.SHARED_FOLDER
|
|
&& selectedItem.getType() != ItemType.VRE_FOLDER) {
|
|
setBinaryCodeData();
|
|
} else {
|
|
UtilsGXT3.info("Attention", "Select a valid file to be used!");
|
|
}
|
|
}
|
|
|
|
private void setBinaryCodeData() {
|
|
ItemDescription itemDescription = new ItemDescription(selectedItem.getId(), selectedItem.getName(),
|
|
selectedItem.getOwner(), selectedItem.getPath(), selectedItem.getType().name());
|
|
BinaryCodeSetEvent binaryCodeSetEvent = new BinaryCodeSetEvent(itemDescription);
|
|
eventBus.fireEvent(binaryCodeSetEvent);
|
|
Log.debug("Fired: " + binaryCodeSetEvent);
|
|
|
|
}
|
|
|
|
private void openFile() {
|
|
if (selectedItem != null) {
|
|
DownloadWidget downloadWidget = new DownloadWidget(eventBus);
|
|
downloadWidget.download(selectedItem.getId());
|
|
} else {
|
|
UtilsGXT3.info("Attention", "Select a file!");
|
|
}
|
|
}
|
|
|
|
}
|