From 091b0ef5303a534a20336149e45e2b3d6a8b0d83 Mon Sep 17 00:00:00 2001
From: Giancarlo Panichi
Date: Mon, 30 Sep 2019 16:40:46 +0000
Subject: [PATCH] ref 11711: SAI - Add a simple text viewer so that log files
created by Data Miner algorithms can be directly viewed in the browser
https://support.d4science.org/issues/11711
Added service info[ticket #12594]
Added support to show log information [ticket #11711]
Added support to show files html, json, pdf, txt [ticket #17106]
Updated information show to the user when a computation is submitted [ticket #17030]
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/data-miner-manager@181871 82a268e6-3cf1-43bd-a215-b396298e98cf
---
.../ComputationValueFilePanel.java | 2 +-
.../client/experiments/WorkflowPanel.java | 14 +--
.../client/info/ServiceInfoData.java | 48 ---------
.../info/ServiceInfoDataProperties.java | 4 +-
.../client/info/ServiceInfoPanel.java | 98 ++++++++++++++-----
.../client/widgets/FileViewer.java | 9 +-
.../client/widgets/ImageViewer.java | 20 ++--
.../TestInformationSystemRequests.java | 8 +-
8 files changed, 111 insertions(+), 92 deletions(-)
delete mode 100644 src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoData.java
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueFilePanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueFilePanel.java
index f842cdc..264f047 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueFilePanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/computations/ComputationValueFilePanel.java
@@ -92,7 +92,7 @@ public class ComputationValueFilePanel extends SimpleContainer {
if (fileName != null && !fileName.isEmpty()) {
String fileNameLowerCase = fileName.toLowerCase();
if (fileNameLowerCase.endsWith(".html") || fileNameLowerCase.endsWith(".htm")
- || fileNameLowerCase.endsWith(".log") || fileNameLowerCase.endsWith(".json")
+ || fileNameLowerCase.endsWith(".pdf")|| fileNameLowerCase.endsWith(".log") || fileNameLowerCase.endsWith(".json")
|| fileNameLowerCase.endsWith(".txt")) {
buttonsContainer.add(showFileButton, buttonBoxLayoutData);
}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/WorkflowPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/WorkflowPanel.java
index ad579ab..99a92d0 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/WorkflowPanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/experiments/WorkflowPanel.java
@@ -21,9 +21,11 @@ import com.sencha.gxt.widget.core.client.TabPanel;
*
*/
public class WorkflowPanel extends TabPanel {
-
- public static final String DEFAULT_OPERATOR = "AQUAMAPS_SUITABLE";
-
+ private static final String OPERATOR = "Operator";
+ private static final String COMPUTATIONS_EXECUTION = "Computations Execution";
+ private static final String SERVICE_INFO = "Service Profile";
+
+
private ComputationExecutionPanel computationExecutionPanel;
private ComputationPanel computationPanel;
private ServiceInfoPanel environmentPanel;
@@ -45,7 +47,7 @@ public class WorkflowPanel extends TabPanel {
private void create() {
- TabItemConfig tabWorkFlowLcItemConf = new TabItemConfig("Operator",
+ TabItemConfig tabWorkFlowLcItemConf = new TabItemConfig(OPERATOR,
false);
tabWorkFlowLcItemConf.setIcon(DataMinerManager.resources
.folderExplore());
@@ -63,14 +65,14 @@ public class WorkflowPanel extends TabPanel {
add(computationPanel, tabWorkFlowLcItemConf);
TabItemConfig tabComputationPanelItemConf = new TabItemConfig(
- "Computations Execution", false);
+ COMPUTATIONS_EXECUTION, false);
tabComputationPanelItemConf.setIcon(DataMinerManager.resources
.folderExplore());
computationExecutionPanel = new ComputationExecutionPanel();
add(computationExecutionPanel, tabComputationPanelItemConf);
TabItemConfig tabEnvironmentPanelItemConf = new TabItemConfig(
- "Service Info", false);
+ SERVICE_INFO, false);
tabEnvironmentPanelItemConf.setIcon(DataMinerManager.resources
.folderExplore());
environmentPanel = new ServiceInfoPanel();
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoData.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoData.java
deleted file mode 100644
index e1a48b2..0000000
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoData.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.gcube.portlets.user.dataminermanager.client.info;
-
-import java.io.Serializable;
-
-/**
- *
- * @author Giancarlo Panichi
- *
- *
- */
-public class ServiceInfoData implements Serializable {
-
- private static final long serialVersionUID = 4732143678328978038L;
- private String key;
- private String value;
-
- public ServiceInfoData() {
- super();
- }
-
- public ServiceInfoData(String key, String value) {
- super();
- this.key = key;
- this.value = value;
- }
-
- public String getKey() {
- return key;
- }
-
- public void setKey(String key) {
- this.key = key;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- @Override
- public String toString() {
- return "ServiceInfoData [key=" + key + ", value=" + value + "]";
- }
-
-}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoDataProperties.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoDataProperties.java
index cf9f071..bdcf5fb 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoDataProperties.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoDataProperties.java
@@ -1,5 +1,7 @@
package org.gcube.portlets.user.dataminermanager.client.info;
+import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfoData;
+
import com.google.gwt.editor.client.Editor.Path;
import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.shared.ModelKeyProvider;
@@ -17,6 +19,6 @@ public interface ServiceInfoDataProperties extends PropertyAccess key();
ValueProvider value();
-
+ ValueProvider category();
}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoPanel.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoPanel.java
index cfd3f8b..bebf056 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoPanel.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/info/ServiceInfoPanel.java
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo;
+import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfoData;
import org.gcube.portlets.user.dataminermanager.client.common.EventBusProvider;
import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoEvent;
import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoRequestEvent;
@@ -24,6 +25,7 @@ import com.sencha.gxt.widget.core.client.form.FieldSet;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
+import com.sencha.gxt.widget.core.client.grid.GroupingView;
/**
*
@@ -33,6 +35,8 @@ import com.sencha.gxt.widget.core.client.grid.Grid;
*/
public class ServiceInfoPanel extends FramedPanel {
+ private static final String RUNTIME_FEATURE = "Runtime features";
+ private static final String SERVICE_INFO_TITLE = "Service Profile";
private static final ServiceInfoDataProperties props = GWT.create(ServiceInfoDataProperties.class);
private VerticalLayoutContainer v;
private VerticalLayoutContainer environmentVBox;
@@ -55,7 +59,7 @@ public class ServiceInfoPanel extends FramedPanel {
setBodyStyle("backgroundColor:white;");
setHeaderVisible(false);
setResize(true);
- setHeadingText("Service Info");
+ setHeadingText(SERVICE_INFO_TITLE);
setBodyStyle("backgroundColor:white;");
}
@@ -90,17 +94,23 @@ public class ServiceInfoPanel extends FramedPanel {
private void createView() {
SimpleContainer sectionTitle = new SimpleContainer();
+ SimpleContainer sectionSubTitle = new SimpleContainer();
+
// title
HtmlLayoutContainer title = new HtmlLayoutContainer(
- "Service Info");
+ "" + SERVICE_INFO_TITLE + "");
sectionTitle.add(title, new MarginData());
sectionTitle.getElement().getStyle().setMarginRight(20, Unit.PX);
- // v.add(sectionTitle, new VerticalLayoutData(1, -1, new
- // Margins(0)));
v.add(sectionTitle, new VerticalLayoutData(-1, -1, new Margins(10)));
- FieldSet environmentFieldSet = environmentView();
- v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10)));
+ // subtitle
+ HtmlLayoutContainer subtitle = new HtmlLayoutContainer(
+ "This page reports information on the DataMiner "
+ + "service instance serving this working environment giving an up to date "
+ + "picture of its capacities and capabilities.
");
+ sectionSubTitle.add(subtitle, new MarginData());
+ sectionSubTitle.getElement().getStyle().setMarginRight(20, Unit.PX);
+ v.add(sectionSubTitle, new VerticalLayoutData(-1, -1, new Margins(10)));
}
@@ -109,7 +119,7 @@ public class ServiceInfoPanel extends FramedPanel {
environmentVBox = new VerticalLayoutContainer();
FieldSet configurationFieldSet = new FieldSet();
- configurationFieldSet.setHeadingText("Environment");
+ configurationFieldSet.setHeadingText(RUNTIME_FEATURE);
configurationFieldSet.setCollapsible(true);
configurationFieldSet.add(environmentVBox);
configurationFieldSet.getElement().getStyle().setMarginRight(20, Unit.PX);
@@ -120,20 +130,55 @@ public class ServiceInfoPanel extends FramedPanel {
}
}
+ private void showAddress(ServiceInfoData address) {
+ // address
+ SimpleContainer sectionServerAddress = new SimpleContainer();
+
+ HtmlLayoutContainer addressHtml = new HtmlLayoutContainer(
+ "The base url of the service instance is " + ""
+ + address.getValue() + ".
");
+ sectionServerAddress.add(addressHtml, new MarginData());
+ sectionServerAddress.getElement().getStyle().setMarginRight(20, Unit.PX);
+ v.add(sectionServerAddress, new VerticalLayoutData(-1, -1, new Margins(10)));
+
+ }
+
private void showServiceInfo(ServiceInfo serviceInfo) {
if (serviceInfo != null && serviceInfo.getServiceProperties() != null
&& !serviceInfo.getServiceProperties().isEmpty()) {
- ArrayList serviceInfoDataList = new ArrayList<>();
- for (String key : serviceInfo.getServiceProperties().keySet()) {
- ServiceInfoData serviceInfoData = new ServiceInfoData(key, serviceInfo.getServiceProperties().get(key));
- serviceInfoDataList.add(serviceInfoData);
+
+ ServiceInfoData address=null;
+ ArrayList properties=serviceInfo.getServiceProperties();
+ for(ServiceInfoData serviceInfoData:properties) {
+ if(serviceInfoData.getKey().compareTo("Address")==0){
+ address = serviceInfoData;
+ break;
+ }
}
+
+ if(address!=null){
+ properties.remove(address);
+ showAddress(address);
+ }
+
+ FieldSet environmentFieldSet = environmentView();
+ v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10)));
- Grid grid = createInfoGrid(serviceInfoDataList);
- environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
+ if (!properties.isEmpty()) {
+ Grid grid = createInfoGrid(properties);
+ environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
+ } else {
+ HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer(
+ "");
+ environmentVBox.add(emptyInfoContainer, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
+
+ }
} else {
+ FieldSet environmentFieldSet = environmentView();
+ v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10)));
+
HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer(
"");
@@ -144,31 +189,40 @@ public class ServiceInfoPanel extends FramedPanel {
}
- private Grid createInfoGrid(ArrayList serviceInfoDataList) {
+ private Grid createInfoGrid(ArrayList properties) {
ColumnConfig keyCol = new ColumnConfig(props.key(), 100,
"Key");
ColumnConfig valueCol = new ColumnConfig(props.value(), 100,
"Value");
+ ColumnConfig categoryCol = new ColumnConfig(props.category(),
+ 100,"Category");
List> columns = new ArrayList>();
columns.add(keyCol);
columns.add(valueCol);
+ columns.add(categoryCol);
ColumnModel cm = new ColumnModel(columns);
ListStore store = new ListStore(props.id());
- store.addAll(serviceInfoDataList);
+ store.addAll(properties);
+
+ final GroupingView groupingView = new GroupingView();
+ groupingView.setShowGroupedColumn(false);
+ groupingView.groupBy(categoryCol);
+ groupingView.setForceFit(true);
+ groupingView.setAutoExpandColumn(valueCol);
+ groupingView.setEmptyText("No info retrieved");
+
+ // grid.getView().setAutoFill(true);
+ // groupingView.setStripeRows(true);
+ // groupingView.setColumnLines(true);
+
+ Grid grid = new Grid(store, cm, groupingView);
- Grid grid = new Grid(store, cm);
-
grid.setAllowTextSelection(false);
- grid.getView().setAutoFill(true);
- grid.getView().setAutoExpandColumn(valueCol);
- grid.getView().setEmptyText("No info retrieved");
grid.setAllowTextSelection(true);
- grid.getView().setStripeRows(true);
- grid.getView().setColumnLines(true);
grid.setBorders(false);
grid.setColumnReordering(false);
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/FileViewer.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/FileViewer.java
index 7ea5e88..704f5b7 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/FileViewer.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/FileViewer.java
@@ -55,9 +55,14 @@ public class FileViewer extends SimpleContainer {
private void create() {
VerticalLayoutContainer lc = new VerticalLayoutContainer();
final String fileName = fileResource.getName();
+ String fileDescription = fileResource.getDescription();
final String fileUrl = fileResource.getUrl();
+
+ if(fileDescription==null||fileDescription.isEmpty()){
+ fileDescription="Unknow";
+ }
HtmlLayoutContainer fileNameHtml = new HtmlLayoutContainer(""
- + new SafeHtmlBuilder().appendEscaped(fileName).toSafeHtml().asString() + "
");
+ + new SafeHtmlBuilder().appendEscaped(fileDescription).toSafeHtml().asString() + "
");
lc.add(fileNameHtml, new VerticalLayoutData(-1, -1, new Margins(0)));
TextButton showFileButton = new TextButton("Show");
@@ -100,7 +105,7 @@ public class FileViewer extends SimpleContainer {
if (fileName != null && !fileName.isEmpty()) {
String fileNameLowerCase = fileName.toLowerCase();
if (fileNameLowerCase.endsWith(".html") || fileNameLowerCase.endsWith(".htm")
- || fileNameLowerCase.endsWith(".log") || fileNameLowerCase.endsWith(".json")
+ || fileNameLowerCase.endsWith(".pdf")|| fileNameLowerCase.endsWith(".log") || fileNameLowerCase.endsWith(".json")
|| fileNameLowerCase.endsWith(".txt")) {
buttonsContainer.add(showFileButton, buttonBoxLayoutData);
}
diff --git a/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/ImageViewer.java b/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/ImageViewer.java
index 3687b4a..e3d6c81 100644
--- a/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/ImageViewer.java
+++ b/src/main/java/org/gcube/portlets/user/dataminermanager/client/widgets/ImageViewer.java
@@ -25,19 +25,19 @@ public class ImageViewer extends SimpleContainer {
protected static final String SAVE_OK_TITLE = "Saving operation was successful";
protected static final String SAVE_FAIL_TITLE = "Error";
protected static final String SAVE_FAIL_MESSAGE = "Error in saving images.";
- private ImageResource imagesResource;
+ private ImageResource imageResource;
// private ComputationId computationId;
/**
*
* @param computationId
* computation id
- * @param imagesResource
+ * @param imageResource
* image resource
*/
- public ImageViewer(ComputationId computationId, ImageResource imagesResource) {
+ public ImageViewer(ComputationId computationId, ImageResource imageResource) {
super();
- this.imagesResource = imagesResource;
+ this.imageResource = imageResource;
// this.computationId = computationId;
create();
}
@@ -45,23 +45,27 @@ public class ImageViewer extends SimpleContainer {
private void create() {
VerticalLayoutContainer v = new VerticalLayoutContainer();
add(v);
- if (imagesResource == null || imagesResource.getLink() == null || imagesResource.getLink().isEmpty())
+ if (imageResource == null || imageResource.getLink() == null || imageResource.getLink().isEmpty())
v.add(new HtmlLayoutContainer("No image found."), new VerticalLayoutData(-1, -1, new Margins(0)));
else {
- v.add(new HtmlLayoutContainer(imagesResource.getName()), new VerticalLayoutData(-1, -1, new Margins(0)));
+ String imageName="Unknow";
+ if(imageResource.getName()!=null&&!imageResource.getName().isEmpty()){
+ imageName=imageResource.getName();
+ }
+ v.add(new HtmlLayoutContainer(imageName), new VerticalLayoutData(-1, -1, new Margins(0)));
TextButton saveImageBtn = new TextButton("Download Image");
saveImageBtn.setIcon(DataMinerManager.resources.download());
saveImageBtn.addSelectHandler(new SelectEvent.SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
- com.google.gwt.user.client.Window.open(imagesResource.getLink(), imagesResource.getName(), "");
+ com.google.gwt.user.client.Window.open(imageResource.getLink(), imageResource.getName(), "");
}
});
v.add(saveImageBtn, new VerticalLayoutData(-1, -1, new Margins(0)));
- final Image img = new Image(imagesResource.getLink());
+ final Image img = new Image(imageResource.getLink());
v.add(img, new VerticalLayoutData(1, -1, new Margins(0)));
}
diff --git a/src/test/java/org/gcube/portlets/user/dataminermanager/TestInformationSystemRequests.java b/src/test/java/org/gcube/portlets/user/dataminermanager/TestInformationSystemRequests.java
index 30edb51..583d67c 100644
--- a/src/test/java/org/gcube/portlets/user/dataminermanager/TestInformationSystemRequests.java
+++ b/src/test/java/org/gcube/portlets/user/dataminermanager/TestInformationSystemRequests.java
@@ -4,11 +4,11 @@ import static org.gcube.common.authorization.client.Constants.authorizationServi
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import org.gcube.common.authorization.library.provider.UserInfo;
import org.gcube.data.analysis.dataminermanagercl.server.is.InformationSystemUtils;
import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials;
+import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfoData;
import org.gcube.portlets.user.dataminermanager.shared.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,7 +64,7 @@ public class TestInformationSystemRequests extends TestCase {
}
- Map serviceProperties = InformationSystemUtils.retrieveServiceProperties(
+ ArrayList serviceProperties = InformationSystemUtils.retrieveServiceProperties(
Constants.DATAMINER_SERVICE_CATEGORY, Constants.DATA_MINER_SERVICE_NAME, serviceCredentials.getScope());
logger.debug("Service Properties retrieved:" + serviceProperties);
if (serviceProperties == null || serviceProperties.isEmpty()) {
@@ -72,8 +72,8 @@ public class TestInformationSystemRequests extends TestCase {
throw new Exception("No DataMiner service properties available!");
} else {
logger.info("DataMiner service properties found: ");
- for (String key : serviceProperties.keySet()) {
- logger.debug("Property: " + key + "=" + serviceProperties.get(key));
+ for (ServiceInfoData serviceInfoData : serviceProperties) {
+ logger.debug("Property: " + serviceInfoData);
}
}