diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java index 7720fff..9d62a0a 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java @@ -23,6 +23,7 @@ import org.gcube.portlets.user.reportgenerator.client.WorkspacePanel; import org.gcube.portlets.user.reportgenerator.client.dialog.AddBiblioEntryDialog; import org.gcube.portlets.user.reportgenerator.client.dialog.DeleteCitationsDialog; import org.gcube.portlets.user.reportgenerator.client.dialog.ReportStructureDialog; +import org.gcube.portlets.user.reportgenerator.client.dialog.SavingDialog; import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEvent; import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEventHandler; import org.gcube.portlets.user.reportgenerator.client.events.AddCommentEvent; @@ -89,9 +90,11 @@ public class Presenter { private ToolboxPanel toolBoxPanel; private TitleBar titleBar; - + private HorizontalPanel exportsPanel; + private final SavingDialog dlg = new SavingDialog(); + private UserBean currentUser; private String currentScope; /** @@ -99,6 +102,8 @@ public class Presenter { */ private TemplateModel model; + private String location; + private int currFocus; RichTextToolbar currentSelectedToolbar; @@ -122,14 +127,14 @@ public class Presenter { private void handleEvents() { - + eventBus.addHandler(ExportingCompletedEvent.TYPE, new ExportingCompletedEventHandler() { @Override public void onExportFinished(ExportingCompletedEvent event) { showExportSaveOptions(event.getFilePath(), event.getItemName(), event.getType()); } }); - + eventBus.addHandler(AddBiblioEvent.TYPE, new AddBiblioEventHandler() { public void onAddCitation(AddBiblioEvent event) { addCitation(event.getCitekey(), event.getCitetext()); @@ -148,10 +153,10 @@ public class Presenter { }); eventBus.addHandler(ReportExporterEvent.TYPE, new ReportExporterEventHandler() { - + @Override public void onCompletedExport(ReportExporterEvent event) { - + switch (event.getOperationResult()) { case SAVED: refreshWorkspace(); @@ -163,7 +168,7 @@ public class Presenter { default: break; } - + } }); @@ -179,14 +184,14 @@ public class Presenter { } }); -// eventBus.addHandler(ImportFinishedEvent.TYPE, new ImportFinishedEventHandler(){ -// public void onFinishedImport(ImportFinishedEvent event) { -// importDlg.hide(); -// openImportedFimesXML(event.getPathFile()); -// } -// -// }); - + // eventBus.addHandler(ImportFinishedEvent.TYPE, new ImportFinishedEventHandler(){ + // public void onFinishedImport(ImportFinishedEvent event) { + // importDlg.hide(); + // openImportedFimesXML(event.getPathFile()); + // } + // + // }); + eventBus.addHandler(ItemSelectionEvent.TYPE, new ItemSelectionEventHandler() { @SuppressWarnings("unchecked") public void onItemSelected(ItemSelectionEvent event) { @@ -204,7 +209,7 @@ public class Presenter { ReportGenerator.get().getScrollerPanel().setVerticalScrollPosition(top); } } - + } }); } @@ -256,15 +261,15 @@ public class Presenter { commonCommands = new CommonCommands(this); //importDlg = new FimesFileUploadWindow(eventBus); } - + public void showOpenOptions() { wp.showOpenOptions(); } - + public void showLoading() { wp.showLoading(); } - + /** * load the template to edit in the MODEL and in the VIEW * @param templateToOpen the name of the template to open without extension nor path @@ -322,7 +327,7 @@ public class Presenter { } return toReturn; } - + /** * look if a section with a specific metadata (that indicate sit is a biblio section) * exists in the current report model: @@ -470,7 +475,7 @@ public class Presenter { wp.getMainLayout().clear(); ReportGenerator.get().getScrollerPanel().setScrollPosition(0); } - + /** * Save the current report @@ -478,8 +483,21 @@ public class Presenter { * */ public void saveReport(String folderid, String name) { - model.storeInSession(); - model.saveReport(folderid, name); + dlg.center(); + dlg.show(); + Model toSave = model.getSerializableModel(); + reportService.saveReport(toSave, folderid, name, new AsyncCallback() { + public void onFailure(Throwable caught) { + dlg.hide(); + MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null); + } + public void onSuccess(Void result) { + dlg.hide(); + MessageBox.info("Saving Operation","Report Saved Successfully", null); + refreshWorkspace(); + } + }); + } @@ -488,8 +506,20 @@ public class Presenter { * */ public void saveReport() { - model.storeInSession(); - model.saveReport(); + dlg.center(); + dlg.show(); + Model toSave = model.getSerializableModel(); + reportService.saveReport(toSave, new AsyncCallback() { + public void onFailure(Throwable caught) { + dlg.hide(); + MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null); + } + public void onSuccess(Void result) { + dlg.hide(); + MessageBox.info("Saving Operation","Report Saved Successfully", null); + refreshWorkspace(); + } + }); } /** @@ -497,8 +527,20 @@ public class Presenter { * */ public void updateWorkflowDocument(boolean update) { - model.storeInSession(); - model.updateWorkflowDocument(update); + dlg.center(); + dlg.show(); + Model toSave = model.getSerializableModel(); + reportService.updateWorkflowDocument(toSave, update, new AsyncCallback() { + + public void onFailure(Throwable caught) { + dlg.hide(); + Window.alert("failed to update workflow document"); + } + public void onSuccess(Void result) { + dlg.hide(); + loadWorkflowLibraryApp(); + } + }); } /** @@ -510,7 +552,21 @@ public class Presenter { titleBar.setTemplateName(templateName); } - + /** + * Redirect to VRE Deployer Portlet + */ + private void loadWorkflowLibraryApp(){ + getUrl(); + location += "/../my-workflow-documents"; + Window.open(location, "_self", ""); + } + /** + * Get URL from browser + */ + public native void getUrl()/*-{ + this.@org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter::location = $wnd.location.href; + }-*/; + /** * @@ -643,7 +699,7 @@ public class Presenter { */ public void generateManifestation(final TemplateModel model, final ExportManifestationType type) { GWT.runAsync(ReportExporterPopup.class, new RunAsyncCallback() { - + @Override public void onSuccess() { ReportExporterPopup popup = new ReportExporterPopup(eventBus); @@ -663,15 +719,15 @@ public class Presenter { break; } } - + @Override public void onFailure(Throwable reason) { } }); - + } - - + + public void openAddCitationDialog() { AddBiblioEntryDialog dlg = new AddBiblioEntryDialog(eventBus); @@ -741,7 +797,7 @@ public class Presenter { titleBar.showPrevButton(); } - + /** * load the template to edit in the MODEL and in the VIEW * @param serializedpath the temp file to open @@ -789,7 +845,7 @@ public class Presenter { if (currPage > 1) titleBar.showPrevButton(); } - + /** * just clean the page */ @@ -848,7 +904,7 @@ public class Presenter { List pageElems = model.getSectionComponent(section); for (TemplateComponent component : pageElems) { - GWT.log("Reading component.. " + component.getType(), null); + //GWT.log("Reading component.. " + component.getType(), null); int uiX = component.getX(); int uiY= component.getY(); @@ -1125,7 +1181,7 @@ public class Presenter { public void onFailure(Throwable reason) { } }); - + } public HorizontalPanel getExportsPanel() { @@ -1136,7 +1192,7 @@ public class Presenter { public void setExportsPanel(HorizontalPanel exportsPanel) { this.exportsPanel = exportsPanel; } - + /** * when export is done this method is called * @param filePath @@ -1162,9 +1218,9 @@ public class Presenter { Window.alert("Error while trying exporting this report: " + caught.getMessage()); } }); - + } - + public void showExportPanel(final String filePath, final String itemName, final TypeExporter type, String tempFileId) { final ExportOptions exo = new ExportOptions(this, toolBoxPanel, filePath, itemName, type, reportService, tempFileId); exportsPanel.add(exo); @@ -1177,7 +1233,7 @@ public class Presenter { }; t.schedule(10); } - + public void clearExportPanel() { exportsPanel.clear(); } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java index af67937..264039b 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java @@ -63,16 +63,16 @@ public interface ReportService extends RemoteService{ * the report model is taken from the session * @param folderid the basket id where to save the report */ - void saveReport(String folderid, String newname); + void saveReport(Model toSave, String folderid, String newname); /** * the report model is taken from the session, the id also */ - void saveReport(); + void saveReport(Model toSave); Model getWorkflowDocumentFromDocumentLibrary(); - void updateWorkflowDocument(boolean update); + void updateWorkflowDocument(Model toSave, boolean update); void renewLock(); /** diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java index 45fa4ab..482a3e7 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java @@ -49,17 +49,10 @@ public interface ReportServiceAsync { */ void readTemplateFromSession( AsyncCallback callback); - /** - * @param callback . - * @param folderid . - */ - void saveReport(String folderid, String newname, AsyncCallback callback); + void saveReport(Model toSave, String folderid, String newname, + AsyncCallback callback); - /** - * - * @param callback . - */ - void saveReport(AsyncCallback callback); + void saveReport(Model toSave, AsyncCallback callback); /** * * @param currentHost @@ -68,7 +61,8 @@ public interface ReportServiceAsync { void getSessionInfo(String currentHost, AsyncCallback callback); void getWorkflowDocumentFromDocumentLibrary( AsyncCallback callback); - void updateWorkflowDocument(boolean update, AsyncCallback callback); + void updateWorkflowDocument(Model toSave, boolean update, + AsyncCallback callback); void renewLock(AsyncCallback callback); void readImportedModel(String tempPath, diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/SavingDialog.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/SavingDialog.java new file mode 100644 index 0000000..618ca0e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/SavingDialog.java @@ -0,0 +1,13 @@ +package org.gcube.portlets.user.reportgenerator.client.dialog; + +import org.gcube.portlets.user.gcubewidgets.client.popup.GCubeDialog; +import org.gcube.portlets.user.reportgenerator.client.uibinder.ShowSaving; + +public class SavingDialog extends GCubeDialog { + + public SavingDialog() { + super(false, true); + setText("Updating report, please wait ..."); + setWidget(new ShowSaving()); + } +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java index fa4afb3..946799e 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java @@ -332,10 +332,10 @@ public class TemplateComponent { this.content = spacer; break; case REPEAT_SEQUENCE: - GWT.log("FOUND SEQUENCE trying getGroup"); + //GWT.log("FOUND SEQUENCE trying getGroup"); RepeatableSequence repeatableSequence = (RepeatableSequence) sc.getPossibleContent(); - GWT.log("getGroup: " + repeatableSequence.toString()); + //GWT.log("getGroup: " + repeatableSequence.toString()); ClientRepeatableSequence rps = new ClientRepeatableSequence(presenter, repeatableSequence); this.content = rps; @@ -386,7 +386,6 @@ public class TemplateComponent { case DYNA_IMAGE: ClientImage da = (ClientImage) this.content; content = da.getDroppedImage().getElement().getAttribute("src"); - GWT.log("Poss Content=" + content); id = da.getIdInBasket(); idInBasket = id; if (((String) content).compareTo("") == 0) diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java index b46776d..1b0532d 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateModel.java @@ -354,11 +354,11 @@ public class TemplateModel { else { int insertIn = (isAdded) ? (i-1): i; newSections.put(""+i, sections.get(""+insertIn)); - GWT.log("Inserting " + insertIn + " into section " + i + " isAdded =" + (isAdded) , null); + //GWT.log("Inserting " + insertIn + " into section " + i + " isAdded =" + (isAdded) , null); } } this.sections = newSections; - GWT.log("NEW SECTION SIZE"+sections.size(), null); + //GWT.log("NEW SECTION SIZE"+sections.size(), null); } totalPages++; @@ -415,42 +415,21 @@ public class TemplateModel { return toReturn; } - - - - /** * * @param folderid . * @param name . */ - public void saveReport (String folderid, String name) { - modelService.saveReport(folderid, name, new AsyncCallback() { - public void onFailure(Throwable caught) { - MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null); - } - public void onSuccess(Void result) { - MessageBox.info("Saving Operation","Report Saved Successfully", null); - presenter.refreshWorkspace(); - } - }); - + public void saveReport (Model toSave, String folderid, String name) { + } /** * * */ - public void saveReport () { - modelService.saveReport(new AsyncCallback() { - public void onFailure(Throwable caught) { - MessageBox.alert("Warning","Report Not Saved: " + caught.getMessage(), null); - } - public void onSuccess(Void result) { - MessageBox.info("Saving Operation","Report Saved Successfully", null); - presenter.refreshWorkspace(); - } - }); + public void saveReport (Model toSave) { + } @@ -461,7 +440,7 @@ public class TemplateModel { * @param newHeight . */ public void resizeModelComponent(Widget toResize, int newWidth, int newHeight) { - GWT.log("LOOKING CORRESPONDANCE", null); + //GWT.log("LOOKING CORRESPONDANCE", null); String tcPage = ""+currentPage; TemplateSection singleSection = sections.get(tcPage); @@ -506,19 +485,21 @@ public class TemplateModel { } /** - * stores the current model in the session + * stores the current model in the session, not to be used anymore as images could have high payload */ + @Deprecated public void storeInSession() { - AsyncCallback callback = new AsyncCallback() { - public void onFailure(Throwable caught) { } - public void onSuccess(Object result) { } - }; - - Model modelToSend = getSerializableModel(); - - GWT.log("Storing in session: currpage = " + modelToSend.getCurrPage(), null); - - modelService.storeTemplateInSession(modelToSend, callback); +// Model modelToSend = getSerializableModel(); +// +// GWT.log("Storing in session: currpage = " + modelToSend.getCurrPage(), null); +// +// modelService.storeTemplateInSession(modelToSend, new AsyncCallback() { +// @Override +// public void onFailure(Throwable caught) { } +// @Override +// public void onSuccess(Void result) { +// } +// }); } //****** GETTERS n SETTERS @@ -675,34 +656,11 @@ public class TemplateModel { return false; } - public void updateWorkflowDocument(boolean update) { - modelService.updateWorkflowDocument(update, new AsyncCallback() { - - public void onFailure(Throwable caught) { - Window.alert("failed to update workflow document"); - - } - public void onSuccess(Void result) { - loadWorkflowLibraryApp(); - } - }); + public void updateWorkflowDocument(Model toSave, boolean update) { + } - private String location; - /** - * Redirect to VRE Deployer Portlet - */ - private void loadWorkflowLibraryApp(){ - getUrl(); - location += "/../my-workflow-documents"; - Window.open(location, "_self", ""); - } - /** - * Get URL from browser - */ - public native void getUrl()/*-{ - this.@org.gcube.portlets.user.reportgenerator.client.model.TemplateModel::location = $wnd.location.href; - }-*/; + } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowSaving.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowSaving.java new file mode 100644 index 0000000..ff80ea9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowSaving.java @@ -0,0 +1,27 @@ +package org.gcube.portlets.user.reportgenerator.client.uibinder; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.Widget; + +public class ShowSaving extends Composite { + public static final String LOADING = GWT.getModuleBaseURL() + "../images/reports-saving.gif"; + + private static ShowoadingUiBinder uiBinder = GWT + .create(ShowoadingUiBinder.class); + + interface ShowoadingUiBinder extends UiBinder { + } + + @UiField Image loadingReport; + + public ShowSaving() { + initWidget(uiBinder.createAndBindUi(this)); + loadingReport.setUrl(LOADING); + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowSaving.ui.xml b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowSaving.ui.xml new file mode 100644 index 0000000..de5360a --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowSaving.ui.xml @@ -0,0 +1,13 @@ + + + + + + + +
+ +
+
+
\ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java index 22da619..dc12c85 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/ReportServiceImpl.java @@ -704,6 +704,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe public void storeTemplateInSession(Model model) { ASLSession d4Session = getASLSession(); d4Session.setAttribute(CURRENT_REPORT_INSTANCE, model); + _log.trace("Saved in Session"); } @@ -785,98 +786,6 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } } - /** - * - * @param imageName the generated image name - * @param templateName the curr template name - * @return the url to the image - */ - private String getImageURL(String imageName, String templateName) { - StringBuilder sb = new StringBuilder("/usersArea/") - .append( getVreName()) - .append("/templates/") - .append(getUsername()) - .append("/CURRENT_OPEN/images/") - .append(imageName); - _log.info("getImageURL" + sb.toString()); - return sb.toString(); - - } - /** - * - * @param imageIDinBasket . - * @param pathToFile the directory where to save the file - * @param filename the filename to give to the newly created file - * @return the file imagename with its extension - */ - private String copyImageFromBasket(String imageIDinBasket, String pathToFile, String filename) { - - Workspace root = null; - try { - root = getWorkspaceArea(); - } catch (WorkspaceFolderNotFoundException e) {e.printStackTrace(); - } catch (InternalErrorException e) { e.printStackTrace(); - } catch (HomeNotFoundException e) { e.printStackTrace(); - } - - WorkspaceItem item = null; - try { - item = root.getItem(imageIDinBasket); - } catch (ItemNotFoundException e) { - e.printStackTrace(); - } - - _log.debug("pathToFile: " + pathToFile); - File f = null; - String toReturn =""; - if (item.getType() == WorkspaceItemType.FOLDER_ITEM) { - _log.debug("\nItem is a BASKET_ITEM"); - FolderItem bi = (FolderItem) item; - try { - File dir = new File(pathToFile); - _log.debug("DIR: " + pathToFile); - if (! dir.exists() ) - dir.mkdirs(); - - - - InputStream data = null; - - if (bi.getFolderItemType()==FolderItemType.EXTERNAL_IMAGE){ - _log.debug("EXTERNAL_IMAGE -|- " + item.getType()); - ExternalImage image = (ExternalImage)item; - data = image.getData(); - } - - if (bi.getFolderItemType()==FolderItemType.IMAGE_DOCUMENT){ - ImageDocument image = (ImageDocument)item; - if (image.getMimeType().equals("image/tiff")) - data = image.getThumbnail(); - else - data = image.getData(); - } - toReturn = filename + "." + getImageExtension(bi); - f = new File(pathToFile+toReturn); - OutputStream out = new FileOutputStream(f); - - byte buf[] = new byte[1024]; - int len; - while((len = data.read(buf))>0) - out.write(buf,0,len); - out.close(); - data.close(); - } - catch (IOException e){ - e.printStackTrace(); - } catch (InternalErrorException e) { - e.printStackTrace(); - } - } - _log.info("RETURNING: " + f.getAbsolutePath()); - return toReturn; - } - - /** * return a string for the file extension given a mimetype * @@ -964,7 +873,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe /** * used to save the report in the same folder * */ - public void saveReport() { + public void saveReport(Model toSave) { Workspace root = null; try { root = getWorkspaceArea(); @@ -988,7 +897,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } catch (InternalErrorException e) { e.printStackTrace(); } - saveReport(folderid, itemName); + saveReport(toSave, folderid, itemName); } @@ -996,9 +905,10 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe * @param save a report in another folder . * */ - public void saveReport(String folderid, String newname) { + public void saveReport(Model toSave, String folderid, String newname) { - Model model = readTemplateFromSession(); + Model model = toSave; + storeTemplateInSession(toSave); _log.info("Serializing Model in folder: " + folderid ); _log.info("Trying to convert dynamic images ... "); convertDynamicImagesFromHL(model); @@ -1457,7 +1367,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe /** * update the Workflow Document in session */ - public void updateWorkflowDocument(boolean update) { + public void updateWorkflowDocument(Model toSave, boolean update) { ASLSession session = getASLSession(); ServiceUtil myUtil = new ServiceUtil(session); @@ -1468,12 +1378,10 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe if (update) { _log.debug("SAVING in WorkflowDocument Library "); - model = (Model) session.getAttribute(CURRENT_REPORT_INSTANCE); - + model = (Model) toSave; _log.debug("Trying to convert dynamic images ... "); convertDynamicImagesFromHL(model); - boolean result = myUtil.writeModel(model, "CURRENT_OPEN", getVreName(), getUsername()); if (!result) { diff --git a/src/main/webapp/images/reports-saving.gif b/src/main/webapp/images/reports-saving.gif new file mode 100644 index 0000000..89ae681 Binary files /dev/null and b/src/main/webapp/images/reports-saving.gif differ