diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 443e085..6249222 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 497363c..53299b0 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -4,6 +4,9 @@
+
+ uses
+
diff --git a/pom.xml b/pom.xml
index 23e30ad..3f7d500 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
cersion -->
provided
online
-
+
1.7
1.7
${project.build.directory}/${project.build.finalName}
@@ -170,9 +170,9 @@
${setScope}
- org.gcube.portlets.user
- workspace-tree-widget
- ${setScope}
+ org.gcube.portlets.widgets
+ fileupload-progress-bar
+ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)
org.gcube.portlets.user
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 dcbe604..83447d8 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
@@ -50,10 +50,10 @@ import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable;
import org.gcube.portlets.user.reportgenerator.client.targets.GroupingDelimiterArea;
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.ReportImage;
import org.gcube.portlets.user.reportgenerator.shared.SessionInfo;
import org.gcube.portlets.user.reportgenerator.shared.UserBean;
import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier;
@@ -65,6 +65,9 @@ import org.gcube.portlets.widgets.exporter.client.event.ExportingCompletedEventH
import org.gcube.portlets.widgets.exporter.client.event.ReportExporterEvent;
import org.gcube.portlets.widgets.exporter.client.event.ReportExporterEventHandler;
import org.gcube.portlets.widgets.exporter.shared.TypeExporter;
+import org.gcube.portlets.widgets.fileupload.client.events.FileUploadCompleteEvent;
+import org.gcube.portlets.widgets.fileupload.client.events.FileUploadCompleteEventHandler;
+import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressDialog;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.GWT;
@@ -105,8 +108,15 @@ public class Presenter {
private final WaitingOperationDialog dlg = new WaitingOperationDialog();
+ private UploadProgressDialog uploadDlg;
+
private UserBean currentUser;
private String currentScope;
+
+ private ClientImage selectedImage;
+
+
+
/**
* Model
*/
@@ -141,15 +151,42 @@ public class Presenter {
/**
* eventbus events handler
*/
- HandlerManager eventBus = new HandlerManager(null);
+ static HandlerManager eventBus = new HandlerManager(null);
- public HandlerManager getEventBus() {
+ public static HandlerManager getEventBus() {
return eventBus;
}
private void handleEvents() {
+ /**
+ * get the uploaded file result
+ */
+ eventBus.addHandler(FileUploadCompleteEvent.TYPE, new FileUploadCompleteEventHandler() {
+
+ @Override
+ public void onUploadComplete(FileUploadCompleteEvent event) {
+
+ //the filename and its path on server are returned to the client
+ String fileName = event.getUploadedFileInfo().getFilename();
+ String absolutePathOnServer = event.getUploadedFileInfo().getAbsolutePath();
+ GWT.log(fileName + " uploaded on Server here: " + absolutePathOnServer);
+
+ reportService.getUploadedImageUrlById(fileName, absolutePathOnServer, new AsyncCallback() {
+ @Override
+ public void onFailure(Throwable caught) {
+ Window.alert("An error occurred in the server: " + caught.getMessage());
+ }
+ @Override
+ public void onSuccess(ReportImage result) {
+ uploadDlg.showRegisteringResult(true); //or false if an error occurred
+ selectedImage.dropImage(result.getUrl(), result.getId(), result.getWidth(), result.getHeight());
+ }
+ });
+ }
+ });
+
eventBus.addHandler(SelectedReportEvent.TYPE, new SelectedReportEventHandler() {
@Override
public void onReportSelected(SelectedReportEvent event) {
@@ -954,9 +991,6 @@ public class Presenter {
setCurrCursorPos(uiY);
break;
case TIME_SERIES:
- TSArea dp5 = (TSArea) component.getContent();
- wp.addComponentToLayout(dp5, component.isDoubleColLayout());
- setCurrCursorPos(uiY);
break;
case FLEX_TABLE:
GenericTable gt = (GenericTable) component.getContent();
@@ -1118,8 +1152,11 @@ public class Presenter {
/**
* show the upload file popup
*/
- public void showUploadFilePopup() {
- toolBoxPanel.showUploadFile();
+ public void showUploadFilePopup(ClientImage selectedImage) {
+ uploadDlg = new UploadProgressDialog("Upload Image", eventBus);
+ uploadDlg.center();
+ uploadDlg.show();
+ this.selectedImage = selectedImage;
}
/**
*
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java
index 7341db3..264dcde 100644
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java
@@ -1,8 +1,6 @@
package org.gcube.portlets.user.reportgenerator.client;
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
-import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
-import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceServiceAsync;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.logical.shared.ResizeEvent;
@@ -82,8 +80,6 @@ public class ReportGenerator implements EntryPoint {
private ScrollPanel bottomScrollerPanel = new ScrollPanel();
- private AppControllerExplorer treeController;
-
private HTML divHidden = new HTML();
/**
* This is the entry point method.
@@ -91,14 +87,13 @@ public class ReportGenerator implements EntryPoint {
public void onModuleLoad() {
singleton = this;
presenter = new Presenter();
- treeController = new AppControllerExplorer();
mainLayout.setWidth("100%");
mainLayout.setHeight("100%");
//
workSpacePanel = new WorkspacePanel(presenter);
titlebar = new TitleBar(presenter);
header = new Headerbar(presenter);
- toolBoxPanel = new ToolboxPanel(treeController);
+ toolBoxPanel = new ToolboxPanel();
presenter.setHeader(header);
presenter.setTitleBar(titlebar);
@@ -197,12 +192,6 @@ public class ReportGenerator implements EntryPoint {
public ToolboxPanel getToolBoxPanel() {
return toolBoxPanel;
}
-
- public GWTWorkspaceServiceAsync getWSTreeService() {
- return treeController.getRpcWorkspaceService();
- }
-
-
/**
*
* @return .
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java
index b314a9a..b5b3b45 100644
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportService.java
@@ -5,6 +5,7 @@ import java.util.ArrayList;
import org.gcube.portlets.d4sreporting.common.shared.Model;
import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries;
import org.gcube.portlets.d4sreporting.common.shared.Table;
+import org.gcube.portlets.user.reportgenerator.shared.ReportImage;
import org.gcube.portlets.user.reportgenerator.shared.SessionInfo;
import org.gcube.portlets.user.reportgenerator.shared.VMEReportBean;
import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier;
@@ -22,6 +23,8 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("ReportServiceImpl")
public interface ReportService extends RemoteService{
+ ReportImage getUploadedImageUrlById(String fileName, String absolutePath);
+
ArrayList listVMEReports();
ArrayList listVMEReportRefByType(VMETypeIdentifier refType);
@@ -35,6 +38,8 @@ public interface ReportService extends RemoteService{
String save(String filePath, String workspaceFolderId, String ItemName,
TypeExporter type, boolean overwrite)
throws SaveReportFileException, SaveReportFileExistException;
+
+ ReportImage getImageUrlById(String identifier);
/**
* return the first ten records of the timeseries having id as param
* @param sTS .
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java
index 718234b..84c2e45 100644
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportServiceAsync.java
@@ -5,6 +5,7 @@ import java.util.ArrayList;
import org.gcube.portlets.d4sreporting.common.shared.Model;
import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries;
import org.gcube.portlets.d4sreporting.common.shared.Table;
+import org.gcube.portlets.user.reportgenerator.shared.ReportImage;
import org.gcube.portlets.user.reportgenerator.shared.SessionInfo;
import org.gcube.portlets.user.reportgenerator.shared.VMEReportBean;
import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier;
@@ -91,4 +92,7 @@ public interface ReportServiceAsync {
AsyncCallback callback);
void deleteReportFromRSG(VMETypeIdentifier refType, String idToDelete,
AsyncCallback callback);
+ void getImageUrlById(String identifier, AsyncCallback callback);
+ void getUploadedImageUrlById(String fileName, String absolutePath,
+ AsyncCallback callback);
}
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java
index aec73f5..3027525 100644
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ToolboxPanel.java
@@ -1,14 +1,9 @@
package org.gcube.portlets.user.reportgenerator.client;
-import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
-import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent;
-import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent.DownloadType;
-import org.gcube.portlets.user.workspace.client.event.FileUploadEvent;
-import org.gcube.portlets.user.workspace.client.event.FileUploadEvent.UploadType;
-import org.gcube.portlets.user.workspace.client.view.tree.AsyncTreePanel;
+import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
+import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressDialog;
import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
@@ -17,8 +12,6 @@ import com.google.gwt.user.client.ui.VerticalPanel;
*/
public class ToolboxPanel extends VerticalPanel {
- private AppControllerExplorer appController;
- private AsyncTreePanel tp;
/**
*
*/
@@ -28,12 +21,7 @@ public class ToolboxPanel extends VerticalPanel {
*/
public static final int TOOLBOX_HEIGHT= 800;
- public ToolboxPanel(AppControllerExplorer appController) {
- this.appController = appController;
-// AsyncTreePanel tp = appController.getTree(TOOLBOX_WIDTH, TOOLBOX_HEIGHT);
-// this.tp = tp;
-// add(tp);
-// this.appController.hideSharingFacilities(); //sharing disabled we have problems from Reports
+ public ToolboxPanel() {
}
public void showStructure(ReportStructurePanel panel) {
@@ -50,7 +38,7 @@ public class ToolboxPanel extends VerticalPanel {
public void showExportedVersion(String id, String fileName) {
GWT.log("showExportedVersion");
- AppControllerExplorer.getEventBus().fireEvent(new FileDownloadEvent(id, fileName, DownloadType.SHOW));
+ //AppControllerExplorer.getEventBus().fireEvent(new FileDownloadEvent(id, fileName, DownloadType.SHOW));
}
/**
* refresh the root
@@ -58,12 +46,6 @@ public class ToolboxPanel extends VerticalPanel {
public void refreshRoot() {
//appController.refreshRoot();
}
- /**
- * show upload file popup
- */
- public void showUploadFile() {
- AppControllerExplorer.getEventBus().fireEvent(new FileUploadEvent(tp.getRootItem(), UploadType.FILE));
- }
/**
* lalala
* @return the toolbox height
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/TSHeader.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/TSHeader.java
deleted file mode 100644
index da8da4f..0000000
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/TSHeader.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.gcube.portlets.user.reportgenerator.client.dialog;
-
-import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-
-/**
- *
- * @author massi
- *
- */
-public class TSHeader extends HorizontalPanel {
-
- private CheckBox myCB;
- private HTML myHeader;
- private int myColNo;
- private FlexTable myTable;
- TimeSeriesFilterDialog caller;
- TSHeader myinstance;
-
- /**
- * @param tsf -
- * @param myTable .
- * @param cb .
- * @param myColNo .
- * @param myHeader .
- */
- public TSHeader(TimeSeriesFilterDialog tsf, FlexTable myTable, CheckBox cb, int myColNo, HTML myHeader) {
- super();
- myinstance = this;
- caller = tsf;
- this.myTable = myTable;
- this.myCB = cb;
-
- this.myColNo = myColNo;
- this.myHeader = myHeader;
- setVerticalAlignment(ALIGN_MIDDLE);
- myHeader.setStyleName("timeSeries_header_font");
- add(myHeader);
- add(myCB);
-
- myCB.addClickListener(cbListener);
- }
-
- private void removeEmptyHeaders( FlexTable myTable) {
-
- for (int i = 0; i < myTable.getCellCount(0); i++) {
- if (myTable.getWidget(0, i) == null) {
- myTable.removeCell(0, i);
- myTable.removeCell(1, i);
- }
- }
-
- }
-
- ClickListener cbListener = new ClickListener() {
- public void onClick(Widget sender) {
- caller.removeHeader(myinstance);
- myTable.remove(sender.getParent());
- removeEmptyHeaders(myTable);
- }
- };
- /**
- *
- * @return .
- */
- public CheckBox getMyCB() {
- return myCB;
- }
- /**
- *
- * @param myCB .
- */
- public void setMyCB(CheckBox myCB) {
- this.myCB = myCB;
- }
- /**
- *
- * @return .
- * */
- public HTML getMyHeader() {
- return myHeader;
- }
- /**
- *
- * @param myHeader .
- */
- public void setMyHeader(HTML myHeader) {
- this.myHeader = myHeader;
- }
- /**
- *
- * @return .
- */
- public int getMyColNo() {
- return myColNo;
- }
-
- /**
- *
- * @param myColNo .
- */
- public void setMyColNo(int myColNo) {
- this.myColNo = myColNo;
- }
-
-
-}
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/TimeSeriesFilterDialog.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/TimeSeriesFilterDialog.java
deleted file mode 100644
index a91435c..0000000
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/TimeSeriesFilterDialog.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package org.gcube.portlets.user.reportgenerator.client.dialog;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.gcube.portlets.d4sreporting.common.client.CommonConstants;
-import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesFilter;
-import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesinfo;
-import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries;
-import org.gcube.portlets.user.reportgenerator.client.targets.TSArea;
-
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.ScrollPanel;
-import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-/**
- *
- * @author massi
- *
- */
-public class TimeSeriesFilterDialog extends DialogBox {
- ScrollPanel scroller = new ScrollPanel();
- TextBox from = new TextBox();
- TextBox to = new TextBox();
- FlexTable flexTable = new FlexTable();
-
- List compoundHeaders = new LinkedList();
- /**
- *
- * @param sts a ts
- * @param caller .
- */
- public TimeSeriesFilterDialog(final TSArea caller, final RepTimeSeries sts) {
-
- final TimeSeriesinfo droppedTS = sts.getTsMetadata();
-
- setText(droppedTS.getTitle() + " Filter");
- String name = droppedTS.getTitle();
- long rowsNo = droppedTS.getDimension();
-
-
- Grid metadata = new Grid(2, 2);
- metadata.setWidget(0, 0, new HTML("Name:", true));
- metadata.setWidget(0, 1, new HTML(name));
- metadata.setWidget(1, 0, new HTML("Total rows : ", true));
- metadata.setWidget(1, 1, new HTML(""+rowsNo));
-
-
- final VerticalPanel main_panel = new VerticalPanel();
- main_panel.addStyleName("bgBlank p8 font_family font_12");
-
- main_panel.add(metadata);
-
- List headersString = droppedTS.getHeaderLabels();
-
- /**
- */
- for (int i = 0; i < headersString.size(); i++) {
- CheckBox toAdd = new CheckBox();
- toAdd.setChecked(true);
- compoundHeaders.add(new TSHeader(this, flexTable, toAdd, i, new HTML(headersString.get(i) )));
- }
-
-
- main_panel.add(new HTML("Selected fields: (click to remove)"));
-
- flexTable = getTableHeader(compoundHeaders);
- main_panel.add(flexTable);
-
- main_panel.add(new HTML("Select rows interval:"));
-
- from.setText("1");
- to.setText("10");
- to.setMaxLength(6);
- from.setMaxLength(6);
- from.addChangeListener(textBoxListener);
- to.addChangeListener(textBoxListener);
-
-
- Grid rowsInterval = new Grid(1, 4);
- rowsInterval.setWidget(0, 0, new HTML("From row:"));
- rowsInterval.setWidget(0, 1, from);
- rowsInterval.setWidget(0, 2, new HTML(" To row:"));
- rowsInterval.setWidget(0, 3, to);
-
- main_panel.add(rowsInterval);
-
- main_panel.add(new HTML("
"));
- HorizontalPanel buttonspanel = new HorizontalPanel();
- buttonspanel.setHeight("50");
- buttonspanel.setSpacing(3);
-
-
-
-
- // PopupPanel is a SimplePanel, so you have to set it's widget property to
- // whatever you want its contents to be.
- Button close = new Button("Close");
- close.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- hide();
- }
- });
-
- Button apply = new Button("Apply");
- apply.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- List selectedCols = compoundHeaders;
-
- List colsToShow = new LinkedList();
-
- for (TSHeader head : selectedCols) {
- colsToShow.add(new Integer(head.getMyColNo()));
- }
- int fromInt = Integer.parseInt(from.getText());
- int toInt = Integer.parseInt(to.getText());
-
- TimeSeriesFilter toSet = new TimeSeriesFilter(colsToShow, null, null, fromInt, toInt);
- caller.setNewFilter(toSet);
- caller.refreshHeaders();
- hide();
-
- }
- });
-
- buttonspanel.add(close);
- buttonspanel.add(apply);
- main_panel.add(buttonspanel);
-
- scroller.setPixelSize(550, 280);
- main_panel.setPixelSize(550, 260);
-
- scroller.add(main_panel);
- setWidget(scroller);
- }
-
-
- /**
- *
- * @param toRemove .
- * @return .
- */
- public boolean removeHeader(TSHeader toRemove) {
- return compoundHeaders.remove(toRemove);
- }
-
-
- /**
- * display the header of the ts
- * @param droppedTS
- * @return
- */
- private FlexTable getTableHeader(List headers) {
- flexTable.clear();
- int n = headers.size();
-
- for (int i = 0; i < n ; i++) {
- flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
- flexTable.setWidget(0, i, headers.get(i));
- flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
- flexTable.setWidget(1, i, new HTML("..."));
- }
-
- return flexTable;
- }
-
- ChangeListener textBoxListener = new ChangeListener() {
-
- public void onChange(Widget sender) {
- TextBox tb = (TextBox) sender;
- String text = tb.getText();
- String checkedText = text;
- text = text.replaceAll(CommonConstants.ACCEPTED_CHARS_JUST_NUM, "");
- if (! text.equals(checkedText) ) {
- Window.alert("Only numbers are accepted");
- tb.setText(text);
- }
- int start = Integer.parseInt(from.getText());
- int end = Integer.parseInt(to.getText());
-
- if (start >= end) {
- Window.alert("From must be greater than to");
- to.setText(""+(start+10));
- }
-
- }
-
-
- };
- /**
- *
- */
- public void show() {
- super.show();
- center();
- }
-
-}
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 231cf55..be101b6 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
@@ -23,14 +23,12 @@ import org.gcube.portlets.user.reportgenerator.client.targets.ClientRepeatableSe
import org.gcube.portlets.user.reportgenerator.client.targets.ClientReportReference;
import org.gcube.portlets.user.reportgenerator.client.targets.ClientSequence;
import org.gcube.portlets.user.reportgenerator.client.targets.D4sRichTextarea;
-import org.gcube.portlets.user.reportgenerator.client.targets.DropTSListener;
import org.gcube.portlets.user.reportgenerator.client.targets.ExtHidden;
import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable;
import org.gcube.portlets.user.reportgenerator.client.targets.GroupingDelimiterArea;
import org.gcube.portlets.user.reportgenerator.client.targets.GroupingInnerArea;
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 com.google.gwt.core.client.GWT;
@@ -338,24 +336,6 @@ public class TemplateComponent {
this.content = hiddenField;
break;
case TIME_SERIES:
- TSArea tsa;
- RepTimeSeries sts = null;
- try {
- sts = ((RepTimeSeries) sc.getPossibleContent());
- } catch (ClassCastException e) {
-
- }
- //need to reset the filter when loading a TS
- sts.setFilter(null);
- tsa = new TSArea(presenter, width, 155, sts);
-
- tsa.setPixelSize(width, 155);
-
-
- @SuppressWarnings("unused")
- DropTSListener dropTSListener = new DropTSListener(tsa);
-
- this.content = tsa;
break;
case REPEAT_SEQUENCE_DELIMITER:
GroupingDelimiterArea gp = new GroupingDelimiterArea(width, height);
@@ -490,9 +470,7 @@ public class TemplateComponent {
}
break;
case TIME_SERIES:
- GWT.log("Found Time Series", null);
- TSArea tsa = (TSArea) this.content;
- content = tsa.getSts();
+ GWT.log("Found Time Series, not supported anymore", null);
break;
case FLEX_TABLE:
GenericTable gt = (GenericTable) this.content;
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java
index 6f6f823..a64a4ea 100644
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java
@@ -5,13 +5,12 @@ import java.util.List;
import org.gcube.portlets.d4sreporting.common.shared.BasicComponent;
import org.gcube.portlets.d4sreporting.common.shared.Metadata;
-import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
+import org.gcube.portlets.user.reportgenerator.client.ReportService;
+import org.gcube.portlets.user.reportgenerator.client.ReportServiceAsync;
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
import org.gcube.portlets.user.reportgenerator.client.model.TemplateComponent;
import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel;
-import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem;
-import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage;
-import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTImageDocument;
+import org.gcube.portlets.user.reportgenerator.shared.ReportImage;
import org.gcube.portlets.widgets.lighttree.client.ItemType;
import org.gcube.portlets.widgets.lighttree.client.event.PopupEvent;
import org.gcube.portlets.widgets.lighttree.client.event.PopupHandler;
@@ -43,13 +42,13 @@ import com.google.gwt.user.client.ui.Widget;
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
*/
public class ClientImage extends Composite {
-
+ private ReportServiceAsync reportService = (ReportServiceAsync) GWT.create(ReportService.class);
private String expectedContent = "";
private final String METADATA_TITLE_KEY = "title";
private final String METADATA_DESC_KEY = "description";
private final String METADATA_SOURCE_KEY = "source";
-
+
private int imageWidth;
private int imageHeight;
@@ -70,12 +69,13 @@ public class ClientImage extends Composite {
private TextBox titleTB = new TextBox();
private TextBox descTB = new TextBox();
private TextBox sourceTB = new TextBox();
-
+
private Button resetB = new Button("Clear");
- private Button addImageB = new Button("Select Image");
+ private Button addImageB = new Button("Select from Workspace");
private Button uploadImageB = new Button("Upload Image");
private Button removeB = new Button("Remove Image");
private BasicComponent basicComponent;
+
/**
*
* @param presenter
@@ -103,7 +103,7 @@ public class ClientImage extends Composite {
attributesPanel.setStyleName("tableAttributesPanel");
String imageURL = (String) co.getPossibleContent();
-
+
if (imageURL == null || imageURL.trim().compareTo("") == 0 || imageURL.endsWith(TemplateComponent.DEFAULT_IMAGE_NAME)) {
GWT.log("Empty ImageUrl="+imageURL);
imagePanel.addStyleName("imageEmptyPanel");
@@ -112,7 +112,7 @@ public class ClientImage extends Composite {
GWT.log("Found ImageUrl="+imageURL);
showImage(new Image(imageURL), width, height);
}
-
+
//set style for buttons
for (int i = 0; i < controlPanel.getWidgetCount(); i++) {
if (controlPanel.getWidget(i) instanceof Button) {
@@ -144,7 +144,7 @@ public class ClientImage extends Composite {
showImage(new Image(TemplateComponent.DEFAULT_IMAGE_NAME), DEFAULT_WIDTH, DEFAULT_HEIGHT);
imagePanel.addStyleName("imageEmptyPanel");
}
-
+
private HorizontalPanel getControlPanel(boolean isRemovable, final TextTableImage owner) {
final HorizontalPanel toReturn = new HorizontalPanel();
@@ -152,11 +152,11 @@ public class ClientImage extends Composite {
@Override
public void onClick(ClickEvent event) {
if (owner != null) {
- remove(owner);
+ remove(owner);
}
}
});
-
+
resetB.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -170,11 +170,11 @@ public class ClientImage extends Composite {
openFileExplorer(addImageB.getAbsoluteLeft(), addImageB.getAbsoluteTop());
}
});
-
+
uploadImageB.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
- presenter.showUploadFilePopup();
+ showUploadPopup();
}
});
@@ -184,13 +184,17 @@ public class ClientImage extends Composite {
toReturn.add(resetB);
toReturn.add(uploadImageB);
toReturn.add(addImageB);
-
+
return toReturn;
}
+ private void showUploadPopup() {
+ presenter.showUploadFilePopup(this);
+ }
+
private VerticalPanel getAttributesPanel(BasicComponent co) {
VerticalPanel toReturn = new VerticalPanel();
-
+
for (Metadata md : co.getMetadata()) {
if (md.getAttribute().compareTo(METADATA_TITLE_KEY) == 0)
titleTB.setText(md.getValue());
@@ -205,22 +209,22 @@ public class ClientImage extends Composite {
hp1.add(title);
hp1.add(titleTB);
titleTB.setWidth("135px");
-
+
HTML desc = new HTML(" Description: ", true);
-
+
HTML source = new HTML("Source: ", true);
-
+
hp1.add(desc);
hp1.add(descTB);
- descTB.setWidth("435px");
+ descTB.setWidth("400px");
toReturn.add(hp1);
-
+
toReturn.add(source);
toReturn.add(sourceTB);
sourceTB.setWidth("693px");
-
+
return toReturn;
}
@@ -251,7 +255,7 @@ public class ClientImage extends Composite {
imageHeight = checkedHeight;
saveStatus();
}
-
+
/**
* called by the constructor
* @param toShow the image to show
@@ -270,7 +274,7 @@ public class ClientImage extends Composite {
basicComponent.setMetadata(mds);
GWT.log("Saved in Session");
}
-
+
public List getMetadata() {
return basicComponent.getMetadata();
}
@@ -286,25 +290,24 @@ public class ClientImage extends Composite {
}
public void fetchImage(String identifier, final boolean isInteralImage, boolean fullDetails) {
- ReportGenerator.get().getWSTreeService().getImageById(identifier, isInteralImage, fullDetails, new AsyncCallback() {
+ GWT.log("fetchImage:" + identifier);
+ reportService.getImageUrlById(identifier, new AsyncCallback() {
+
+ @Override
+ public void onSuccess(ReportImage image) {
+ int width = image.getWidth();
+ int height = image.getHeight();
+ GWT.log("image.getUrl():" + image.getUrl());
+ dropImage(image.getUrl(), image.getId(), width, height);
- public void onSuccess(GWTWorkspaceItem result) {
- if (isInteralImage) {
- GWTImageDocument image = (GWTImageDocument) result;
- int width = image.getWidth();
- int height = image.getHeight();
- dropImage(image.getImageUrl(), image.getId(), width, height);
- } else {
- GWTExternalImage image = (GWTExternalImage) result;
- int width = image.getWidth();
- int height = image.getHeight();
- dropImage(image.getImageUrl(), image.getId(), width, height);
- }
}
+
+ @Override
public void onFailure(Throwable caught) {
Window.alert("Could not fetch image from infrastructure " + caught.getCause());
+
}
- });
+ });
}
/**
@@ -316,36 +319,6 @@ public class ClientImage extends Composite {
return new Image();
return currImage;
}
-//
-// /**
-// * return a URL which is lookable for on the web
-// * @param imageName .
-// * @param templateName .
-// * @return .
-// */
-// public String getImageURL(String imageName, String templateName) {
-// currentUser = presenter.getCurrentUser().getUsername();
-// currentScope = presenter.getCurrentScope();
-// /**
-// * Images will be stored under webapps/usersArea...
-// * GWT.getModuleBaseURL() returns * e.g. http://dlib28.isti.cnr.it/templatecreator/html/
-// * need to get just http://dlib28.isti.cnr.it/
-// */
-// //remove "/html/" and get e.g. http://dlib28.isti.cnr.it/templatecreator
-// String host = GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().length()-6);
-//
-// //loog for last slash
-// int lastSlash = host.lastIndexOf("/");
-//
-// //get what i need : e.g. http://dlib28.isti.cnr.it/ or host = "http://localhost:8080/";
-// host = host.substring(0, lastSlash +1 );
-// //host = "http://localhost:8080/";
-//
-// String imgURL = host + "usersArea/" + currentScope + "/templates/"
-// + currentUser + "/CURRENT_OPEN/images/" + imageName;
-//
-// return imgURL;
-// }
/**
*
@@ -376,7 +349,7 @@ public class ClientImage extends Composite {
return expectedContent;
}
-
+
public BasicComponent getBasicComponent() {
return basicComponent;
}
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropTSListener.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropTSListener.java
deleted file mode 100644
index 90ffd44..0000000
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/DropTSListener.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- *
- */
-package org.gcube.portlets.user.reportgenerator.client.targets;
-
-
-
-
-import java.util.List;
-
-import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum;
-import org.gcube.portlets.user.workspace.client.model.FileModel;
-
-import com.extjs.gxt.ui.client.dnd.DND.Operation;
-import com.extjs.gxt.ui.client.dnd.DropTarget;
-import com.extjs.gxt.ui.client.dnd.Insert;
-import com.extjs.gxt.ui.client.event.DNDEvent;
-import com.extjs.gxt.ui.client.store.TreeStoreModel;
-import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
-import com.google.gwt.core.client.GWT;
-
-/**
- * @author Federico De Faveri defaveri@isti.cnr.it
- *
- */
-public class DropTSListener extends DropTarget {
- /**
- *
- */
- public static final String NO_DROP = "x-dd-drop-nodrop";
- /**
- *
- */
- public static final String OK_DROP = "x-dd-drop-ok";
- /**
- *
- */
- public static final String OK_DROP_ADD = "x-dd-drop-ok-add";
-
- protected TSArea panel;
-
- /**
- *
- * @param panel .
- * @param config .
- */
- public DropTSListener(TSArea panel) {
- super(panel);
- this.panel = panel;
- //IMPORTANT
- setOperation(Operation.COPY);
- }
-
- @Override
- protected void showFeedback(DNDEvent event) {
- if (!isValidDropTarget(event)) {
- Insert.get().hide();
- event.getStatus().setStatus(false);
- return;
- }
- super.showFeedback(event);
- }
-
-
- @SuppressWarnings("unchecked")
- private boolean isValidDropTarget(DNDEvent event) {
- GWT.log("isValidDropTarget");
- TreePanel source = (TreePanel) event.getDragSource().getComponent();
- List selection = source.getSelectionModel().getSelection();
-
- for (FileModel model : selection) {
- GWT.log("selection: " + model.getGXTFolderItemType());
- if(model.getGXTFolderItemType()!=null){
- if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.TIME_SERIES))
- return true;
- }
- }
- return false;
- }
-
- /**
- * @param source .
- * @param e .
- * @param data .
- * @return .
- */
- protected void onDragDrop(DNDEvent event) {
-
- super.onDragDrop(event);
-
- if(event.getData() != null){
- List listItemsSource = event.getData();
- GWT.log("Number of move " + listItemsSource.size());
-
- FileModel sourceFileModel = null; //for print
-
- for(TreeStoreModel itemSource : listItemsSource){
-
- sourceFileModel = (FileModel) itemSource.getModel();
-
- if(sourceFileModel.getParentFileModel()!=null)
- GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier());
- else
- GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag ");
-
- GWT.log("Child count: " + itemSource.getChildCount());
-
- panel.fetchTS(sourceFileModel.getIdentifier(), false , true);
-
- }
- }
-
- }
-
-}
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TSArea.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TSArea.java
deleted file mode 100644
index f39d433..0000000
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TSArea.java
+++ /dev/null
@@ -1,312 +0,0 @@
-package org.gcube.portlets.user.reportgenerator.client.targets;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesFilter;
-import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesinfo;
-import org.gcube.portlets.d4sreporting.common.shared.Table;
-import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries;
-import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
-import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
-import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesDialog;
-import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesFilterDialog;
-import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesSampleDialog;
-import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem;
-import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTTimeSeries;
-
-import com.extjs.gxt.ui.client.widget.Composite;
-import com.extjs.gxt.ui.client.widget.VerticalPanel;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Label;
-
-
-
-/**
- * TSArea
class is a Widget you can drop a Workspace Time Series on
- *
- * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
- * @version July 2011 (3.0)
- */
-public class TSArea extends Composite {
-
- private VerticalPanel mainPanel;
- private RepTimeSeries sts = new RepTimeSeries();
- private String idInBasket;
- private Presenter presenter;
- private FlexTable flexTable;
- private TSArea singleton;
-
- VerticalPanel tableContainer = new VerticalPanel();
- Grid metadata = new Grid(3, 2);
-
- Label label;
- /**
- * @param presenter .
- * @param width .
- * @param height .
- * @param sts the time series
- */
- public TSArea(Presenter presenter, int width, int height, RepTimeSeries sts) {
- singleton = this;
- this.presenter = presenter;
- mainPanel = new VerticalPanel();
- //setElement(mainPanel.getElement());
-
- mainPanel.setStyleName("timeseriesArea");
- mainPanel.addStyleName("timeseriesArea_bg");
- mainPanel.setWidth(width);
- mainPanel.setHeight(height);
-
- mainPanel.add(new HTML(" ", true));
- this.sts = sts;
- if (sts != null) {
- if (sts.getTsMetadata() != null) {
- showTS(sts.getTsMetadata());
- }
- }
- initComponent(mainPanel);
- mainPanel.layout(true);
- }
-
-
- /**
- * called when dropped a TS on the area
- * @param toShow the TS to show
- */
- public void showTS(TimeSeriesinfo toShow) {
- mainPanel.removeAll();
- mainPanel.removeStyleName("timeseriesArea_bg");
- tableContainer.removeAll();
-
- metadata.setWidget(0, 0, new HTML("TS name:", true));
- metadata.setWidget(0, 1, new HTML(toShow.getTitle()));
- metadata.setWidget(1, 0, new HTML("Creation Date: ", true));
- metadata.setWidget(1, 1, new HTML(toShow.getTimeSeriesCreationDate()));
- metadata.setWidget(2, 0, new HTML("Total rows:", true));
- metadata.setWidget(2, 1, new HTML(""+toShow.getDimension()));
-
-
- List headers = toShow.getHeaderLabels();
- flexTable = new FlexTable();
-
- int n = (headers.size() > 10) ? 10 : headers.size();
-
- for (int i = 0; i < n ; i++) {
- flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
- flexTable.setWidget(0, i, new HTML(headers.get(i)));
- flexTable.setWidget(1, i, new HTML(".."));
- flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
- }
- if (headers.size() > 10) {
- flexTable.setWidget(0, 11, new HTML(" more .."));
- flexTable.setWidget(1, 11, new HTML(".."));
- flexTable.getCellFormatter().setStyleName(0, 11, "timeSeries_header");
- flexTable.getCellFormatter().setStyleName(1, 11, "timeSeries_td");
- }
-
- tableContainer.add(flexTable);
-
- mainPanel.add(metadata);
- mainPanel.add(tableContainer);
-
- Button moreDetails = new Button("View Timeseries Metadata");
- Button filter = new Button("Filter Table");
- Button showSample = new Button("Show Sample");
-
- HorizontalPanel buttonsPanel = new HorizontalPanel();
- buttonsPanel.setSpacing(5);
- buttonsPanel.add(moreDetails);
- buttonsPanel.add(filter);
- buttonsPanel.add(showSample);
-
- mainPanel.add(buttonsPanel);
-
- moreDetails.addClickHandler(viewMetadataTS);
- showSample.addClickHandler(showTSSample);
- filter.addClickHandler(applyFilterTs);
-
- mainPanel.layout(true);
- }
-
- ClickHandler viewMetadataTS = new ClickHandler() {
- public void onClick(ClickEvent event) {
- TimeSeriesDialog dlg = new TimeSeriesDialog(sts.getTsMetadata());
- dlg.setAnimationEnabled(true);
- dlg.show();
- }
-
- };
-
- ClickHandler applyFilterTs = new ClickHandler() {
-
- public void onClick(ClickEvent event) {
- TimeSeriesFilterDialog dlg = new TimeSeriesFilterDialog(singleton, sts);
- //dlg.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop());
- dlg.setAnimationEnabled(true);
- dlg.show();
- }
-
- };
-
- ClickHandler showTSSample = new ClickHandler() {
- public void onClick(ClickEvent event) {
- presenter.getModel().getModelService().getSampleTimeSeries(sts, new AsyncCallback() {
- public void onFailure(Throwable caught) { Window.alert("There were Problem contacting Server, please try later");}
-
- public void onSuccess(Table result) {
- Table toPass = result;
- TimeSeriesSampleDialog dlg = new TimeSeriesSampleDialog(toPass);
- dlg.setAnimationEnabled(true);
- dlg.show();
- }
- });
- }
- };
- /**
- *
- * @param droppedTS the dropped timeseries
- */
- public void dropTS(GWTTimeSeries droppedTS) {
- idInBasket = droppedTS.getId();
- TimeSeriesinfo tsMetadata = convertWSTS2SerialazableTS(droppedTS);
- sts = new RepTimeSeries(null, tsMetadata);
- GWT.log("showTS TS");
- showTS(tsMetadata);
- }
-
- public void fetchTS(String identifier, boolean isInteralImage, boolean fullDetails) {
- GWT.log("FETCH TS");
- this.mask("fetching TimeSeries, pleas wait", "loading-indicator");
-
- ReportGenerator.get().getWSTreeService().getTimeSeriesById(identifier, new AsyncCallback() {
- public void onSuccess(GWTWorkspaceItem result) {
- unmask();
- GWTTimeSeries ts = (GWTTimeSeries) result;
- dropTS(ts);
- }
- public void onFailure(Throwable caught) {
- unmask();
- Window.alert("Could not fetch Time Series from infrastructure " + caught.getCause());
- }
- });
- }
-
- /**
- * converts the WorkSpace TS Object into a Report TS Object
- * @param md the TS metadata to convert
- * @return
- */
- private TimeSeriesinfo convertWSTS2SerialazableTS(GWTTimeSeries md) {
- TimeSeriesinfo tsMetadata = new TimeSeriesinfo(md.getId(), md.getName(), md.getDescription(), md.getOwner(),
- md.getCreationTime(), md.getLastModificationTime(), md.getTimeSeriesId(), md.getTitle(), md.getCreator(),
- md.getTimeSeriesDescription(), md.getTimeSeriesCreationDate(),
- md.getPublisher(), md.getSourceId(), md.getSourceName(), md.getRights(), md.getDimension(), md.getHeaderLabels());
-
- return tsMetadata;
- }
-
- /**
- * refresh the headers once the TS has been filtered
- */
- public void refreshHeaders() {
- tableContainer.removeAll();
- flexTable = new FlexTable();
-
- List filteredHeaders = new LinkedList();
- TimeSeriesFilter tf = sts.getFilter();
-
- for (Integer colNo : tf.getColsNumberToShow()) {
- String toAdd = sts.getTsMetadata().getHeaderLabels().get(colNo);
- filteredHeaders.add(toAdd);
- }
-
-
- int n = (filteredHeaders.size() > 10) ? 10 : filteredHeaders.size();
-
- for (int i = 0; i < n ; i++) {
- flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
- flexTable.setWidget(0, i, new HTML(filteredHeaders.get(i)));
- flexTable.setWidget(1, i, new HTML(".."));
- flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
- }
- if (filteredHeaders.size() > 10) {
- flexTable.setWidget(0, 11, new HTML(" more .."));
- flexTable.setWidget(1, 11, new HTML(".."));
- flexTable.getCellFormatter().setStyleName(0, 11, "timeSeries_header");
- flexTable.getCellFormatter().setStyleName(1, 11, "timeSeries_td");
- }
-
- tableContainer.add(flexTable);
- Grid newGrid = new Grid(1, 2);
- newGrid.setWidget(0, 0, new HTML("Selected Interval: ", true));
- newGrid.setWidget(0, 1, new HTML(tf.getFrom() + " - " + tf.getTo() ));
- tableContainer.add(newGrid);
-
- }
- /**
- *
- * @return the possible content
- */
- public Label getLabel() {
- return label;
- }
-
- /**
- *
- * @param label set the label
- */
- public void setLabel(Label label) {
- this.label = label;
- }
-
-
- /**
- *
- * @return .
- */
- public String getIdInBasket() {
- return idInBasket;
- }
-
- /**
- *
- * @param idInBasket .
- */
- public void setIdInBasket(String idInBasket) {
- this.idInBasket = idInBasket;
- }
-
- /**
- *
- * @return .
- */
- public RepTimeSeries getSts() {
- return sts;
- }
-
- /**
- *
- * @param sts .
- */
- public void setSts(RepTimeSeries sts) {
- this.sts = sts;
- }
-
- /**
- *
- * @param tsf the new ts filter
- */
- public void setNewFilter(TimeSeriesFilter tsf) {
- this.sts.setFilter(tsf);
- }
-}
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java
index 9c5fda8..92bf4de 100644
--- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/uibinder/OpenOptions.java
@@ -67,7 +67,7 @@ public class OpenOptions extends Composite {
cmd.openTemplate.execute();
break;
case UPLOAD:
- p.showUploadFilePopup();
+ p.showUploadFilePopup(null); //TODO: fix this
break;
default:
break;
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/DownloadImageServlet.java b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/DownloadImageServlet.java
new file mode 100644
index 0000000..1cfc3bd
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/server/servlet/DownloadImageServlet.java
@@ -0,0 +1,120 @@
+package org.gcube.portlets.user.reportgenerator.server.servlet;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StringReader;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
+import org.gcube.application.framework.core.session.SessionManager;
+import org.gcube.common.homelibrary.home.HomeLibrary;
+import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
+import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
+import org.gcube.common.homelibrary.home.workspace.Workspace;
+import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
+import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
+import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalImage;
+import org.gcube.common.homelibrary.util.MimeTypeUtil;
+import org.gcube.common.portal.PortalContext;
+import org.gcube.common.scope.api.ScopeProvider;
+import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
+
+/**
+ * Servlet implementation class DownloadImageServlet
+ */
+public class DownloadImageServlet extends HttpServlet {
+ protected static Logger _log = Logger.getLogger(DownloadImageServlet.class);
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * @see HttpServlet#HttpServlet()
+ */
+ public DownloadImageServlet() {
+ super();
+ }
+
+ /**
+ * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
+ */
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ String itemId = req.getParameter("id");
+ if(itemId==null || itemId.isEmpty()){
+ sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Item id is null");
+ return;
+ }
+ Workspace wa;
+ WorkspaceItem item;
+ try{
+ wa = getWorkspaceArea(req.getSession());
+ item = wa.getItem(itemId);
+ ExternalImage externalImage = (ExternalImage) item;
+
+ String mimeType = externalImage.getMimeType();
+ String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType);
+
+ resp.setHeader( "Content-Disposition", "inline; filename=\"" + itemName + "\"" );
+ resp.setContentType(externalImage.getMimeType());
+
+ resp.setContentLength((int) externalImage.getLength());
+
+ OutputStream out = resp.getOutputStream();
+ InputStream is = externalImage.getData();
+
+ IOUtils.copy(is, out);
+ is.close();
+
+ out.close();
+ return;
+ } catch (Exception e) {
+ _log.error("Error during item retrieving "+itemId,e);
+ sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during image retrieving: "+e.getMessage());
+ return;
+ }
+ }
+
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
+
+ /**
+ *
+ * @return
+ * @throws WorkspaceFolderNotFoundException
+ * @throws InternalErrorException
+ * @throws HomeNotFoundException
+ */
+ protected Workspace getWorkspaceArea(HttpSession session) throws WorkspaceFolderNotFoundException, InternalErrorException, HomeNotFoundException {
+ String user = (String) session.getAttribute(ScopeHelper.USERNAME_ATTRIBUTE);
+ String currScope = ScopeProvider.instance.get();
+ if (currScope == null) {
+ String scope2Set = "/"+PortalContext.getConfiguration().getInfrastructureName();
+ ScopeProvider.instance.set(scope2Set);
+ _log.warn("Found scope null, setting infrastructure scope="+scope2Set);
+ }
+ if (user == null) {
+ user = ReportServiceImpl.getDevUser();
+ ScopeProvider.instance.set(ReportServiceImpl.TEST_SCOPE);
+ _log.warn("User is null in session, setting dev user = " + user);
+ }
+ Workspace toReturn = HomeLibrary.getUserWorkspace(user);
+
+ return toReturn;
+ }
+
+
+ protected void sendError(HttpServletResponse response, String resultMessage) throws IOException {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ _log.trace("error message: "+resultMessage);
+ _log.trace("writing response...");
+ StringReader sr = new StringReader(resultMessage);
+ IOUtils.copy(sr, response.getOutputStream());
+ _log.trace("response wrote");
+ response.flushBuffer();
+ }
+
+}
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 abb425c..08b35b0 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
@@ -30,6 +30,11 @@ import net.sf.csv4j.ParseException;
import net.sf.csv4j.ProcessingException;
import org.apache.commons.io.IOUtils;
+import org.apache.tika.config.TikaConfig;
+import org.apache.tika.detect.Detector;
+import org.apache.tika.io.TikaInputStream;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MediaType;
import org.gcube.application.framework.accesslogger.library.impl.AccessLogger;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.application.framework.core.session.SessionManager;
@@ -85,6 +90,7 @@ import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.CreateRepo
import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.OpenReportLogEntry;
import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.OpenWorkflowLogEntry;
import org.gcube.portlets.user.reportgenerator.server.servlet.loggers.SaveWorkflowLogEntry;
+import org.gcube.portlets.user.reportgenerator.shared.ReportImage;
import org.gcube.portlets.user.reportgenerator.shared.SessionInfo;
import org.gcube.portlets.user.reportgenerator.shared.UserBean;
import org.gcube.portlets.user.reportgenerator.shared.VMEReportBean;
@@ -107,6 +113,7 @@ import com.liferay.portlet.documentlibrary.model.DLFileEntry;
+
/**
*
* class implementing services
@@ -122,9 +129,9 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
private boolean withinPortal = true;
//private static final String TEST_SCOPE = "/gcube/devsec/devVRE";
- private static final String TEST_SCOPE = "/gcube/devNext/NextNext";
-
+ public static final String TEST_SCOPE = "/gcube/devNext/NextNext";
+ protected static final String IMAGE_SERVICE_URL = "reports/DownloadService";
/**
*
*/
@@ -141,6 +148,8 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
*
*/
public static final String RSG_WS_ADDRESS = "RSG_WS_ADDRESS";
+
+ private static final String REPORT_IMAGES_FOLDER = "Report Images";
/**
@@ -169,7 +178,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE);
if (user == null) {
- user = "massimiliano.assante";
+ user = getDevUser();
this.getThreadLocalRequest().getSession().setAttribute(ScopeHelper.USERNAME_ATTRIBUTE, user);
SessionManager.getInstance().getASLSession(sessionID, user).setScope(TEST_SCOPE);
String email = user+"@isti.cnr.it";
@@ -187,6 +196,9 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
return SessionManager.getInstance().getASLSession(sessionID, user);
}
+ public static String getDevUser() {
+ return "massimiliano.assante";
+ }
/**
* Retrieve the user saved template names
*
@@ -380,12 +392,16 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
AccessLogger log = AccessLogger.getAccessLogger();
OpenReportLogEntry logEntry = new OpenReportLogEntry(toReturn.getTemplateName(), templateObjectID);
log.logEntry(getASLSession().getUsername(), getASLSession().getScopeName(), logEntry);
-
+
if (! isTemplate) {
- ModelReader reader = new ModelReader(toReturn);
- System.out.println(reader);
+ try {
+ ModelReader reader = new ModelReader(toReturn);
+ System.out.println(reader);
+ } catch (Exception e) {
+ _log.warn("ModelReader fails to read this report, continue...");
+ }
}
-
+
return toReturn;
}
}
@@ -396,8 +412,96 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
return new Model();
}
+
+
+ /**
+ * used when an image is uploaded
+ */
+ @Override
+ public ReportImage getUploadedImageUrlById(String fileName, String absolutePathOnServer) {
+ if (absolutePathOnServer == null)
+ return null;
+ try {
+ _log.trace("trying read: "+absolutePathOnServer);
+ WorkspaceFolder imagesFolder = getImagesFolder();
+ // Read from an input stream
+ InputStream imageData = new BufferedInputStream(new FileInputStream(absolutePathOnServer));
+ ExternalImage image = imagesFolder.createExternalImageItem(fileName, "automatically uploaded by Reports Manager", getMimeType(imageData, fileName), imageData);
+ _log.trace("Created external image with name " + image.getName());
+ return new ReportImage(image.getId(), buildImageServiceUrl(image.getId()), image.getWidth(), image.getHeight());
+ } catch (Exception e) {
+ _log.error("Error in server get image by id", e);
+ e.printStackTrace();
+ }
+ return null;
+ }
+ private WorkspaceFolder getImagesFolder() {
+ Workspace ws = null;
+ WorkspaceFolder reportFolder = null;
+ try {
+ ws = getWorkspaceArea();
+ if (! ws.getRoot().exists(REPORT_IMAGES_FOLDER)) {
+ reportFolder = ws.getRoot().createFolder(REPORT_IMAGES_FOLDER, "This folder hosts the images uploaded by the Reports Manager");
+ } else {
+ reportFolder = (WorkspaceFolder) ws.getRoot().find(REPORT_IMAGES_FOLDER);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return reportFolder;
+ }
+ /**
+ *
+ * @param is
+ * @return
+ * @throws IOException
+ * @throws MagicParseException
+ * @throws MagicMatchNotFoundException
+ * @throws MagicException
+ */
+ protected static String getMimeType(InputStream is, String filenameWithExtension) throws IOException {
+ TikaConfig config = TikaConfig.getDefaultConfig();
+ Detector detector = config.getDetector();
+ TikaInputStream stream = TikaInputStream.get(is);
+ Metadata metadata = new Metadata();
+ metadata.add(Metadata.RESOURCE_NAME_KEY, filenameWithExtension);
+ MediaType mediaType = detector.detect(stream, metadata);
+ return mediaType.getBaseType().toString();
+ }
+ /**
+ * used to actually display images in reports (when reading reports)
+ */
+ @Override
+ public ReportImage getImageUrlById(String identifier) {
+ if (identifier == null)
+ return null;
+ try {
+ Workspace workspace = getWorkspaceArea();
+ _log.trace("get image URL by id: "+identifier);
+
+ WorkspaceItem item = workspace.getItem(identifier); //get item from workspace
+
+ //ACCOUNTING READ
+ item.markAsRead(true);
+
+ _log.trace("item name " + item.getName());
+ ExternalImage image = (ExternalImage) item; //Cast External Document
+ return new ReportImage(image.getId(), buildImageServiceUrl(image.getId()), image.getWidth(), image.getHeight());
+
+ } catch (Exception e) {
+ _log.error("Error in server get image by id", e);
+ e.printStackTrace();
+ }
+ return null;
+ }
+ protected String buildImageServiceUrl(String id) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(IMAGE_SERVICE_URL).append("?id=").append(id).append("&type=IMAGE");
+ return sb.toString();
+ }
/**
@@ -836,9 +940,14 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
ServiceUtil myUtil = new ServiceUtil(getASLSession());
boolean result = myUtil.writeModel(model, "CURRENT_OPEN", getVreName(), getUsername());
- ModelReader reader = new ModelReader(model);
- System.out.println(reader);
+ try {
+ ModelReader reader = new ModelReader(model);
+ System.out.println(reader);
+ } catch (Exception e) {
+ _log.warn("ModelReader fails to read this report, continue...");
+ }
+
if (!result) {
_log.debug("Could not save report, serializing failed");
}
@@ -1652,11 +1761,11 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
return new VmeExportResponse(new VmeResponseEntry("RUNTIME_EXCEPTION", "Sorry, there was an error on the Server, please try again in few minutes or report an Issue."));
}
}
-
+
@Override
public VmeExportResponse deleteReportFromRSG(VMETypeIdentifier refType, String idToDelete) {
RsgService rsgClient = new RsgClient(getRSGWSAddress());
-
+
try {
Response res = null;
if (refType == VMETypeIdentifier.Vme) {
@@ -1673,7 +1782,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
return new VmeExportResponse(new VmeResponseEntry("RUNTIME_EXCEPTION", "Sorry, there was an error on the Server, we could not delete. Please try again in few minutes or report an Issue."));
}
}
-
+
/**
* this method look for a ReportsStoreGateway WS available in the infrastructure
* @return true if an instance of the ReportsStoreGateway is available in the infrastructure
@@ -1717,7 +1826,7 @@ public class ReportServiceImpl extends RemoteServiceServlet implements ReportSe
return toReturn;
}
-
+
}
diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/shared/ReportImage.java b/src/main/java/org/gcube/portlets/user/reportgenerator/shared/ReportImage.java
new file mode 100644
index 0000000..43cc0a8
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/reportgenerator/shared/ReportImage.java
@@ -0,0 +1,46 @@
+package org.gcube.portlets.user.reportgenerator.shared;
+
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class ReportImage implements Serializable {
+ private String id;
+ private String url;
+ private int width;
+ private int height;
+ public ReportImage() {
+ super();
+ }
+ public ReportImage(String id, String url, int width, int height) {
+ super();
+ this.id = id;
+ this.url = url;
+ this.width = width;
+ this.height = height;
+ }
+ public String getId() {
+ return id;
+ }
+ public void setId(String id) {
+ this.id = id;
+ }
+ public String getUrl() {
+ return url;
+ }
+ public void setUrl(String url) {
+ this.url = url;
+ }
+ public int getWidth() {
+ return width;
+ }
+ public void setWidth(int width) {
+ this.width = width;
+ }
+ public int getHeight() {
+ return height;
+ }
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+}
diff --git a/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml b/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml
index 723f96b..68e5e93 100644
--- a/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml
+++ b/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml
@@ -4,14 +4,14 @@
-
-
+
+
-
+
-
+
ReportGenerator-portlet
@@ -36,6 +33,39 @@
+
+ uploadprogress
+ org.gcube.portlets.widgets.fileupload.server.UploadProgressServlet
+
+
+
+ uploadprogress
+ /reports/uploadprogress
+
+
+
+ DownloadService
+ org.gcube.portlets.user.reportgenerator.server.servlet.DownloadImageServlet
+
+
+
+ DownloadService
+ /reports/DownloadService
+
+
+
+
+ upload
+ org.gcube.portlets.widgets.fileupload.server.UploadServlet
+
+
+
+ upload
+ /FileUpload/upload
+
+
+
+
remoteLoggerServiceImpl
@@ -47,55 +77,6 @@
/reports/gwt-log
-
-
- WorkspaceService
- org.gcube.portlets.user.workspace.server.GWTWorkspaceServiceImpl
-
-
-
- WorkspaceService
- /reports/WorkspaceService
-
-
-
- UploadService
- org.gcube.portlets.user.workspace.server.UploadServlet
-
-
-
- UploadService
- /reports/UploadService
-
-
-
- localUploadServlet
- org.gcube.portlets.user.workspace.server.LocalUploadServlet
-
-
- localUploadServlet
- /reports/LocalUploadService
-
-
-
- DownloadService
- org.gcube.portlets.user.workspace.server.DownloadServlet
-
-
-
- DownloadService
- /reports/DownloadService
-
-
-
- ImageService
- org.gcube.portlets.user.workspace.server.ImageServlet
-
-
-
- ImageService
- /reports/ImageService
-
@@ -127,23 +108,7 @@
/reports/downloadEncryptedReport
-
- DownloadService
- /org.gcube.portlets.user.reportgenerator.ReportGeneratorJUnit/DownloadService
-
-
- WorkspaceService
- /org.gcube.portlets.user.reportgenerator.ReportGeneratorJUnit/WorkspaceService
-
-
- ImageService
- /org.gcube.portlets.user.reportgenerator.ReportGeneratorJUnit/ImageService
-
-
- UploadService
- /org.gcube.portlets.user.reportgenerator.ReportGeneratorJUnit/UploadService
-
ReportGenerator.html