/** * */ package org.gcube.portlets.widgets.workspaceuploader.client.uploader; import java.util.HashMap; import java.util.Map; 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.shared.WorkspaceUploaderItem; import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem.UPLOAD_STATUS; import com.google.gwt.core.shared.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window.ClosingEvent; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; /** * The Class MonitorPanel. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Sep 24, 2015 */ public class MonitorPanel extends ScrollPanel{ private static final int MAX_CHARS = 50; private VerticalPanel verticalPanel = new VerticalPanel(); private Map mapUploading = new HashMap(); // private Map mapTimer = new HashMap(); // private Map mapDialog= new HashMap(); private Map mapPanels = new HashMap(); private HandlerManager eventBus; private HorizontalPanel hpNoUploads = new HorizontalPanel(); /** * Instantiates a new monitor panel. * * @param eventBus the event bus */ public MonitorPanel(HandlerManager eventBus) { this.eventBus = eventBus; initPanelNoUploads(); addCloseHandler(); verticalPanel.getElement().getStyle().setMargin(5, Unit.PX); add(verticalPanel); verticalPanel.add(hpNoUploads); // RootPanel.get("workspace-uploader").add(verticalPanel); } private void initPanelNoUploads(){ hpNoUploads = new HorizontalPanel(); hpNoUploads.addStyleName("noUploads"); hpNoUploads.add(new HTML("No Uploads")); } private void removeNoUploads(){ try{ verticalPanel.remove(hpNoUploads); }catch(Exception e){ } } /** * Update workspace uploder. * * @param uploader the uploader */ public void updateWorkspaceUploder(WorkspaceUploaderItem uploader){ mapUploading.put(uploader.getClientUploadKey(), uploader); if(mapPanels.get(uploader.getClientUploadKey())!=null){ HorizontalPanel hp = mapPanels.get(uploader.getClientUploadKey()); updateInfo(hp, uploader); }else{ HorizontalPanel hp = new HorizontalPanel(); updateInfo(hp, uploader); mapPanels.put(uploader.getClientUploadKey(), hp); verticalPanel.add(hp); } } /** * New workspace uploder. * * @param uploader the uploader * @param fileName the file name */ public void newWorkspaceUploder(WorkspaceUploaderItem uploader, final String fileName){ removeNoUploads(); mapUploading.put(uploader.getClientUploadKey(), uploader); HorizontalPanel hp = new HorizontalPanel(); HTML html = new HTML(); String text = "
"; String msg = StringUtil.ellipsize("Uploading "+fileName, MAX_CHARS, 0); text+=""+msg+""; text+="
"; html.setHTML(text); html.setTitle("Uploading "+fileName); hp.add(html); //TODO *************************************************REMOVE THIS // hp.add(handleCancelUplad(uploader, hp)); mapPanels.put(uploader.getClientUploadKey(), hp); verticalPanel.add(hp); } /** * Handle cancel upload. * * @param uploader the uploader * @param hp the hp * @return the image */ private Image handleCancelUpload(final WorkspaceUploaderItem uploader, final HorizontalPanel hp){ Image cancel = WorkspaceUploaderResources.getImageCancel(); cancel.setTitle("Cancel upload"); cancel.addStyleName("cancel-upload"); cancel.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, hp, fileName)); } } }); return cancel; } /** * Update info. * * @param hp the hp * @param uploader the uploader */ private void updateInfo(HorizontalPanel hp, WorkspaceUploaderItem uploader){ hp.clear(); HTML html = new HTML(); hp.add(html); String text; switch(uploader.getUploadStatus()){ case COMPLETED: text = "
"; text+=""+StringUtil.ellipsize(uploader.getFile().getFileName()+" uploaded successfully!", MAX_CHARS, 0)+"
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); break; case FAILED: text = "
"; text+=""+StringUtil.ellipsize(uploader.getStatusDescription(), MAX_CHARS, 0)+"
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); break; case IN_PROGRESS: text = "
"; String msg = StringUtil.ellipsize(uploader.getUploadProgress().getLastEvent().getReadPercentage()+"% "+uploader.getFile().getFileName(), MAX_CHARS, 0); text+=""+msg+""; text+="
"; // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); if(uploader.getUploadProgress().getLastEvent().getReadPercentage()!=100) hp.add(handleCancelUpload(uploader, hp)); break; case WAIT: text = "
"; String descr = ""; if(uploader.getFile()!=null && uploader.getFile().getFileName()!=null) descr = uploader.getFile().getFileName(); else descr = uploader.getStatusDescription(); text+=""+descr+""; text+="
"; // GWT.log(text); html.setHTML(text); // hp.add(handleCancelUplad(uploader, hp)); break; } } /** * Adds the close handler. */ private void addCloseHandler(){ Window.addWindowClosingHandler(new Window.ClosingHandler() { @Override public void onWindowClosing(ClosingEvent event) { // GWT.log("Closing"); String msg = ""; for (String uploadKey : mapUploading.keySet()) { WorkspaceUploaderItem uploader = mapUploading.get(uploadKey); GWT.log("Closing uploder status: "+uploader.getFile().getFileName() +" status: "+uploader.getUploadStatus()); if(uploader.getUploadStatus().equals(UPLOAD_STATUS.WAIT) || uploader.getUploadStatus().equals(UPLOAD_STATUS.IN_PROGRESS)) msg+=uploader.getFile().getFileName()+";"; } if(msg!=null && !msg.isEmpty()){ event.setMessage("Abort upload? "+msg); } } }); Window.addCloseHandler(new CloseHandler() { @Override public void onClose(CloseEvent event) { // Window.alert("bye bye Closed"); } }); } }