135 lines
4.5 KiB
Java
135 lines
4.5 KiB
Java
package org.gcube.portets.user.message_conversations.client.ui;
|
|
|
|
import org.gcube.portets.user.message_conversations.client.MessageServiceAsync;
|
|
import org.gcube.portets.user.message_conversations.shared.FileModel;
|
|
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSaveNotification.WorskpaceExplorerSaveNotificationListener;
|
|
import org.gcube.portlets.widgets.wsexplorer.client.save.WorkspaceExplorerSaveDialog;
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
|
|
|
|
import com.google.gwt.core.client.GWT;
|
|
import com.google.gwt.dom.client.Style.Unit;
|
|
import com.google.gwt.event.dom.client.ClickEvent;
|
|
import com.google.gwt.uibinder.client.UiBinder;
|
|
import com.google.gwt.uibinder.client.UiField;
|
|
import com.google.gwt.uibinder.client.UiHandler;
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
|
import com.google.gwt.user.client.ui.Composite;
|
|
import com.google.gwt.user.client.ui.Widget;
|
|
|
|
import gwt.material.design.client.ui.MaterialButton;
|
|
import gwt.material.design.client.ui.MaterialDropDown;
|
|
import gwt.material.design.client.ui.MaterialLink;
|
|
import gwt.material.design.client.ui.MaterialLoader;
|
|
import gwt.material.design.client.ui.MaterialToast;
|
|
|
|
public class AttachmentMenu extends Composite {
|
|
|
|
private static AttachmentMenuUiBinder uiBinder = GWT.create(AttachmentMenuUiBinder.class);
|
|
|
|
interface AttachmentMenuUiBinder extends UiBinder<Widget, AttachmentMenu> {
|
|
}
|
|
|
|
private enum DownloadStatus { FAILED, IN_PROGRESS, COMPLETE };
|
|
|
|
@UiField MaterialDropDown menu;
|
|
@UiField MaterialLink downloadButton;
|
|
@UiField MaterialLink saveWSButton;
|
|
|
|
private FileModel item;
|
|
private MaterialButton parentButton;
|
|
private MessageServiceAsync convService;
|
|
private DownloadStatus generatingDownloadURL = DownloadStatus.IN_PROGRESS;
|
|
|
|
public AttachmentMenu(MessageServiceAsync convService, MaterialButton parent, FileModel item) {
|
|
initWidget(uiBinder.createAndBindUi(this));
|
|
this.item = item;
|
|
this.parentButton = parent;
|
|
this.convService = convService;
|
|
convService.getAttachmentDownloadURL(item.getIdentifier(), new AsyncCallback<String>() {
|
|
@Override
|
|
public void onSuccess(String result) {
|
|
if (result != null) {
|
|
downloadButton.setHref(result);
|
|
generatingDownloadURL = DownloadStatus.COMPLETE;
|
|
}
|
|
else {
|
|
generatingDownloadURL = DownloadStatus.FAILED;
|
|
}
|
|
}
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
GWT.log("onFailure");
|
|
generatingDownloadURL = DownloadStatus.FAILED;
|
|
}
|
|
});
|
|
}
|
|
|
|
public void setSeparator(boolean separator) {
|
|
menu.setSeparator(separator);
|
|
}
|
|
|
|
public void setActivator(String activator) {
|
|
menu.setActivator(activator);
|
|
}
|
|
|
|
@UiHandler("downloadButton")
|
|
void onFileDownload(ClickEvent e) {
|
|
switch (generatingDownloadURL) {
|
|
case IN_PROGRESS:
|
|
e.stopPropagation();
|
|
MaterialToast.fireToast("Generating link is in progress, please retry in few seconds", "rounded");
|
|
break;
|
|
case COMPLETE:
|
|
MaterialToast.fireToast("Download in progress ... ", "rounded");
|
|
break;
|
|
case FAILED:
|
|
e.stopPropagation();
|
|
downloadButton.setHref("#");
|
|
MaterialToast.fireToast("Warning: could not generate a download link, some error occurred in the server", "rounded");
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
@UiHandler("saveWSButton")
|
|
void onSave2WS(ClickEvent e) {
|
|
final WorkspaceExplorerSaveDialog navigator = new WorkspaceExplorerSaveDialog(item.getName(), true);
|
|
navigator.addStyleName("BS-Navigator");;
|
|
navigator.getElement().getStyle().setLeft(50, Unit.PCT);
|
|
WorskpaceExplorerSaveNotificationListener listener = new WorskpaceExplorerSaveNotificationListener(){
|
|
|
|
@Override
|
|
public void onSaving(Item parent, String fileName) {
|
|
GWT.log("onSaving parent: "+parent +", fileName" +fileName);
|
|
navigator.hide();
|
|
MaterialLoader.showProgress(true, parentButton);
|
|
convService.saveAttachmentToWorkspaceFolder(item.getIdentifier(), parent.getId(), new AsyncCallback<Boolean>() {
|
|
@Override
|
|
public void onFailure(Throwable caught) {
|
|
MaterialLoader.showProgress(false, parentButton);
|
|
MaterialToast.fireToast("Warning: could not save this file to the selected Workspace folder, please retry", "rounded");
|
|
}
|
|
@Override
|
|
public void onSuccess(Boolean result) {
|
|
MaterialLoader.showProgress(false, parentButton);
|
|
MaterialToast.fireToast("File " +fileName+" Saved succesfully");
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void onAborted() {
|
|
GWT.log("onAborted");
|
|
}
|
|
|
|
@Override
|
|
public void onFailed(Throwable throwable) {
|
|
GWT.log("onFailed");
|
|
}
|
|
};
|
|
|
|
navigator.addWorkspaceExplorerSaveNotificationListener(listener);
|
|
navigator.show();
|
|
}
|
|
}
|