/** * */ package org.gcube.portlets.widgets.workspaceuploader.client.uploader; import java.util.HashMap; import java.util.Map; import org.gcube.portlets.widgets.workspaceuploader.client.events.HideMonitorEvent; import org.gcube.portlets.widgets.workspaceuploader.client.resource.ProgressBarCssAndImages; 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.Button; 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.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 VerticalPanel vpListUpload = new VerticalPanel(); private VerticalPanel mainPanel = new VerticalPanel(); private Map mapUploading = new HashMap(); private Map mapPanels = new HashMap(); private HandlerManager eventBus; private HorizontalPanel hpNoUploads = new HorizontalPanel(); private HTML labelNumbUpload = new HTML("Uploaded 0 of 0"); private HorizontalPanel hpBottomPanel = new HorizontalPanel(); private HorizontalPanel hpCloseMonitor = new HorizontalPanel(); static { ProgressBarCssAndImages.INSTANCE.css().ensureInjected(); } /** * Instantiates a new monitor panel. * * @param bus the event bus */ public MonitorPanel(HandlerManager bus) { this.eventBus = bus; initPanelNoUploads(); addCloseHandler(); //NUMBER OF UPLOADS hpBottomPanel.getElement().setId("hpBottomPanel"); // hpNumbUpload.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); hpBottomPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); hpBottomPanel.setWidth("100%"); hpBottomPanel.add(labelNumbUpload); // mainPanel.add(hpNumbUpload); // mainPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); //LIST OF UPLOADS vpListUpload.getElement().getStyle().setMargin(5, Unit.PX); // setHeight("500px"); vpListUpload.add(hpNoUploads); ScrollPanel scroll = new ScrollPanel(); scroll.add(vpListUpload); scroll.setHeight("200px"); // scroll.getElement().getStyle().setBorderStyle(BorderStyle.SOLID); // scroll.getElement().getStyle().setBorderWidth(1.0, Unit.PX); mainPanel.add(scroll); //CLOSE MONITOR // hpCloseMonitor.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); // hpCloseMonitor.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM); Button bClose = new Button("Close"); bClose.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { eventBus.fireEvent(new HideMonitorEvent()); } }); // hpNumbUpload.add(bClose); hpCloseMonitor.add(bClose); hpCloseMonitor.addStyleName("align-right-close"); hpBottomPanel.add(hpCloseMonitor); hpBottomPanel.getElement().getStyle().setMarginTop(5.0, Unit.PX); mainPanel.setWidth("100%"); mainPanel.add(hpBottomPanel); add(mainPanel); // RootPanel.get("workspace-uploader").add(verticalPanel); } private void updateNumberUpload(){ int numCompleted = 0; for (String uploadKey : mapUploading.keySet()) { WorkspaceUploaderItem uploader = mapUploading.get(uploadKey); if(uploader.getUploadStatus().equals(UPLOAD_STATUS.COMPLETED)) numCompleted++; } labelNumbUpload.setHTML("Uploaded "+numCompleted +" of "+mapUploading.size()); } private void initPanelNoUploads(){ hpNoUploads = new HorizontalPanel(); hpNoUploads.addStyleName("noUploads"); hpNoUploads.add(new HTML("No Uploads")); } private void removeNoUploads(){ try{ vpListUpload.remove(hpNoUploads); }catch(Exception e){ } } /** * Update workspace uploder. * * @param uploader the uploader */ public void updateWorkspaceUploder(WorkspaceUploaderItem uploader){ if(uploader==null){ GWT.log("Skipping update progress view, uploader is null"); return; } mapUploading.put(uploader.getClientUploadKey(), uploader); if(mapPanels.get(uploader.getClientUploadKey())!=null){ UploaderProgressView upv = mapPanels.get(uploader.getClientUploadKey()); upv.update(uploader); }else{ GWT.log("Skipping update progress view, uploader: "+uploader.getClientUploadKey() +" "+uploader.getFile().toString()+", not found!"); } updateNumberUpload(); } /** * 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); UploaderProgressView upv = new UploaderProgressView(uploader, fileName, eventBus); mapPanels.put(uploader.getClientUploadKey(), upv); VerticalPanel upvPanel = upv.getPanel(); upvPanel.addStyleName("upladerMargin"); // vpListUpload.insert(upvPanel, 0); vpListUpload.add(upvPanel); updateNumberUpload(); } /** * 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 uploader 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"); } }); } }