249 lines
8.2 KiB
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");
|
|
}
|
|
});
|
|
|
|
|
|
}
|
|
|
|
}
|