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