From afd80186859f607e8e24a0f26aa31ca487e025b4 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Wed, 29 Jan 2014 16:34:57 +0000 Subject: [PATCH] it seems this version is quite complete git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@90702 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 4 +- .settings/com.google.gdt.eclipse.core.prefs | 2 +- pom.xml | 2 +- .../client/Presenter/Presenter.java | 73 +++++++++---------- .../targets/ClientRepeatableSequence.java | 52 ++++++++----- .../client/targets/ClientReportReference.java | 5 +- .../client/targets/ClientSequence.java | 2 + .../client/targets/SequenceWidget.java | 44 ++++++++--- .../server/servlet/ReportServiceImpl.java | 10 ++- src/main/webapp/WEB-INF/web.xml | 27 ++++--- 10 files changed, 140 insertions(+), 81 deletions(-) diff --git a/.classpath b/.classpath index 0e86e18..2bd8fb6 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -31,5 +31,5 @@ - + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index 82cc1e7..9bafc31 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -2,6 +2,6 @@ <<<<<<<=.mine >>>>>>>=.r71295 eclipse.preferences.version=1 -lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.7.6-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.7.9-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/pom.xml b/pom.xml index 610959f..c811936 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.user reports war - 4.7.6-SNAPSHOT + 4.7.9-SNAPSHOT gCube Reports Manager 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 c1959bd..7b0f547 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 @@ -537,42 +537,6 @@ public class Presenter { }); } - - /** - * Save the current report in a given folder - * - */ - public void exportReportToRSG() { - if (Window.confirm("Are you sure you want to commit the " + model.getTemplateName() + " into the VME Database?")) { - dlg.center(); - dlg.show(); - Model toSave = model.getSerializableModel(); - reportService.exportReportToRSG(currentVmeType, toSave, new AsyncCallback() { - public void onFailure(Throwable caught) { - dlg.hide(); - MessageBox.alert("Warning","Report Not Exported: " + caught.getMessage(), null); - } - public void onSuccess(VmeExportResponse response) { - dlg.hide(); - //write ok - if (response.isGloballySucceded()) - MessageBox.info("Exporting to RSG Operation","Report Exported Successfully", null); - //runtime exception - else if (response.getResponseMessageList().size() == 1 && response.getResponseMessageList().get(0).getResponseEntryCode().equals("RUNTIME_EXCEPTION")) { - MessageBox.alert("Exporting to RSG Operation Failed","Report Exporting has failed for the following reason:
" + response.getResponseMessageList().get(0).getResponseMessage(), null); - } - //user report compile exception - else { - String failReasons = ""; - for (VmeResponseEntry entry : response.getResponseMessageList()) { - failReasons += entry.getResponseMessage() + "
"; - } - MessageBox.alert("Exporting to RSG Operation Failed","Report Exporting has failed for the following reasons:
" + failReasons, null); - } - } - }); - } - } /** * Save the current report in a given folder * @@ -1299,6 +1263,7 @@ public class Presenter { public void onSuccess(Model toLoad) { if (toLoad != null) { loadModel(toLoad, type == VMETypeIdentifier.Vme); + currentVmeType = type; } else Window.alert("Could not Load Template Model, error on server."); @@ -1306,7 +1271,41 @@ public class Presenter { }); } - + /** + * Export To the Reports Store Gateway + * + */ + public void exportReportToRSG() { + if (Window.confirm("Are you sure you want to commit the " + model.getTemplateName() + " into the VME Database?")) { + dlg.center(); + dlg.show(); + Model toSave = model.getSerializableModel(); + reportService.exportReportToRSG(currentVmeType, toSave, new AsyncCallback() { + public void onFailure(Throwable caught) { + dlg.hide(); + MessageBox.alert("Warning","Report Not Exported: " + caught.getMessage(), null); + } + public void onSuccess(VmeExportResponse response) { + dlg.hide(); + //write ok + if (response.isGloballySucceded()) + MessageBox.info("Exporting to RSG Operation","Report Exported Successfully", null); + //runtime exception + else if (response.getResponseMessageList().size() == 1 && response.getResponseMessageList().get(0).getResponseEntryCode().equals("RUNTIME_EXCEPTION")) { + MessageBox.alert("Exporting to RSG Operation Failed","Report Exporting has failed for the following reason:
" + response.getResponseMessageList().get(0).getResponseMessage(), null); + } + //user report compile exception + else { + String failReasons = ""; + for (VmeResponseEntry entry : response.getResponseMessageList()) { + failReasons += entry.getResponseMessage() + "
"; + } + MessageBox.alert("Exporting to RSG Operation Failed","Report Exporting has failed for the following reasons:
" + failReasons, null); + } + } + }); + } + } private void deleteVMEReport(String reportId, String name, final VMETypeIdentifier type) { if (Window.confirm("Are you sure you want to delete " + name + " from the VME Database? (This action is Undoable)")) { diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java index 144cadb..925b90f 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java @@ -154,22 +154,30 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc GWT.log("Reference found"); ClientReportReference refGroup = (ClientReportReference) co.getContent(); if (refGroup != null) { + boolean keepLooking = true; for (Metadata prop : refGroup.getMetadata()) { - GWT.log("-" + prop.getAttribute()+":"+prop.getValue()); - //if there's a new component if ( prop.getAttribute().equals(SequenceWidget.RSG_BINDING_PROPERTY) && (extractIndexFromBindingContext(prop.getValue()) == -1) ) { prop.setValue(replaceIndexFromBindingContext(prop.getValue(), maxBindingContext)); + keepLooking = false; break; } - } - - //GWT.log("-" + prop.getAttribute()+":"+prop.getValue()); + } + if (keepLooking) { + for (Metadata prop : refGroup.getMetadata()) { + GWT.log("-" + prop.getAttribute()+":"+prop.getValue()); + //if there's a new component + if ( prop.getAttribute().equals(SequenceWidget.RSG_BINDING_CONTEXT_PROPERTY) && (extractIndexFromBindingContext(prop.getValue()) == -1) ) { + prop.setValue(replaceIndexFromBindingContext(prop.getValue(), maxBindingContext)); + break; + } + } + } } } //for any other component for (Metadata prop : co.getAllMetadata()) { //if there's a new component - if ( prop.getAttribute().equals(SequenceWidget.RSG_BINDING_PROPERTY) && (extractIndexFromBindingContext(prop.getValue()) == -1) ) { + if ( prop.getAttribute().equals(SequenceWidget.RSG_BINDING_CONTEXT_PROPERTY) && (extractIndexFromBindingContext(prop.getValue()) == -1) ) { prop.setValue(replaceIndexFromBindingContext(prop.getValue(), maxBindingContext)); break; } @@ -185,10 +193,12 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc * @return the integer into square brackets */ private int extractIndexFromBindingContext(String binding) { - int openSquareBracket = binding.lastIndexOf("[")+1; - int closeSquareBracket = binding.lastIndexOf("]"); - return Integer.parseInt(binding.substring(openSquareBracket, closeSquareBracket)); - + if (binding.contains("[") && binding.contains("]")) { + int openSquareBracket = binding.lastIndexOf("[")+1; + int closeSquareBracket = binding.lastIndexOf("]"); + return Integer.parseInt(binding.substring(openSquareBracket, closeSquareBracket)); + } + return 0; } /** * @@ -197,10 +207,13 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc * @return return the newIndex into square brackets */ private String replaceIndexFromBindingContext(String binding, int newIndex) { - int openSquareBracket = binding.lastIndexOf("[")+1; - int closeSquareBracket = binding.lastIndexOf("]"); - String toReturn = binding.substring(0, openSquareBracket) + newIndex + binding.substring(closeSquareBracket); - return toReturn; + if (binding.contains("[") && binding.contains("]")) { + int openSquareBracket = binding.lastIndexOf("[")+1; + int closeSquareBracket = binding.lastIndexOf("]"); + String toReturn = binding.substring(0, openSquareBracket) + newIndex + binding.substring(closeSquareBracket); + return toReturn; + } + return binding; } /** * @return specific cor RSG Case search for binding="geoRefList[3]" and return the max number into the square brackets @@ -209,7 +222,7 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc int max = 0; for (TemplateComponent co : groupedComponents) { for (Metadata prop : co.getAllMetadata()) { - if (prop.getAttribute().equals(SequenceWidget.RSG_BINDING_PROPERTY)) { + if (prop.getAttribute().equals(SequenceWidget.RSG_BINDING_CONTEXT_PROPERTY) || prop.getAttribute().equals(SequenceWidget.RSG_BINDING_PROPERTY)) { int currValue = extractIndexFromBindingContext(prop.getValue()); if (currValue > max) max = currValue; @@ -255,7 +268,7 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc public void setMetadata(List metas) { this.metas = metas; } - + public String getId() { if (id == null) return "-1"; @@ -266,7 +279,8 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc this.id = id; } - - - + @Override + public void cleanInModel() { + //not needed + } } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientReportReference.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientReportReference.java index b41f977..88105bc 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientReportReference.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientReportReference.java @@ -126,7 +126,10 @@ public class ClientReportReference extends Composite implements ClientSequence, public ArrayList getGroupedComponents() { return groupedComponents; } - + @Override + public void cleanInModel() { + this.id = "-1"; + } @Override public boolean add(String id, RepeatableSequence sequence, boolean isSingleRelation) { //(beacuse the ref is indented diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientSequence.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientSequence.java index ae861b4..f1c9e9c 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientSequence.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientSequence.java @@ -16,4 +16,6 @@ public interface ClientSequence { SequenceWidget remove(SequenceWidget toRemove); void AddButtonClicked(RepeatableSequence sequence); + + void cleanInModel(); } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java index 14f4163..fadd7c8 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java @@ -25,7 +25,8 @@ public class SequenceWidget extends Composite { /** * for the RSG case, whenever a new Sequence is added it sets the metadata named "bindingContext" to ...[-1] to identify it is new */ - protected static final String RSG_BINDING_PROPERTY = "bindingContext"; + protected static final String RSG_BINDING_PROPERTY = "binding"; + protected static final String RSG_BINDING_CONTEXT_PROPERTY = "bindingContext"; private static final int RSG_BINDING_PROPERTY_VALUE = -1; private VerticalPanel myPanel; @@ -73,10 +74,11 @@ public class SequenceWidget extends Composite { sComp.setPossibleContent(""); sComp.setMetadata(setPropertiesForRSG(sComp.getMetadata())); } - - + + TemplateComponent toAdd = new TemplateComponent(p.getModel(), sComp, p, false, null); if (isNew && sComp.getType() == ComponentType.REPORT_REFERENCE ) { //when adding a new Sequence blanks the Ref + GWT.log("Ref j=" + j); ClientReportReference cRef = (ClientReportReference) toAdd.getContent(); //need to clone the Tuple otherwise when blanking the ref it blanks the source too ArrayList clonedTuples = new ArrayList(); @@ -85,7 +87,7 @@ public class SequenceWidget extends Composite { clonedTuple.setKey("-1"); clonedTuples.add(clonedTuple); } - + ClientReportReference clonedRef = new ClientReportReference(p, cRef.getRefType(), clonedTuples, cRef.isSingleRelation()); clonedRef.setMetadata(setPropertiesForRSG(sComp.getMetadata())); //copy the metadata and signal is new toAdd.setContent(clonedRef); @@ -139,28 +141,49 @@ public class SequenceWidget extends Composite { */ private List setPropertiesForRSG(List properties) { List toReturn = new ArrayList(); - + //cloning metadata for (Metadata metadata : properties) { Metadata toAdd = new Metadata(metadata.getAttribute(), metadata.getValue()); toReturn.add(toAdd); } + boolean keepLooking = true; for (Metadata prop : toReturn) { - if (prop.getAttribute().equals(RSG_BINDING_PROPERTY)) { - prop.setValue(replaceIndexFromBindingContext(prop.getValue(), RSG_BINDING_PROPERTY_VALUE)); + if (prop.getAttribute().equals(RSG_BINDING_PROPERTY) && (prop.getValue().contains("[") && prop.getValue().contains("]")) ) { + prop.setValue(replaceIndexFromBinding(prop.getValue(), RSG_BINDING_PROPERTY_VALUE)); + keepLooking = false; + } + } + if (keepLooking) { + for (Metadata prop : toReturn) { + if (prop.getAttribute().equals(RSG_BINDING_CONTEXT_PROPERTY) && (prop.getValue().contains("[") && prop.getValue().contains("]")) ) { + prop.setValue(replaceIndexFromBindingContext(prop.getValue(), RSG_BINDING_PROPERTY_VALUE)); + } } } return toReturn; } - + private String replaceIndexFromBindingContext(String binding, int newIndex) { + String toReturn = ""; + GWT.log("got bindingContext = " + binding + " newIndex = " + newIndex); int openSquareBracket = binding.lastIndexOf("[")+1; int closeSquareBracket = binding.lastIndexOf("]"); - String toReturn = binding.substring(0, openSquareBracket) + newIndex + binding.substring(closeSquareBracket); + toReturn = binding.substring(0, openSquareBracket) + newIndex + binding.substring(closeSquareBracket); return toReturn; } + private String replaceIndexFromBinding(String binding, int newIndex) { + String toReturn = ""; + GWT.log("got binding = " + binding + " newIndex = " + newIndex); + int openSquareBracket = binding.lastIndexOf("[")+1; + int closeSquareBracket = binding.lastIndexOf("]"); + toReturn = binding.substring(0, openSquareBracket) + newIndex + binding.substring(closeSquareBracket); + return toReturn; + } + + protected boolean hideClearAssociationButton() { return buttonsWrapperPanel.remove(clearB); } @@ -192,12 +215,13 @@ public class SequenceWidget extends Composite { buttonsWrapperPanel.insert(clearB, 0); } -//TODO: + public void clearAssociation() { GWT.log("Clearing Association"); //in the MODEL leave only the delimiters ArrayList cleanedRef = new ArrayList(); + owner.cleanInModel(); for (BasicComponent bc : repSequence.getGroupedComponents()) { if (bc.getType() == ComponentType.REPEAT_SEQUENCE_DELIMITER) { cleanedRef.add(bc); 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 1516222..0a001dc 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 @@ -1619,7 +1619,15 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe //Use the RSG client to get a template for the report whose type is the last token (i.e. the corresponding class' 'simple name') //appearing in the VME model class name as stored in the 'type' metadata - CompiledReport template = rsgClient.getTemplate(new ReportType(refType.getId())); + CompiledReport template = null; + if (refType == VMETypeIdentifier.Vme) { + _log.info("getTemplate for VME Report"); + template = rsgClient.getTemplate(new ReportType(refType.getId())); + } + else { + _log.info("getTemplate for Ref Report"); + template = rsgClient.getRefTemplate(new ReportType(refType.getId())); + } CompiledReport toSend = null; try { toSend = new ReportManagerReportBuilder().extract(template, model); diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 3d9ac9d..90f40ee 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -15,15 +15,15 @@ - - - - + + + + - - - - + + + + WorkspaceLightService @@ -68,6 +68,15 @@ /reports/UploadService + + localUploadServlet + org.gcube.portlets.user.workspace.server.LocalUploadServlet + + + localUploadServlet + /reports/LocalUploadService + + DownloadService org.gcube.portlets.user.workspace.server.DownloadServlet @@ -107,7 +116,7 @@ convertServlet /reports/convert - + DownloadEncryptedReport org.gcube.portlets.user.reportgenerator.server.servlet.DownloadEncryptedReport