From ebbbdcfee391d459818cb0f4238d5d1cff3468a1 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Thu, 2 May 2013 15:00:36 +0000 Subject: [PATCH] 2.14 git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@74441 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 4 +- .settings/com.google.gdt.eclipse.core.prefs | 4 +- distro/changelog.xml | 4 ++ pom.xml | 2 +- .../client/Presenter/Presenter.java | 53 ++++++++++-------- .../client/WorkspacePanel.java | 9 +++ .../client/uibinder/OpenOptions.java | 2 +- .../client/uibinder/ShowLoading.java | 27 +++++++++ .../client/uibinder/ShowLoading.ui.xml | 13 +++++ src/main/webapp/images/reports-loader.gif | Bin 0 -> 17683 bytes 10 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.java create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.ui.xml create mode 100644 src/main/webapp/images/reports-loader.gif diff --git a/.classpath b/.classpath index 0bc30bd..4c881c3 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -30,5 +30,5 @@ - + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index 7c32945..e29041e 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,8 +1,8 @@ -#Mon Mar 18 11:42:27 CET 2013 +#Thu May 02 16:46:18 CEST 2013 =\=\=\=\=\=\= <<<<<<<=.mine >>>>>>>=.r71295 eclipse.preferences.version=1 -lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.1.0-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.2.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/distro/changelog.xml b/distro/changelog.xml index 02a19d2..70b6044 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,8 @@ + +Lots of improvements in the UI +Embedded images in reports + Top menu restyled adapted to new Workspace Tree diff --git a/pom.xml b/pom.xml index b6f8ee9..7f29d89 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.user reports war - 4.1.0-SNAPSHOT + 4.2.0-SNAPSHOT gCube Reports Portlet gCube Reports Portlet. 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 41e792f..7720fff 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 @@ -260,6 +260,35 @@ public class Presenter { 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 + * @param templateObjectID the id in the folder of the template to open + * @param isTemplate true if you are opening a template false if you are opening a report + */ + public void openTemplate(String templateToOpen, String templateObjectID, final boolean isTemplate) { + showLoading(); + //will asyncrously return a Serializable Model instance read from disk + model.getModelService().readModel(templateToOpen, templateObjectID, isTemplate, false, new AsyncCallback() { + @Override + public void onSuccess(Model toLoad) { + if (toLoad != null) + loadModel(toLoad); + else + Window.alert("Could not Load template, error on server: "); + } + @Override + public void onFailure(Throwable caught) { + Window.alert("Could not Load template, please try again later: " + caught.getMessage()); + + } + }); + } public void showSectionUserCommentsTooltips() { TemplateSection currSection = model.getSection(model.getCurrentPage()); @@ -712,29 +741,7 @@ public class Presenter { titleBar.showPrevButton(); } - /** - * 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 - * @param templateObjectID the id in the folder of the template to open - * @param isTemplate true if you are opening a template false if you are opening a report - */ - public void openTemplate(String templateToOpen, String templateObjectID, final boolean isTemplate) { - //will asyncrously return a Serializable Model instance read from disk - model.getModelService().readModel(templateToOpen, templateObjectID, isTemplate, false, new AsyncCallback() { - @Override - public void onSuccess(Model toLoad) { - if (toLoad != null) - loadModel(toLoad); - else - Window.alert("Could not Load template, error on server: "); - } - @Override - public void onFailure(Throwable caught) { - Window.alert("Could not Load template, please try again later: " + caught.getMessage()); - - } - }); - } + /** * load the template to edit in the MODEL and in the VIEW * @param serializedpath the temp file to open diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/WorkspacePanel.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/WorkspacePanel.java index 0092ca2..cab4c69 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/WorkspacePanel.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/WorkspacePanel.java @@ -6,10 +6,13 @@ import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel; import org.gcube.portlets.user.reportgenerator.client.targets.DoubleColumnPanel; import org.gcube.portlets.user.reportgenerator.client.uibinder.OpenOptions; +import org.gcube.portlets.user.reportgenerator.client.uibinder.ShowLoading; +import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; @@ -20,6 +23,7 @@ import com.google.gwt.user.client.ui.Widget; */ public class WorkspacePanel extends Composite { + /** * the model */ @@ -77,6 +81,11 @@ public class WorkspacePanel extends Composite { mainLayout.add(new OpenOptions(presenter)); } + public void showLoading() { + mainLayout.clear(); + mainLayout.add(new ShowLoading()); + } + /** * * @param w . diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java index e23d2ff..df25e20 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java @@ -67,7 +67,7 @@ public class OpenOptions extends Composite { cmd.openTemplate.execute(); break; case UPLOAD: - + p.showUploadFilePopup(); break; default: break; diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.java new file mode 100644 index 0000000..52d72df --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.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 ShowLoading extends Composite { + public static final String LOADING = GWT.getModuleBaseURL() + "../images/reports-loader.gif"; + + private static ShowoadingUiBinder uiBinder = GWT + .create(ShowoadingUiBinder.class); + + interface ShowoadingUiBinder extends UiBinder { + } + + @UiField Image loadingReport; + + public ShowLoading() { + initWidget(uiBinder.createAndBindUi(this)); + loadingReport.setUrl(LOADING); + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.ui.xml b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.ui.xml new file mode 100644 index 0000000..7871ab5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/ShowLoading.ui.xml @@ -0,0 +1,13 @@ + + + + + + + +
+ +
+
+
\ No newline at end of file diff --git a/src/main/webapp/images/reports-loader.gif b/src/main/webapp/images/reports-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..3be87320f701f954e67455bf59210ec425eddc38 GIT binary patch literal 17683 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 literal 0 HcmV?d00001