/** * */ package org.gcube.portlets.widgets.workspaceuploader.client.uploader; import org.gcube.portlets.widgets.workspaceuploader.client.StringUtil; import org.gcube.portlets.widgets.workspaceuploader.client.events.CancelUploadEvent; import org.gcube.portlets.widgets.workspaceuploader.client.resource.WorkspaceUploaderResources; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.bar.ProgressBar; import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem; import com.google.gwt.core.shared.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.VerticalPanel; /** * The Class UploaderProgressView. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Oct 12, 2015 */ public class UploaderProgressView { private VerticalPanel vp = new VerticalPanel(); private static final int MAX_CHARS = 50; private HorizontalPanel hp = new HorizontalPanel(); private HorizontalPanel hpBar = new HorizontalPanel(); private HTML html = new HTML(); private ProgressBar bar = new ProgressBar(); private HandlerManager eventBus; private boolean cancel = false; private Image cancelImg = null; /** * Instantiates a new uploader progress view. * * @param uploader the uploader * @param fileName the file name * @param eventBus the event bus */ public UploaderProgressView(WorkspaceUploaderItem uploader, final String fileName, HandlerManager eventBus) { this.eventBus = eventBus; cancelImg = WorkspaceUploaderResources.getImageCancel(); cancelImg.setTitle("Cancel upload"); cancelImg.addStyleName("cancel-upload"); hpBar.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); hp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); String text = "
"; String msg = StringUtil.ellipsize("Uploading "+fileName, MAX_CHARS, 0); text+=""+msg+""; text+="
"; html.setHTML(text); html.setTitle("Uploading "+fileName); hp.add(html); bar.update(0); setVisibleBar(false); setVisibleCancel(false); vp.add(hp); hpBar.add(cancelImg); hpBar.add(bar); vp.add(hpBar); // vp.add(bar); } /** * @param b */ private void setVisibleCancel(boolean b) { cancelImg.setVisible(b); } public void setVisibleBar(boolean bool){ bar.setVisible(bool); } /** * Update. * * @param uploader the uploader */ public void update(WorkspaceUploaderItem uploader){ String text; try{ switch(uploader.getUploadStatus()){ case COMPLETED: setVisibleBar(true); text = "
"; String msgClt = null; if(uploader.getFile().getVersionName()!=null) //msgClt = "v. "+ uploader.getFile().getVersionName() +" of "+StringUtil.ellipsize(uploader.getFile().getFileName()+" uploaded successfully!", MAX_CHARS-10, 0); msgClt = StringUtil.ellipsize(uploader.getFile().getFileName(), MAX_CHARS-23, 0) +" v."+ uploader.getFile().getVersionName() +" uploaded successfully!"; else msgClt = StringUtil.ellipsize(uploader.getFile().getFileName()+" uploaded successfully!", MAX_CHARS, 0); text+=""+msgClt+"
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); try{ hpBar.clear(); }catch (Exception e) {} break; case FAILED: setVisibleBar(true); text = "
"; text+=""+StringUtil.ellipsize(uploader.getStatusDescription(), MAX_CHARS, 0)+"
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); // bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); try{ hpBar.clear(); }catch (Exception e) {} break; case ABORTED: setVisibleBar(true); text = "
"; text+=""+StringUtil.ellipsize(uploader.getStatusDescription(), MAX_CHARS, 0)+"
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); // bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); try{ hpBar.clear(); }catch (Exception e) {} break; case IN_PROGRESS: setVisibleBar(true); // text = "
"; text = "
"; String msg = ""; if(uploader.getUploadProgress().getLastEvent().getReadPercentage()<100){ msg = StringUtil.ellipsize(uploader.getFile().getFileName(), MAX_CHARS, 0); }else{ //is 100% String message = UploadingMessageBeforeCompleted.getMessage(uploader.getClientUploadKey(), uploader.getFile().getFileName()); msg = StringUtil.ellipsize(message, MAX_CHARS, 0); } text+=""+msg+""; text+="
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); //TODO CANCEL OPERATION MUST BE ENHANCED IN ORDER TO CANCELL ALL UPLOADS /* if(uploader.getUploadProgress().getLastEvent().getReadPercentage()!=100 && !cancel){ cancel = true; handleCancelUpload(uploader); setVisibleCancel(true); }else if(uploader.getUploadProgress().getLastEvent().getReadPercentage()==100 && cancel){ try{ setVisibleCancel(false); // hp.remove(cancelImg); }catch (Exception e) {} }*/ bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); break; case WAIT: setVisibleBar(false); text = "
"; String descr = ""; if(uploader.getFile()!=null && uploader.getFile().getFileName()!=null) descr = uploader.getFile().getFileName(); else descr = uploader.getStatusDescription(); text+=""+StringUtil.ellipsize(descr, MAX_CHARS, 0)+"
"; text+="
"; // GWT.log(text); html.setHTML(text); if(uploader.getUploadProgress()!=null && uploader.getUploadProgress().getLastEvent()!=null) bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); else bar.update(0); break; default: break; } }catch(Exception e) { GWT.log("error during update"); } } /** * Handle cancel upload. * * @param uploader the uploader * @return the image */ private Image handleCancelUpload(final WorkspaceUploaderItem uploader){ cancelImg.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { GWT.log("Click cancel"); String fileName = uploader.getFile()!=null? uploader.getFile().getFileName(): ""; if(Window.confirm("Confirm cancel uploading "+fileName+"?")){ hp.clear(); HTML html = new HTML(); hp.add(html); String text = "
"; String msg = StringUtil.ellipsize("Aborting upload: "+fileName, MAX_CHARS, 0); text+=""+msg+"
"; html.setHTML(text); eventBus.fireEvent(new CancelUploadEvent(uploader, UploaderProgressView.this, fileName)); } } }); return cancelImg; } /** * Gets the panel. * * @return the panel */ public VerticalPanel getPanel() { return vp; } }