workspace-uploader/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/MonitorPanel.java

249 lines
8.2 KiB
Java

/**
*
*/
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<String, WorkspaceUploaderItem> mapUploading = new HashMap<String, WorkspaceUploaderItem>();
// private Map<String, Timer> mapTimer = new HashMap<String, Timer>();
// private Map<String, DialogBox> mapDialog= new HashMap<String, DialogBox>();
private Map<String, HorizontalPanel> mapPanels = new HashMap<String, HorizontalPanel>();
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 = "<div><img src='"+WorkspaceUploaderResources.getImageLoading().getUrl()+"'>";
String msg = StringUtil.ellipsize("Uploading "+fileName, MAX_CHARS, 0);
text+="<span style='margin-left:5px; vertical-align: top;'>"+msg+"</span>";
text+="</div>";
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 = "<div><img src='"+WorkspaceUploaderResources.getImageCancel().getUrl()+"'>";
String msg = StringUtil.ellipsize("Aborting upload: "+fileName, MAX_CHARS, 0);
text+="<span style='margin-left:5px; vertical-align: top;'>"+msg+"</span></div>";
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 = "<div><img src='"+WorkspaceUploaderResources.getImageCompleted().getUrl()+"'>";
text+="<span style='margin-left:5px; vertical-align: top;'>"+StringUtil.ellipsize(uploader.getFile().getFileName()+" uploaded successfully!", MAX_CHARS, 0)+"</span></div>";
// GWT.log(text);
html.setHTML(text);
html.setTitle(uploader.getStatusDescription());
break;
case FAILED:
text = "<div><img src='"+WorkspaceUploaderResources.getImageFailed().getUrl()+"'>";
text+="<span style='margin-left:5px; vertical-align: top;'>"+StringUtil.ellipsize(uploader.getStatusDescription(), MAX_CHARS, 0)+"</span></div>";
// GWT.log(text);
html.setHTML(text);
html.setTitle(uploader.getStatusDescription());
break;
case IN_PROGRESS:
text = "<div><img src='"+WorkspaceUploaderResources.getImageUpload().getUrl()+"'>";
String msg = StringUtil.ellipsize(uploader.getUploadProgress().getLastEvent().getReadPercentage()+"% "+uploader.getFile().getFileName(), MAX_CHARS, 0);
text+="<span style='margin-left:5px; vertical-align: top;'>"+msg+"</span>";
text+="</div>";
// 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 = "<div><img src='"+WorkspaceUploaderResources.getImageLoading().getUrl()+"'>";
String descr = "";
if(uploader.getFile()!=null && uploader.getFile().getFileName()!=null)
descr = uploader.getFile().getFileName();
else
descr = uploader.getStatusDescription();
text+="<span style='margin-left:5px; vertical-align: top;'>"+descr+"</span>";
text+="</div>";
// 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<Window>() {
@Override
public void onClose(CloseEvent<Window> event) {
// Window.alert("bye bye Closed");
}
});
}
}