From b082b54aa7951e888f954b83653fb1a795389658 Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Tue, 17 Dec 2013 18:19:51 +0000 Subject: [PATCH] added discovery of RSG WebService git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@87128 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 6 +- .settings/com.google.gdt.eclipse.core.prefs | 2 +- .settings/org.eclipse.wst.common.component | 24 - pom.xml | 2 +- .../reportgenerator/client/Headerbar.java | 8 +- .../client/Presenter/Presenter.java | 24 +- .../client/dialog/ImportVMEReportDialog.java | 22 +- .../client/model/TemplateComponent.java | 12 + .../targets/ClientRepeatableSequence.java | 4 +- .../client/targets/ClientReportReference.java | 12 +- .../client/targets/ClientSequence.java | 2 +- .../client/targets/SequenceWidget.java | 14 +- .../client/toolbar/Images.java | 105 ++++ .../RichTextToolbar$Strings.properties | 41 ++ .../client/toolbar/RichTextToolbar.java | 518 ++++++++++++++++++ .../client/toolbar/backColors.gif | Bin 0 -> 104 bytes .../reportgenerator/client/toolbar/bold.gif | Bin 0 -> 864 bytes .../client/toolbar/createLink.gif | Bin 0 -> 118 bytes .../client/toolbar/createLink.png | Bin 0 -> 570 bytes .../client/toolbar/fontSizes.gif | Bin 0 -> 96 bytes .../reportgenerator/client/toolbar/fonts.gif | Bin 0 -> 147 bytes .../client/toolbar/foreColors.gif | Bin 0 -> 173 bytes .../reportgenerator/client/toolbar/hr.gif | Bin 0 -> 67 bytes .../client/toolbar/importing.png | Bin 0 -> 516 bytes .../reportgenerator/client/toolbar/indent.gif | Bin 0 -> 82 bytes .../client/toolbar/insertImage.png | Bin 0 -> 337 bytes .../reportgenerator/client/toolbar/italic.gif | Bin 0 -> 79 bytes .../client/toolbar/justifyCenter.gif | Bin 0 -> 70 bytes .../client/toolbar/justifyLeft.gif | Bin 0 -> 71 bytes .../client/toolbar/justifyRight.gif | Bin 0 -> 855 bytes .../reportgenerator/client/toolbar/newdoc.png | Bin 0 -> 565 bytes .../reportgenerator/client/toolbar/ol.gif | Bin 0 -> 76 bytes .../client/toolbar/open_report.png | Bin 0 -> 762 bytes .../client/toolbar/open_template.png | Bin 0 -> 757 bytes .../client/toolbar/outdent.gif | Bin 0 -> 82 bytes .../client/toolbar/removeFormat.gif | Bin 0 -> 360 bytes .../client/toolbar/removeFormat.png | Bin 0 -> 335 bytes .../client/toolbar/removeLink.gif | Bin 0 -> 895 bytes .../client/toolbar/removeLink.png | Bin 0 -> 657 bytes .../reportgenerator/client/toolbar/save.png | Bin 0 -> 674 bytes .../client/toolbar/strikeThrough.gif | Bin 0 -> 80 bytes .../client/toolbar/subscript.gif | Bin 0 -> 80 bytes .../client/toolbar/superscript.gif | Bin 0 -> 80 bytes .../reportgenerator/client/toolbar/ul.gif | Bin 0 -> 863 bytes .../client/toolbar/underline.gif | Bin 0 -> 88 bytes .../server/servlet/ReportServiceImpl.java | 70 ++- .../reportgenerator/shared/SessionInfo.java | 20 +- src/main/webapp/ReportGenerator.css | 8 +- 48 files changed, 827 insertions(+), 67 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/Images.java create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar$Strings.properties create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar.java create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/backColors.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/bold.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/createLink.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/createLink.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/fontSizes.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/fonts.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/foreColors.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/hr.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/importing.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/indent.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/insertImage.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/italic.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/justifyCenter.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/justifyLeft.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/justifyRight.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/newdoc.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/ol.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/open_report.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/open_template.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/outdent.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/removeFormat.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/removeFormat.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/removeLink.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/removeLink.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/save.png create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/strikeThrough.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/subscript.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/superscript.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/ul.gif create mode 100644 src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/underline.gif diff --git a/.classpath b/.classpath index 82085be..a317ac4 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -26,10 +26,10 @@ - + - + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index 7e971b7..7eb289d 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.6.16-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.6.17-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 1899c5c..593edac 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -7,30 +7,6 @@ uses - - uses - - - uses - - - uses - - - uses - - - uses - - - uses - - - uses - - - uses - diff --git a/pom.xml b/pom.xml index f65c55b..3decdc8 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.user reports war - 4.6.16-SNAPSHOT + 4.6.17-SNAPSHOT gCube Reports Manager gCube Reports Portlet. diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Headerbar.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Headerbar.java index 54876f6..ace4fd0 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Headerbar.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Headerbar.java @@ -362,10 +362,10 @@ public class Headerbar extends Composite{ // }); // importMenu.addItem(item); - - importMenu.addSeparator(); - MenuItem exportVME = new MenuItem("Export Current to VME-DB", true, importVMEReport); - importMenu.addItem(exportVME); +// +// importMenu.addSeparator(); +// MenuItem exportVME = new MenuItem("Export Current to VME-DB", true, importVMEReport); +// importMenu.addItem(exportVME); return toReturn; } 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 dcbf43f..1bd220d 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 @@ -3,11 +3,11 @@ package org.gcube.portlets.user.reportgenerator.client.Presenter; import java.util.HashMap; import java.util.List; -import org.gcube.portlets.d4sreporting.common.client.uicomponents.richtext.RichTextToolbar; import org.gcube.portlets.d4sreporting.common.shared.BasicSection; import org.gcube.portlets.d4sreporting.common.shared.Metadata; import org.gcube.portlets.d4sreporting.common.shared.Model; import org.gcube.portlets.d4sreporting.common.shared.ReportReferences; +import org.gcube.portlets.d4sreporting.common.shared.Tuple; import org.gcube.portlets.user.reportgenerator.client.Headerbar; import org.gcube.portlets.user.reportgenerator.client.ReportGenerator; import org.gcube.portlets.user.reportgenerator.client.ReportService; @@ -51,6 +51,7 @@ import org.gcube.portlets.user.reportgenerator.client.targets.HeadingTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.TSArea; import org.gcube.portlets.user.reportgenerator.client.targets.TextTableImage; +import org.gcube.portlets.user.reportgenerator.client.toolbar.RichTextToolbar; import org.gcube.portlets.user.reportgenerator.client.uibinder.ExportOptions; import org.gcube.portlets.user.reportgenerator.shared.SessionInfo; import org.gcube.portlets.user.reportgenerator.shared.UserBean; @@ -126,6 +127,8 @@ public class Presenter { private CommonCommands commonCommands; private boolean menuForWorkflowDocument = false; + + private boolean isVME = false; /** * eventbus events handler */ @@ -251,6 +254,8 @@ public class Presenter { public void onSuccess(final SessionInfo sessionInfo) { currentUser = sessionInfo.getUsername(); currentScope = sessionInfo.getScope(); + isVME = sessionInfo.isVME(); + addTextToolBar(true); if (sessionInfo.isWorkflowDocument()) { model.getModelService().getWorkflowDocumentFromDocumentLibrary(new AsyncCallback() { @@ -267,17 +272,17 @@ public class Presenter { } }); } - else { + else { //not in workflow mode check if a report was open model.getModelService().readTemplateFromSession(new AsyncCallback() { public void onFailure(Throwable caught) { dlg.hide(); } public void onSuccess(Model result) { - dlg.hide(); - if (result != null) { + dlg.hide(); + if (result != null) { //there was one report open in session loadModel(result, true); header.enableExports(); - } else + } else commonCommands.newTemplate.execute(); } }); @@ -616,7 +621,7 @@ public class Presenter { * */ public void addTextToolBar(boolean enableCommands) { - RichTextToolbar rtbar = new RichTextToolbar(new RichTextArea(), false, getCommands(), true); + RichTextToolbar rtbar = new RichTextToolbar(new RichTextArea(), getCommands(), isVME); rtbar.enableCommands(enableCommands); currentSelectedToolbar = rtbar; @@ -634,7 +639,7 @@ public class Presenter { */ public void enableTextToolBar(RichTextArea d4sArea) { - RichTextToolbar rtbar = new RichTextToolbar(d4sArea, false, getCommands(), true); + RichTextToolbar rtbar = new RichTextToolbar(d4sArea, getCommands(), isVME); if (menuForWorkflowDocument) //disable open and save buttons from the toolbar rtbar.enableCommands(false); currentSelectedToolbar = rtbar; @@ -1235,7 +1240,10 @@ public class Presenter { BasicSection firstSection = reportRef.getSections().get(0); if (firstSection.getComponents() != null && firstSection.getComponents().size()==2) { ReportReferences toPass = (ReportReferences) firstSection.getComponents().get(1).getPossibleContent(); - clientSeqSelected.add(toPass.getTuples().get(0).getKey(), toPass.getTuples().get(0)); + GWT.log("Singola?" + toPass.isSingleRelation()); + String refKey = toPass.getTuples().get(0).getKey(); + Tuple ref = toPass.getTuples().get(0); + clientSeqSelected.add(refKey, ref, toPass.isSingleRelation()); } else { Window.alert("Sorry, we could not locate the ReportRef correctly in the model instance"); diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ImportVMEReportDialog.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ImportVMEReportDialog.java index b0ea612..b0176d1 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ImportVMEReportDialog.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ImportVMEReportDialog.java @@ -10,6 +10,9 @@ import org.gcube.portlets.user.reportgenerator.shared.VMEReportBean; import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier; import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.GridEvent; +import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.GroupingStore; import com.extjs.gxt.ui.client.store.ListStore; @@ -23,6 +26,8 @@ import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.grid.GroupingView; import com.extjs.gxt.ui.client.widget.layout.FitLayout; +import com.extjs.gxt.ui.client.widget.tips.QuickTip; +import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.shared.HandlerManager; @@ -49,6 +54,7 @@ public class ImportVMEReportDialog extends Window { this.eventBus = eventBus; this.type = type; setModal(true); + setResizable(false); mainPanel.setHeaderVisible(false); setWidth(WIDTH); setHeight(HEIGHT); @@ -124,6 +130,7 @@ public class ImportVMEReportDialog extends Window { column.setId("rfmo"); column.setHeader("Owner"); column.setWidth(15); + column.setHidden(true); configs.add(column); column = new ColumnConfig(); @@ -144,7 +151,8 @@ public class ImportVMEReportDialog extends Window { */ GroupingStore store = new GroupingStore(); store.add(reports); - store.groupBy("rfmo"); + if (type != VMETypeIdentifier.Rfmo) + store.groupBy("rfmo"); filter.setEmptyText(type == VMETypeIdentifier.Vme ? "Filter by Title" : "Filter by Identifier"); @@ -162,6 +170,17 @@ public class ImportVMEReportDialog extends Window { view.setShowGroupedColumn(true); view.setStartCollapsed(true); grid.setView(view); + + grid.addListener(Events.OnMouseOver, new Listener>(){ + @Override + public void handleEvent(GridEvent ge) { + if (ge != null && ge.getModel() != null) { + grid.setTitle(ge.getModel().getName()); + } + } + }); + + view.setForceFit(true); ContentPanel gridPanel = new ContentPanel(new FitLayout()); gridPanel.setHeaderVisible(false); @@ -230,6 +249,7 @@ public class ImportVMEReportDialog extends Window { break; case Rfmo: toReturn = "RFMO"; + break; default: toReturn = "Unknown Category!"; break; 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 5c70309..260932c 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 @@ -35,6 +35,7 @@ import org.gcube.portlets.user.reportgenerator.client.targets.TextTableImage; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.Hidden; import com.google.gwt.user.client.ui.Widget; @@ -325,6 +326,14 @@ public class TemplateComponent { this.content = instr; break; + case HIDDEN_FIELD: + String hiddenValue = (String) sc.getPossibleContent(); + if (hiddenValue == null) { + hiddenValue = "-1"; + } + Hidden hiddenField = new Hidden("SequenceId", hiddenValue); + this.content = hiddenField; + break; case TIME_SERIES: TSArea tsa; RepTimeSeries sts = null; @@ -496,6 +505,9 @@ public class TemplateComponent { break; case INSTRUCTION: content = ((HTML) this.content).getHTML(); + break; + case HIDDEN_FIELD: + content = ((Hidden) this.content).getValue(); break; case REPEAT_SEQUENCE: ClientRepeatableSequence repSeq = (ClientRepeatableSequence) this.content; 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 d71a872..b273660 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 @@ -133,7 +133,7 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc } @Override - public boolean add(String id, RepeatableSequence sequence) { + public boolean add(String id, RepeatableSequence sequence, boolean isSingleRelation) { SequenceWidget seqW = new SequenceWidget(p, this, sequence, false, true); myPanel.add(seqW); return true; @@ -150,7 +150,7 @@ public class ClientRepeatableSequence extends Composite implements ClientSequenc @Override public void AddButtonClicked(RepeatableSequence sequence) { - add("not needed", sequence); + add("not needed", sequence, false); } public String getIdentifier() { 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 225475d..aea6a61 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 @@ -115,19 +115,23 @@ public class ClientReportReference extends Composite implements ClientSequence { } @Override - public boolean add(String id, RepeatableSequence sequence) { + public boolean add(String id, RepeatableSequence sequence, boolean isSingleRelation) { //(beacuse the ref is indented for (BasicComponent bc : sequence.getGroupedComponents()) { bc.setWidth(bc.getWidth()-(indentationValue+5)); } - if (first.isSelectNewEnabled()) { - first = getRefSequence(p, this, sequence, true, false); + if (first.isAnEmptyRef()) { //this is the case when the current ref is not set and is only one + GWT.log("isEmpty"); + first = getRefSequence(p, this, sequence, true, true); myPanel.clear(); myPanel.add(first); tupleList.clear(); + first.enableClear(); + if (isSingleRelation) + first.removeAddAnotherButton(); } else { - SequenceWidget seqW = getRefSequence(p, this, sequence, false, true); + SequenceWidget seqW = getRefSequence(p, this, sequence, false, false); myPanel.add(seqW); first.hideClearAssociationButton(); } 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 96c8962..7eab373 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 @@ -9,7 +9,7 @@ public interface ClientSequence { ArrayList getGroupedComponents(); - boolean add(String id, RepeatableSequence sequence); + boolean add(String id, RepeatableSequence sequence, boolean isSingleRelation); SequenceWidget remove(SequenceWidget toRemove); 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 bf82d49..c40582b 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 @@ -34,7 +34,8 @@ public class SequenceWidget extends Composite { private RepeatableSequence repSequence; private ArrayList seqGroupedComponents = new ArrayList(); - private boolean isSelectingNew = false; + //in case of references tells if the ref is empty + private boolean isEmptyRef = false; public SequenceWidget(Presenter p, ClientSequence owner, RepeatableSequence repSequence, boolean notRemovable, boolean isNew) { this.owner = owner; @@ -42,6 +43,7 @@ public class SequenceWidget extends Composite { addAnotherB.getElement().getStyle().setMargin(10, Unit.PX); addAnotherB.getElement().getStyle().setWidth(130, Unit.PX); addAnotherB.addStyleName("addEntryButton"); + buttonPanel.getElement().getStyle().setMarginTop(20, Unit.PX); myPanel = new VerticalPanel(); myPanel.setHorizontalAlignment(HasAlignment.ALIGN_LEFT); myPanel.setStyleName("seqWidget"); @@ -66,7 +68,6 @@ public class SequenceWidget extends Composite { } 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("E' NOVA"); ClientReportReference cRef = (ClientReportReference) toAdd.getContent(); cRef.clear(); } @@ -115,6 +116,9 @@ public class SequenceWidget extends Composite { return buttonsWrapperPanel.remove(clearB); } + protected boolean hideAddEntryButton() { + return buttonsWrapperPanel.remove(addAnotherB); + } private void addAnother() { owner.AddButtonClicked(repSequence); @@ -172,11 +176,11 @@ public class SequenceWidget extends Composite { }); buttonsWrapperPanel.add(selectNewB); - isSelectingNew = true; + isEmptyRef = true; } - protected boolean isSelectNewEnabled() { - return isSelectingNew; + protected boolean isAnEmptyRef() { + return isEmptyRef; } public void add(TemplateComponent toAdd) { diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/Images.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/Images.java new file mode 100644 index 0000000..59acbfc --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/Images.java @@ -0,0 +1,105 @@ +package org.gcube.portlets.user.reportgenerator.client.toolbar; + +import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.google.gwt.user.client.ui.ImageBundle; + +/** + * This {@link ImageBundle} is used for all the button icons. Using an image + * bundle allows all of these images to be packed into a single image, which + * saves a lot of HTTP requests, drastically improving startup time. + */ +@SuppressWarnings("deprecation") +public interface Images extends ImageBundle { + /** + * @return . + */ + AbstractImagePrototype importing(); + /** + * @return . + */ + AbstractImagePrototype bold(); + /** + * @return . + */ + AbstractImagePrototype createLink(); + /** + * @return . + */ + AbstractImagePrototype hr(); + /** + * @return . + */ + AbstractImagePrototype indent(); + /** + * @return . + */ + AbstractImagePrototype insertImage(); + /** + * @return . + */ + AbstractImagePrototype italic(); + /** + * @return . + */ + AbstractImagePrototype justifyCenter(); + /** + * @return . + */ + AbstractImagePrototype justifyLeft(); + /** + * @return . + */ + AbstractImagePrototype justifyRight(); + /** + * @return . + */ + AbstractImagePrototype newdoc(); + /** + * @return . + */ + AbstractImagePrototype open_template(); + /** + * @return . + */ + AbstractImagePrototype open_report(); + /** + * @return . + */ + AbstractImagePrototype ol(); + /** + * @return . + */ + AbstractImagePrototype removeFormat(); + /** + * @return . + */ + AbstractImagePrototype removeLink(); + /** + * @return . + */ + AbstractImagePrototype save(); + /** + * @return . + */ + AbstractImagePrototype strikeThrough(); + /** + * @return . + */ + AbstractImagePrototype subscript(); + /** + * @return . + */ + AbstractImagePrototype superscript(); + /** + * @return . + */ + AbstractImagePrototype ul(); + /** + * @return . + */ + AbstractImagePrototype underline(); + /** + * @return . + */ + AbstractImagePrototype foreColors(); +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar$Strings.properties b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar$Strings.properties new file mode 100644 index 0000000..4c17d1c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar$Strings.properties @@ -0,0 +1,41 @@ +bold = Toggle Bold +createLink = Create Link +hr = Insert Horizontal Rule +indent = Indent Right +insertImage = Insert Static Image +italic = Toggle Italic +justifyCenter = Center +justifyLeft = Left Justify +justifyRight = Right Justify +ol = Insert Ordered List +outdent = Indent Left +removeFormat = Remove Formatting +removeLink = Remove Link +strikeThrough = Toggle Strikethrough +subscript = Toggle Subscript +superscript = Toggle Superscript +ul = Insert Unordered List +underline = Toggle Underline +color = Color +black = Black +white = White +red = Red +green = Green +yellow = Yellow +blue = Blue +font = Font +normal = Normal +size = Size +xxsmall = XX-Small +xsmall = X-Small +small = Small +medium = Medium +large = Large +xlarge = X-Large +xxlarge = XX-Large +save = Save +newdoc = New Template +open_template = Open Template +open_report = Open Report +importing = Import from Template +forecolors = Text Color diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar.java new file mode 100644 index 0000000..ba7267e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/RichTextToolbar.java @@ -0,0 +1,518 @@ +package org.gcube.portlets.user.reportgenerator.client.toolbar; + +/* + * Copyright 2008 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + + +import java.util.HashMap; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.i18n.client.Constants; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasAlignment; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.ListBox; +import com.google.gwt.user.client.ui.PushButton; +import com.google.gwt.user.client.ui.RichTextArea; +import com.google.gwt.user.client.ui.ToggleButton; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * A sample toolbar for use with {@link RichTextArea}. It provides a simple UI + * for all rich text formatting, dynamically displayed only for the available + * functionality. + */ +public class RichTextToolbar extends Composite { + + private boolean isVME = false; + /** + * We use an inner EventListener class to avoid exposing event methods on the + * RichTextToolbar itself. + */ + private class EventListener implements ClickHandler, ChangeHandler, KeyUpHandler { + + @SuppressWarnings("deprecation") + @Override + public void onChange(ChangeEvent event) { + Widget sender = (Widget) event.getSource(); + if (sender == fonts) { + basic.setFontName(fonts.getValue(fonts.getSelectedIndex())); + fonts.setSelectedIndex(0); + } else if (sender == fontSizes) { + basic.setFontSize(fontSizesConstants[fontSizes.getSelectedIndex() - 1]); + fontSizes.setSelectedIndex(0); + } + } + + @SuppressWarnings("deprecation") + @Override + public void onClick(ClickEvent event) { + Widget sender = (Widget) event.getSource(); + if (sender == bold) { + basic.toggleBold(); + } else if (sender == save) { + //call the command of Templates or Reports + commands.get("save").execute(); + } else if (sender == newdoc) { + commands.get("newdoc").execute(); + } else if (sender == open_report) { + commands.get("open_report").execute(); + } else if (sender == open_template) { + commands.get("open_template").execute(); + } else if (sender == importing) { + commands.get("importing").execute(); + }else if (sender == insertImage) { + commands.get("insertImage").execute(); + } else if (sender == italic) { + basic.toggleItalic(); + } else if (sender == underline) { + basic.toggleUnderline(); + } else if (sender == strikethrough) { + extended.toggleStrikethrough(); + }else if (sender == subscript) { + extended.toggleSubscript(); + } else if (sender == superscript) { + extended.toggleSuperscript(); + } + else if (sender == justifyLeft) { + basic.setJustification(RichTextArea.Justification.LEFT); + } else if (sender == justifyCenter) { + basic.setJustification(RichTextArea.Justification.CENTER); + } else if (sender == justifyRight) { + basic.setJustification(RichTextArea.Justification.RIGHT); + } else if (sender == createLink) { + String url = Window.prompt("Enter a link URL:", "http://"); + if (url != null) { + extended.createLink(url); + } + } else if (sender == removeLink) { + extended.removeLink(); + } + // else if (sender == ol) { + // extended.insertOrderedList(); + // } else if (sender == ul) { + // extended.insertUnorderedList(); + // } + else if (sender == foreColorButton) { + commands.get("pickColor").execute(); + } + else if (sender == removeFormat) { + extended.removeFormat(); + } else if (sender == richText) { + // We use the RichTextArea's onKeyUp event to update the toolbar status. + // This will catch any cases where the user moves the cursur using the + // keyboard, or uses one of the browser's built-in keyboard shortcuts. + updateStatus(); + } + } + + @Override + public void onKeyUp(KeyUpEvent event) { + Widget sender = (Widget) event.getSource(); + if (sender == richText) { + updateStatus(); + } + } + } + + private static final RichTextArea.FontSize[] fontSizesConstants = new RichTextArea.FontSize[] { + RichTextArea.FontSize.XX_SMALL, RichTextArea.FontSize.X_SMALL, + RichTextArea.FontSize.SMALL, RichTextArea.FontSize.MEDIUM, + RichTextArea.FontSize.LARGE, RichTextArea.FontSize.X_LARGE, + RichTextArea.FontSize.XX_LARGE}; + + private Images images = (Images) GWT.create(Images.class); + private Strings strings = (Strings) GWT.create(Strings.class); + private EventListener listener = new EventListener(); + + private RichTextArea richText; + + @SuppressWarnings("deprecation") + private RichTextArea.BasicFormatter basic; + @SuppressWarnings("deprecation") + private RichTextArea.ExtendedFormatter extended; + + + + private VerticalPanel outer = new VerticalPanel(); + private HorizontalPanel topPanel = new HorizontalPanel(); + private HorizontalPanel bottomPanel = new HorizontalPanel(); + private ToggleButton bold; + private ToggleButton italic; + private ToggleButton underline; + private ToggleButton strikethrough; + private ToggleButton superscript; + private ToggleButton subscript; + private PushButton justifyLeft; + private PushButton justifyCenter; + private PushButton justifyRight; + private PushButton save; + private PushButton newdoc; + private PushButton open_template; + private PushButton open_report; + private PushButton importing; + + // private PushButton ol; + // private PushButton ul; + private PushButton insertImage; + private PushButton createLink; + private PushButton removeLink; + private PushButton removeFormat; + + // private ListBox backColors; + // private ListBox foreColors; + private ListBox fonts; + private ListBox fontSizes; + + private PushButton foreColorButton; + + private HashMap commands; + + + + /** + * Creates a new toolbar that drives the given rich text area. + * + * @param richText the rich text area to be controlled + * @param useOnePanel if true display all the bottons on one panel + * @param commands the Commands to call + */ + @SuppressWarnings("deprecation") + public RichTextToolbar(RichTextArea richText, HashMap commands, boolean isVme) { + this.isVME = isVme; + this.commands = commands; + this.richText = richText; + this.basic = richText.getBasicFormatter(); + this.extended = richText.getExtendedFormatter(); + + topPanel.setHeight("20px"); + topPanel.setSpacing(2); + + outer.add(bottomPanel); + topPanel.setWidth("100%"); + outer.setWidth("100%"); + + HorizontalPanel hp = new HorizontalPanel(); + hp.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE); + topPanel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE); + hp.add(topPanel); + outer.add(hp); + outer.setHeight("20px"); + + initWidget(outer); + setStyleName("goog-toolbar"); + richText.addStyleName("hasRichTextToolbar"); + + if (basic != null) { + //add the new template button + topPanel.add(newdoc = createPushButton(images.newdoc(), strings.newdoc())); + open_report = createPushButton(images.open_report(),strings.open_report()); + //add the open report button + topPanel.add(open_report); + //add the open template button + topPanel.add(open_template = createPushButton(images.open_template(),strings.open_template())); + //add the save button + topPanel.add(save = createPushButton(images.save(), strings.save())); + //add the save button + topPanel.add(importing = createPushButton(images.importing(), strings.importing())); + + if (! isVme) { + topPanel.add(new HTML(" ")); + fonts = createFontList(); + fonts.setPixelSize(150, 18); + topPanel.add(fonts); + topPanel.add(new HTML(" ")); + topPanel.add(fontSizes = createFontSizes()); + } + // We only use these listeners for updating status, so don't hook them up + // unless at least basic editing is supported. + richText.addKeyUpHandler(listener); + richText.addClickHandler(listener); + + } + if (! isVme) { + if (basic != null) { + topPanel.add(bold = createToggleButton(images.bold(), strings.bold())); + + + + topPanel.add(italic = createToggleButton(images.italic(), strings.italic())); + topPanel.add(underline = createToggleButton(images.underline(), strings.underline())); + + topPanel.add(new HTML(" ", true)); + topPanel.add(subscript = createToggleButton(images.subscript(),"subscript")); + topPanel.add(superscript = createToggleButton(images.superscript(), + "superscript")); + topPanel.add(strikethrough = createToggleButton(images.strikeThrough(), + strings.strikeThrough())); + topPanel.add(new HTML(" ", true)); + topPanel.add(justifyLeft = createPushButton(images.justifyLeft(), + strings.justifyLeft())); + topPanel.add(justifyCenter = createPushButton(images.justifyCenter(), + strings.justifyCenter())); + topPanel.add(justifyRight = createPushButton(images.justifyRight(), + strings.justifyRight())); + topPanel.add(new HTML(" ", true)); + + + } + + if (extended != null) { + + // topPanel.add(ol = createPushButton(images.ol(), strings.ol())); + // topPanel.add(ul = createPushButton(images.ul(), strings.ul())); + //TODO: To be re-enabled in the future + // topPanel.add(insertImage = createPushButton(images.insertImage(), + // strings.insertImage())); + topPanel.add(createLink = createPushButton(images.createLink(), + strings.createLink())); + topPanel.add(removeLink = createPushButton(images.removeLink(), + strings.removeLink())); + + topPanel.add(removeFormat = createPushButton(images.removeFormat(), + strings.removeFormat())); + topPanel.add(foreColorButton = createPushButton(images.foreColors(), + "Text Color")); + } + if (basic != null) { + topPanel.add(new HTML(" ")); + // topPanel.add(foreColors = createColorList("Color")); + // foreColors.setStyleName("listbox"); + } + } + } + + private ListBox createFontList() { + ListBox lb = new ListBox(); + lb.addChangeHandler(listener); + lb.setVisibleItemCount(1); + + lb.addItem(strings.font(), ""); + lb.addItem(strings.normal(), ""); + lb.addItem("Times New Roman", "Times New Roman"); + lb.addItem("Arial", "Arial"); + lb.addItem("Courier New", "Courier New"); + lb.addItem("Georgia", "Georgia"); + lb.addItem("Trebuchet", "Trebuchet"); + lb.addItem("Verdana", "Verdana"); + + lb.setStyleName("listbox"); + lb.setPixelSize(100, 18); + + return lb; + } + + private ListBox createFontSizes() { + ListBox lb = new ListBox(); + lb.addChangeHandler(listener); + lb.setVisibleItemCount(1); + + lb.addItem(strings.size()); + lb.addItem(strings.xxsmall()); + lb.addItem(strings.xsmall()); + lb.addItem(strings.small()); + lb.addItem(strings.medium()); + lb.addItem(strings.large()); + lb.addItem(strings.xlarge()); + lb.addItem(strings.xxlarge()); + lb.setStyleName("listbox"); + lb.setPixelSize(100, 18); + return lb; + } + + private PushButton createPushButton(AbstractImagePrototype img, String tip) { + Image toAdd = img.createImage(); + //toAdd.setSize("15", "15"); + PushButton pb = new PushButton(toAdd); + pb.addClickHandler(listener); + pb.setTitle(tip); + pb.setPixelSize(15, 15); + + pb.setStyleName("myButton"); + + return pb; + } + + private ToggleButton createToggleButton(AbstractImagePrototype img, String tip) { + ToggleButton tb = new ToggleButton(img.createImage()); + tb.addClickHandler(listener); + tb.setTitle(tip); + tb.setPixelSize(15, 15); + tb.setStyleName("myButton"); + + return tb; + } + + /** + * Updates the status of all the stateful buttons. + */ + private void updateStatus() { + if (basic != null) { + bold.setDown(basic.isBold()); + italic.setDown(basic.isItalic()); + underline.setDown(basic.isUnderlined()); + } + + if (extended != null) { + strikethrough.setDown(extended.isStrikethrough()); + } + } + + /** + * set the buttons enable or not + * @param enable true to enable the widget, false to disable it + */ + public void setEnabled(boolean enable) { + if (! isVME) { + bold.setEnabled(enable); + italic.setEnabled(enable); + underline.setEnabled(enable); + strikethrough.setEnabled(enable); + justifyLeft.setEnabled(enable); + justifyCenter.setEnabled(enable); + justifyRight.setEnabled(enable); + superscript.setEnabled(enable); + subscript.setEnabled(enable); + foreColorButton.setEnabled(enable); + // insertImage.setEnabled(enable); + // ol.setEnabled(enable); + // ul.setEnabled(enable); + createLink.setEnabled(enable); + removeLink.setEnabled(enable); + removeFormat.setEnabled(enable); + //foreColors.setEnabled(enable); + fonts.setEnabled(enable); + fontSizes.setEnabled(enable); + } + } + + public void enableCommands(boolean enable) { + save.setEnabled(enable); + newdoc.setEnabled(enable); + open_template.setEnabled(enable); + open_report.setEnabled(enable); + importing.setEnabled(enable); + } + + /** + * + * @return the formatter + */ + public RichTextArea.ExtendedFormatter getExtendedFormatter() { + return extended; + } + /** + * + * @return the current textArea + */ + public RichTextArea getRichTextArea() { + return richText; + } + + /** + * This {@link Constants} interface is used to make the toolbar's strings + * internationalizable. + */ + public interface Strings extends Constants { + + String insertImage(); + + String importing(); + + String black(); + + String blue(); + + String bold(); + + String color(); + + String createLink(); + + String font(); + + String green(); + + String hr(); + + String italic(); + + String justifyCenter(); + + String justifyLeft(); + + String justifyRight(); + + String large(); + + String medium(); + + String normal(); + + String newdoc(); + + String open_template(); + + String open_report(); + + String ol(); + + String outdent(); + + String red(); + + String removeFormat(); + + String removeLink(); + + String save(); + + String size(); + + String small(); + + String strikeThrough(); + + String ul(); + + String underline(); + + String white(); + + String xlarge(); + + String xsmall(); + + String xxlarge(); + + String xxsmall(); + + String yellow(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/backColors.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/backColors.gif new file mode 100644 index 0000000000000000000000000000000000000000..ddfc1cea2c7c12f2319b63b8046a919fa77f49d3 GIT binary patch literal 104 zcmZ?wbhEHb6k!lyn8*ME|NsC0`ua5{5L|quPwsyt%ghOjPfSqupZ3S&(!$fz4U$jI@ib6i Gum%9=@*aBt literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/createLink.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/createLink.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ab9e599f822b6fd9d2886ee4f06491b49ecda8f GIT binary patch literal 118 zcmZ?wbhEHb6k!lySi}GXXA*Os*4ID%j|vojvM@3*urTO=lz`MSFk5@%A_P)O?!~#Vdl*A~_RMaJeHZc^62(la$ zXNk(f!J;Kx`k;bWQJvnEklKv4E*yUMoqNvtUEX^F0D`|j@Q(r{5=p1oY+msBe7DJD z5^lHq%4)R^@aW?E8gVou4QYP_h{fV|l}fb|4u?^%*HNq0P$(4O@pvv=E?2Qytv(Z1 zDwRMQ(vqhcAQFj2>~{NorBb;y7z}$#rSi>WG9eO)!0B{?dg5r7N~NwyOP=o=ta!a% zE*g!p8jYqyDwRIw^LdoZWfY4=WHK2LM>EopmORY>hGAw|mc5I|PN#3O*(?%?1Z*}N91cgL4{iEji;aEEtZ88I z%HD_Pm~b;dC=|BwEA}fCic6!>_++tII36#0y?%nn(Cp&Gi)U*JyQeW6UFQ%wFhd_= zFktBpwDhgV{lnb$$vU>rBA^N!nh-iRQgVr8yH8%}^ zZn9za?@#`2175f^8t6qZXKdU|Cq1|P4!%N`c|6eCU*|IMpHVxOJgs;lasU7T07*qo IM6N<$g1Yu-R&bl)z_uT!D z1QdU=FfuUkGw6VHg3MrGarki3bM;<}*SQV<8x~Y{Gf7-(Ok!0iJvGg5UJR>3qWv?k m`Weg$i7OL18jkjvMRnT7#h)yU3=I4XIv|}O zGZ=us literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/hr.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/hr.gif new file mode 100644 index 0000000000000000000000000000000000000000..3fb1607e67a5e8f308167630d8ce6aa07b4c437a GIT binary patch literal 67 zcmZ?wbhEHb6k!lyXkY+=|Ns9h{$ycfU|?j>0r5dH3`|lz{VPwuo)wchR-92qq~y6`XqbKmElbB3z{pkZs0VPF`CFvS?7jDn^mFo>d9Y&06* z&1MsS!M-CH3ee+h_sy)Ms%B*ec3R0RpVi9?*mU84yoq(Bw8 z<4(999dJJE!V%pWT~HGRIAb;(#O%2K3?uRpz}AfgE8e9q&OSdr^e^}lC$QXZz;S2A z)w>^oHy>?v)q--`!pmuBe96PxP0u*inQvyFW(llfv9 zXV1s*Jh`y2H%B3ZTA(AzpsQ?hb6_PyZ=c1?_B4fbl>G%!@ubJln=!)x0000Qm}Z3h8*~500000NkvXXu0mjfqtcq< literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/italic.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/italic.gif new file mode 100644 index 0000000000000000000000000000000000000000..2b0a5a0a062ac0b66ea119a18243415205e88bf2 GIT binary patch literal 79 zcmZ?wbhEHb6k!lyn8*ME)z#H4EiM25|5yCU!pOkD%%B4j1<5loDa`3#dHOB?VwVNi eELR0r5dH3{0{;{VPwu0r5dH3`}x8{VPwu literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/justifyRight.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/justifyRight.gif new file mode 100644 index 0000000000000000000000000000000000000000..99ee25836f15352e94799df649b6594e0bd284f2 GIT binary patch literal 855 zcmZ?wbhEHb6k!ly_|C{M3PwXSCZIX8XZzY2l?gCw6LlgWJ5Avz#QX4|&mI8LN)w~J1vgL=KLAhlWz*=#m~gyvxa z&;iC6gb?aZvMdXxX`<0+D1hs_pqJ!wxqlEH;CJ)je~uL(gpi@v>!I0f_Kl=E(E+Tq z26na*9gribxx-Oft(HnstyXUUy!39&E-cI%J5Rsy;(PGZH{g{ty!HVC&yGPT3H8x# zw{^gBPW)O0FMoh{k%l<`1a|To_Wl&u&-GXm8izU|&<&utILc4wc6s@u1bmTz6x{qg zTw@7=FQRcg&r`h+gcR$*Jbv+*DPk7v)B@e0o2 z6IlBXW&8xh@9)YKiV~2>+z&XKd24JT55YWz&JtfvCg4r^~bLP79-yS@n$OW00000NkvXXu0mjf DStt2z literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/ol.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/ol.gif new file mode 100644 index 0000000000000000000000000000000000000000..833bb40667d722cdaa8f735c3131c99f0db9852f GIT binary patch literal 76 zcmZ?wbhEHb6k!lyXkY+=|Ns9h{$ycfU|?j>0r5dH3{1*B{VPwuFu+SB7fQB(wh zKmdNfpU3O3FR9n6bx(yFW?LM)(cuM#(}134tA_DETWd7rfU%`9Ss=MUcwKe7(*}5qB2i- zk1uGwpM#!f*=R`>adwu?cYRS;jk(Tzc!pa5-%tD+u18O4qC2Xf>4JzmAXc#PD9cj> zmPQIePd8!CP=*zI1Hw)dY_GEEzXf-*VXTm&DS011zVX_L^0)8ccHG9=iU}(d*Wn(> z!>C3EN6l48Pm59_3;GNo&c|{B_6$7JdMw!sutt#xjAwwFlEOQphN~tCL#8&w#Kauq z3z~1q(fw40MoBC;o*w>)IdlG>aXKj16)Zb$Vxmd{%a;$BpP!F@3l^rJLA)0;b^@b% zC6jFgH7P@IDh(c{Wc;}p7GpbRXJ@0o#O4ASx*lhtE=7p%ZEDzbPcYM;iom24?jaS% ztCN_qjvKRw%nSZ4cwc%3@H#P8m4Z(7ZuByD?R}I8$5%ZT78bDi;tLcC#U8EX02~=eBHXF=lGptrCNRnI^up*XB(TPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXfA z4=ywx986vS00MPML_t(I%YBkRXq{yg#((eoefP^vnwzAFO%zg%LZlXiDn&CWI205& z7e{x;t`0gXg0mu2g+M_Umx7D9SXU{*3RbMGe@Opmo15PI-S2z9_ngO}X@_v}foC`m z=lsqYPGE}O|N8p5rps^c*X{ghk^q5=7y>bX%fSQ37JJ>adEWi<+VJLHE0g4hY!B>` zB$d+ulav;^Y<%{^9l}ATLp|BW^G_UMDxm9}Y)%ni{b+?GLO8Uf69J|J%p7yrTvhC~V?U5N68r3!h(#(z+C zcL_kfIc|=dVP?3ClAyll3FF;cv^RglQ_V(L0k&{=!u`*|+!6Qd7$PAA z+?|pxQqHb&Z0jAsL83YTGYCeL%!P};b82Iiq8GTn`zL?h*d?VzJ*j#6*%Op>lB~h& z9b`jf_jq(>OlQyV{YS53?i}g&nC}}~$6rPQNl0S3zf4JsX9 z_4XoN2WA~|2RBeg?g!5$N|F>Xl<%Othw>h$*N2>1`w`3gD36fsBdd`&%x#|I+WE81 z*`MBC5u#M`ySe^%t{YVYd=RA`_<(|j7+NS3Dq8RaGJ2j=<032Gsiyt#>L+i! nfH*^7!2d}=xR`KlKZyPV0}z%eL4XU~00000NkvXXu0mjfT{2+Y literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/outdent.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/outdent.gif new file mode 100644 index 0000000000000000000000000000000000000000..be8662411a6cb7d4de71d80e52cf079e2ed07181 GIT binary patch literal 82 zcmZ?wbhEHb6k!lyn8*ME|G@yrQ2fcl$iTqFpaT*G$ulr1Pw8KI`Yr$BIUEuVo5N;s b<<=&Y_Xtuqdo{+k&8 z4+{EkZ2VtP@V|=ke`n|aCMNs$?>}?q3}!Kl`L*G~#Ze2%I%J8H`KTrF9Y zq;-OyHCVLHnLn7h*(p{)uiP4$CLo%3i0^>vmSq@hw&d}+qLUIhebDepVSFc&C myljQDROl8Jd1*ccL6=qQ)-WiFs0z!7HS;-(cepz;SOWkbh-TXW literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/removeFormat.png b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/removeFormat.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bd58b21797817803b49d3b2b53323e17fda625 GIT binary patch literal 335 zcmV-V0kHmwP)4KV{At)KG$c#_utJ;JncjQ{ugvi#ZM%3MWsnm-aQTLHB3 hKFHZ17lAZ`!~r__K9H;*%Sk1L5s7kfmD#h%)-GPs42k--`O Ds>>Oks2`oIPl8XEc) z7Z-oHdiCnNh=_=7-rnASQd3j^Pnt9-52PSJKmR|74-yB-uUN6-AxJ$)AIt?^O-)VT zCr_T74pjKb-rk;L@7}!}=gytu04X?h=n%)+wQD(m;%Y$oCm?ko^&ov<19WwDGt<-4 z-%p!1tt2QYXs4s2<1aTixBr2Gf&W1YfV4h{4-yB-gVcf4gYO zty=YV-MV%Er%#{$zp$_nY(Pat1(**K2g!rffz*TafelboQ)31?&%n#e>wZc~%9rfy z?C(JQGdw&z4x}IUyRt?v{0wJ6^R0W@A*Z8= z&I?WjSJx&^y7yBz?2M*SZ18QRLbAs(#0rsh%4F{kwbCf;j=k00000NkvXXu0mjf-HSTy literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/save.png b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/save.png new file mode 100644 index 0000000000000000000000000000000000000000..3c004243b0bc04d93c8d83e412a421df31d3187e GIT binary patch literal 674 zcmV;T0$u%yP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXfA z4hIM2NZ6DB00JUOL_t(I%hi-kYLr0`hM(%0iDshsM}jVbf}kLXi-39)U3dXKfg%W= zK#(Bl4cv&}-U}#h6c;f)&`{9b4{yCyUGT3j8wHuE z#g6#ea}0qrIM65-2tb&GB&PQ_I5E=(GtA5Ynj_$1M_hR#tl6M;s9b~#PZ70<6z(EI z6oCnrKfGh%dV^!fPmL9hf!#G{_E3Wx7Ypvj%w%F3smg&epdg+vF7rk++^!BYx&>PdP#;3$)riz6|MN-Nlzx zv0f+ZmH51p+TeXD znQe3P{1Vq5u0X5F)%y)zzFLP!ZhsOPf!D!m&*{DkaKX3NG+SqPo;H#M$0r5dH3{2`h{VPwu0r5dH3{2`h{VPwu-QUo{A>o~UEjLcP evP<1bcw6i3?QDu(b2m7j^NHN{>zq9+gEatULm7zx literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/ul.gif b/src/main/java/org/gcube/portlets/user/reportgenerator/client/toolbar/ul.gif new file mode 100644 index 0000000000000000000000000000000000000000..01380dbb833be5fd96a1bad898d72fbdeadc1455 GIT binary patch literal 863 zcmZ?wbhEHb6k!ly_|C{M3PwX|Nl;ximB{CakA kLiC)*d5?R2IVUAmF*ORz&=tLUs`d7-bKmy`FfdpH03G5Xz5oCK literal 0 HcmV?d00001 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 cf36899..2985f59 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 @@ -1,5 +1,8 @@ package org.gcube.portlets.user.reportgenerator.server.servlet; +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -32,7 +35,6 @@ import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; import org.gcube.application.rsg.client.RsgClient; import org.gcube.application.rsg.service.RsgService; -import org.gcube.application.rsg.service.dto.NameValue; import org.gcube.application.rsg.service.dto.ReportEntry; import org.gcube.application.rsg.service.dto.ReportType; import org.gcube.application.rsg.support.builder.exceptions.ReportBuilderException; @@ -58,6 +60,8 @@ import org.gcube.common.homelibrary.home.workspace.folder.items.Report; import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate; import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.ImageDocument; import org.gcube.common.homelibrary.home.workspace.folder.items.ts.TimeSeries; +import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portal.custom.communitymanager.OrganizationsUtil; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portlets.admin.wfdocslibrary.client.WfDocsLibrary; @@ -85,6 +89,8 @@ import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier; import org.gcube.portlets.widgets.exporter.shared.SaveReportFileException; import org.gcube.portlets.widgets.exporter.shared.SaveReportFileExistException; import org.gcube.portlets.widgets.exporter.shared.TypeExporter; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -125,6 +131,10 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe * */ public static final String PREVIOUS_REPORT_INSTANCE = "myPreviousReport"; + /** + * + */ + public static final String RSG_WS_ADDRESS = "RSG_WS_ADDRESS"; /** @@ -549,6 +559,16 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } } + + private String getRSGWSAddress() { + String addr = (String) getASLSession().getAttribute(RSG_WS_ADDRESS); + _log.trace("getRSGWSAddress: " + addr); + return addr; + } + private void setRSGWSAddress(String addr) { + getASLSession().setAttribute(RSG_WS_ADDRESS, addr); + _log.trace("setting RSG WS address to " + addr); + } /** * * @return @@ -1143,17 +1163,20 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe getASLSession().setAttribute(WfDocsLibrary.WORKFLOW_ID_ATTRIBUTE, "1"); getASLSession().setAttribute(WfDocsLibrary.WORKFLOW_GIVEN_NAME, "TEST REPORT"); getASLSession().setAttribute(WfDocsLibrary.WORKFLOW_READONLY_ATTRIBUTE, true); - return new SessionInfo(getUserBean(), getVreName(), true, true); + return new SessionInfo(getUserBean(), getVreName(), true, true, false); } + + boolean isVME = isReportsStoreGatewayAvailable(); + if (getASLSession().getAttribute(WfDocsLibrary.WORKFLOW_ID_ATTRIBUTE) == null) { _log.debug("WfDocsLibrary.WORKFLOW_ID_ATTRIBUTE is NULL: "); - return new SessionInfo(getUserBean(), getVreName(), false, false); + return new SessionInfo(getUserBean(), getVreName(), false, false, isVME); } else { _log.debug("FOUND WORKFLOW_ID_ATTRIBUTE ***** "); //String workflowid = getASLSession().getAttribute(WfDocsLibrary.WORKFLOW_ID_ATTRIBUTE).toString(); Boolean canEdit = ! (Boolean) getASLSession().getAttribute(WfDocsLibrary.WORKFLOW_READONLY_ATTRIBUTE); - return new SessionInfo(getUserBean(), getVreName(), true, canEdit); + return new SessionInfo(getUserBean(), getVreName(), true, canEdit, false); } } @@ -1478,7 +1501,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe ReportType type = new ReportType(); type.setTypeIdentifier("Vme"); - RsgService rsgClient = new RsgClient(); + RsgService rsgClient = new RsgClient(getRSGWSAddress()); for (ReportEntry re : rsgClient.listReports(type)) { String rfmo = re.getOwner(); @@ -1500,7 +1523,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe ArrayList toReturn = new ArrayList(); ReportType type = new ReportType(); type.setTypeIdentifier(refType.toString()); - RsgService rsgClient = new RsgClient(); + RsgService rsgClient = new RsgClient(getRSGWSAddress()); for (ReportEntry re :rsgClient.listReports(new ReportType(refType.getId()))) { String rfmo = re.getOwner(); @@ -1513,7 +1536,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe @Override public Model importVMEReport(String id, String name, VMETypeIdentifier refType) { - RsgService rsgClient = new RsgClient(); + RsgService rsgClient = new RsgClient(getRSGWSAddress()); CompiledReport cr = null; if (refType == VMETypeIdentifier.Vme) { @@ -1539,7 +1562,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe @Override public Model getVMEReportRef2Associate(String id, VMETypeIdentifier refType) { - RsgService rsgClient = new RsgClient(); + RsgService rsgClient = new RsgClient(getRSGWSAddress()); _log.info("Importing Ref type= " + refType.getId() + " id=" + id); CompiledReport cr = rsgClient.getReferenceReportById(new ReportType(refType.getId()), id); Model model = null; @@ -1552,4 +1575,35 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe } return model; } + /** + * this method ch + * @return true if an instance of the ReportsStoreGateway is available in the infrastructure + */ + private boolean isReportsStoreGatewayAvailable() { + String scope = getASLSession().getScope(); + _log.info("Looking for a running ReportsStoreGateway WS in " + scope); + String previousScope = ScopeProvider.instance.get(); + ScopeProvider.instance.set(scope); + SimpleQuery query = queryFor(ServiceEndpoint.class); + query.addCondition("$resource/Profile/Category/string() eq 'Service'"); + query.addCondition("$resource/Profile/Name/string() eq 'ReportsStoreGateway'"); + + DiscoveryClient client = clientFor(ServiceEndpoint.class); + List list = client.submit(query); + ScopeProvider.instance.set(previousScope); + + if (list.size() > 1) { + _log.warn("Multiple ReportsStoreGateway Service Endpoints available in the scope, should be only one."); + return false; + } + else if (list.size() == 1) { + ServiceEndpoint se = list.get(0); + String host = se.profile().runtime().hostedOn(); + String accessPoint = se.profile().accessPoints().iterator().next().address(); + setRSGWSAddress(host+accessPoint); + return true; + } + else return false; + + } } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/shared/SessionInfo.java b/src/main/java/org/gcube/portlets/user/reportgenerator/shared/SessionInfo.java index b5c1fb9..55bf82d 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/shared/SessionInfo.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/shared/SessionInfo.java @@ -9,18 +9,24 @@ public class SessionInfo implements Serializable { private String scope; private Boolean isWorkflowDocument; private Boolean isEditable; + private Boolean isVME; public SessionInfo() { } - public SessionInfo(UserBean user, String scope, - Boolean isWorkflowDocument, Boolean canEdit) { + public SessionInfo( + org.gcube.portlets.user.reportgenerator.shared.UserBean user, + String scope, Boolean isWorkflowDocument, Boolean isEditable, + Boolean isVME) { super(); this.user = user; this.scope = scope; this.isWorkflowDocument = isWorkflowDocument; - this.isEditable = canEdit; + this.isEditable = isEditable; + this.isVME = isVME; } + + public UserBean getUsername() { return user; } @@ -52,6 +58,14 @@ public class SessionInfo implements Serializable { public void setEditable(Boolean canEdit) { this.isEditable = canEdit; } + + public Boolean isVME() { + return isVME; + } + + public void setIsVME(Boolean isVME) { + this.isVME = isVME; + } } diff --git a/src/main/webapp/ReportGenerator.css b/src/main/webapp/ReportGenerator.css index d1b9d80..86b6176 100644 --- a/src/main/webapp/ReportGenerator.css +++ b/src/main/webapp/ReportGenerator.css @@ -187,15 +187,18 @@ } .seqWidget { - margin-top: 10px; + margin-top: 15px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; + border: 1px dashed maroon; } .seqWidget-shadow { background-color: #FFF; opacity: 0.9; + border: none; + border: 1px dashed #6C8CD5; } @@ -475,7 +478,7 @@ tableBorder td { } .instructionArea { - margin-top: 5px; + margin: 5px 5px 0; font-family: "Courier New", Courier, monospace; font-size: 11px; color: #666; @@ -591,6 +594,7 @@ tableBorder td { padding: 5px 0 0 5px; font-size: 13px; color: black; + margin-left: 5px; } .readOnlyText {