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
This commit is contained in:
Giancarlo Panichi 2019-09-30 16:40:46 +00:00
parent ad17f51709
commit 091b0ef530
8 changed files with 111 additions and 92 deletions

View File

@ -92,7 +92,7 @@ public class ComputationValueFilePanel extends SimpleContainer {
if (fileName != null && !fileName.isEmpty()) { if (fileName != null && !fileName.isEmpty()) {
String fileNameLowerCase = fileName.toLowerCase(); String fileNameLowerCase = fileName.toLowerCase();
if (fileNameLowerCase.endsWith(".html") || fileNameLowerCase.endsWith(".htm") 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")) { || fileNameLowerCase.endsWith(".txt")) {
buttonsContainer.add(showFileButton, buttonBoxLayoutData); buttonsContainer.add(showFileButton, buttonBoxLayoutData);
} }

View File

@ -21,9 +21,11 @@ import com.sencha.gxt.widget.core.client.TabPanel;
* *
*/ */
public class WorkflowPanel extends TabPanel { public class WorkflowPanel extends TabPanel {
private static final String OPERATOR = "Operator";
public static final String DEFAULT_OPERATOR = "AQUAMAPS_SUITABLE"; private static final String COMPUTATIONS_EXECUTION = "Computations Execution";
private static final String SERVICE_INFO = "Service Profile";
private ComputationExecutionPanel computationExecutionPanel; private ComputationExecutionPanel computationExecutionPanel;
private ComputationPanel computationPanel; private ComputationPanel computationPanel;
private ServiceInfoPanel environmentPanel; private ServiceInfoPanel environmentPanel;
@ -45,7 +47,7 @@ public class WorkflowPanel extends TabPanel {
private void create() { private void create() {
TabItemConfig tabWorkFlowLcItemConf = new TabItemConfig("Operator", TabItemConfig tabWorkFlowLcItemConf = new TabItemConfig(OPERATOR,
false); false);
tabWorkFlowLcItemConf.setIcon(DataMinerManager.resources tabWorkFlowLcItemConf.setIcon(DataMinerManager.resources
.folderExplore()); .folderExplore());
@ -63,14 +65,14 @@ public class WorkflowPanel extends TabPanel {
add(computationPanel, tabWorkFlowLcItemConf); add(computationPanel, tabWorkFlowLcItemConf);
TabItemConfig tabComputationPanelItemConf = new TabItemConfig( TabItemConfig tabComputationPanelItemConf = new TabItemConfig(
"Computations Execution", false); COMPUTATIONS_EXECUTION, false);
tabComputationPanelItemConf.setIcon(DataMinerManager.resources tabComputationPanelItemConf.setIcon(DataMinerManager.resources
.folderExplore()); .folderExplore());
computationExecutionPanel = new ComputationExecutionPanel(); computationExecutionPanel = new ComputationExecutionPanel();
add(computationExecutionPanel, tabComputationPanelItemConf); add(computationExecutionPanel, tabComputationPanelItemConf);
TabItemConfig tabEnvironmentPanelItemConf = new TabItemConfig( TabItemConfig tabEnvironmentPanelItemConf = new TabItemConfig(
"Service Info", false); SERVICE_INFO, false);
tabEnvironmentPanelItemConf.setIcon(DataMinerManager.resources tabEnvironmentPanelItemConf.setIcon(DataMinerManager.resources
.folderExplore()); .folderExplore());
environmentPanel = new ServiceInfoPanel(); environmentPanel = new ServiceInfoPanel();

View File

@ -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 + "]";
}
}

View File

@ -1,5 +1,7 @@
package org.gcube.portlets.user.dataminermanager.client.info; 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.google.gwt.editor.client.Editor.Path;
import com.sencha.gxt.core.client.ValueProvider; import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.data.shared.ModelKeyProvider;
@ -17,6 +19,6 @@ public interface ServiceInfoDataProperties extends PropertyAccess<ServiceInfoDat
ValueProvider<ServiceInfoData, String> key(); ValueProvider<ServiceInfoData, String> key();
ValueProvider<ServiceInfoData, String> value(); ValueProvider<ServiceInfoData, String> value();
ValueProvider<ServiceInfoData, String> category();
} }

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.gcube.data.analysis.dataminermanagercl.shared.service.ServiceInfo; 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.common.EventBusProvider;
import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoEvent; import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoEvent;
import org.gcube.portlets.user.dataminermanager.client.events.ServiceInfoRequestEvent; 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.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel; 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.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 { 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 static final ServiceInfoDataProperties props = GWT.create(ServiceInfoDataProperties.class);
private VerticalLayoutContainer v; private VerticalLayoutContainer v;
private VerticalLayoutContainer environmentVBox; private VerticalLayoutContainer environmentVBox;
@ -55,7 +59,7 @@ public class ServiceInfoPanel extends FramedPanel {
setBodyStyle("backgroundColor:white;"); setBodyStyle("backgroundColor:white;");
setHeaderVisible(false); setHeaderVisible(false);
setResize(true); setResize(true);
setHeadingText("Service Info"); setHeadingText(SERVICE_INFO_TITLE);
setBodyStyle("backgroundColor:white;"); setBodyStyle("backgroundColor:white;");
} }
@ -90,17 +94,23 @@ public class ServiceInfoPanel extends FramedPanel {
private void createView() { private void createView() {
SimpleContainer sectionTitle = new SimpleContainer(); SimpleContainer sectionTitle = new SimpleContainer();
SimpleContainer sectionSubTitle = new SimpleContainer();
// title // title
HtmlLayoutContainer title = new HtmlLayoutContainer( HtmlLayoutContainer title = new HtmlLayoutContainer(
"<center style='font-size:16px;font-weight:bold;'>Service Info</center>"); "<center style='font-size:16px;font-weight:bold;'>" + SERVICE_INFO_TITLE + "</center>");
sectionTitle.add(title, new MarginData()); sectionTitle.add(title, new MarginData());
sectionTitle.getElement().getStyle().setMarginRight(20, Unit.PX); 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))); v.add(sectionTitle, new VerticalLayoutData(-1, -1, new Margins(10)));
FieldSet environmentFieldSet = environmentView(); // subtitle
v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10))); HtmlLayoutContainer subtitle = new HtmlLayoutContainer(
"<p style='font-size:12px;'>This page reports information on the DataMiner "
+ "service instance serving this working environment giving an up to date "
+ "picture of its capacities and capabilities.</p>");
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(); environmentVBox = new VerticalLayoutContainer();
FieldSet configurationFieldSet = new FieldSet(); FieldSet configurationFieldSet = new FieldSet();
configurationFieldSet.setHeadingText("Environment"); configurationFieldSet.setHeadingText(RUNTIME_FEATURE);
configurationFieldSet.setCollapsible(true); configurationFieldSet.setCollapsible(true);
configurationFieldSet.add(environmentVBox); configurationFieldSet.add(environmentVBox);
configurationFieldSet.getElement().getStyle().setMarginRight(20, Unit.PX); 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(
"<p style='font-size:12px;'>The base url of the service instance is " + "<a href='" + address.getValue() + "'>"
+ address.getValue() + "</a>.</p>");
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) { private void showServiceInfo(ServiceInfo serviceInfo) {
if (serviceInfo != null && serviceInfo.getServiceProperties() != null if (serviceInfo != null && serviceInfo.getServiceProperties() != null
&& !serviceInfo.getServiceProperties().isEmpty()) { && !serviceInfo.getServiceProperties().isEmpty()) {
ArrayList<ServiceInfoData> serviceInfoDataList = new ArrayList<>();
for (String key : serviceInfo.getServiceProperties().keySet()) { ServiceInfoData address=null;
ServiceInfoData serviceInfoData = new ServiceInfoData(key, serviceInfo.getServiceProperties().get(key)); ArrayList<ServiceInfoData> properties=serviceInfo.getServiceProperties();
serviceInfoDataList.add(serviceInfoData); 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<ServiceInfoData> grid = createInfoGrid(serviceInfoDataList); if (!properties.isEmpty()) {
environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4))); Grid<ServiceInfoData> grid = createInfoGrid(properties);
environmentVBox.add(grid, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
} else {
HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer(
"<div class='service-property'><p>No Info Available.</p></div>");
environmentVBox.add(emptyInfoContainer, new VerticalLayoutData(1, -1, new Margins(0, 4, 0, 4)));
}
} else { } else {
FieldSet environmentFieldSet = environmentView();
v.add(environmentFieldSet, new VerticalLayoutData(-1, -1, new Margins(10)));
HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer( HtmlLayoutContainer emptyInfoContainer = new HtmlLayoutContainer(
"<div class='service-property'><p>No Info Available.</p></div>"); "<div class='service-property'><p>No Info Available.</p></div>");
@ -144,31 +189,40 @@ public class ServiceInfoPanel extends FramedPanel {
} }
private Grid<ServiceInfoData> createInfoGrid(ArrayList<ServiceInfoData> serviceInfoDataList) { private Grid<ServiceInfoData> createInfoGrid(ArrayList<ServiceInfoData> properties) {
ColumnConfig<ServiceInfoData, String> keyCol = new ColumnConfig<ServiceInfoData, String>(props.key(), 100, ColumnConfig<ServiceInfoData, String> keyCol = new ColumnConfig<ServiceInfoData, String>(props.key(), 100,
"Key"); "Key");
ColumnConfig<ServiceInfoData, String> valueCol = new ColumnConfig<ServiceInfoData, String>(props.value(), 100, ColumnConfig<ServiceInfoData, String> valueCol = new ColumnConfig<ServiceInfoData, String>(props.value(), 100,
"Value"); "Value");
ColumnConfig<ServiceInfoData, String> categoryCol = new ColumnConfig<ServiceInfoData, String>(props.category(),
100,"Category");
List<ColumnConfig<ServiceInfoData, ?>> columns = new ArrayList<ColumnConfig<ServiceInfoData, ?>>(); List<ColumnConfig<ServiceInfoData, ?>> columns = new ArrayList<ColumnConfig<ServiceInfoData, ?>>();
columns.add(keyCol); columns.add(keyCol);
columns.add(valueCol); columns.add(valueCol);
columns.add(categoryCol);
ColumnModel<ServiceInfoData> cm = new ColumnModel<ServiceInfoData>(columns); ColumnModel<ServiceInfoData> cm = new ColumnModel<ServiceInfoData>(columns);
ListStore<ServiceInfoData> store = new ListStore<ServiceInfoData>(props.id()); ListStore<ServiceInfoData> store = new ListStore<ServiceInfoData>(props.id());
store.addAll(serviceInfoDataList); store.addAll(properties);
final GroupingView<ServiceInfoData> groupingView = new GroupingView<ServiceInfoData>();
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<ServiceInfoData> grid = new Grid<ServiceInfoData>(store, cm, groupingView);
Grid<ServiceInfoData> grid = new Grid<ServiceInfoData>(store, cm);
grid.setAllowTextSelection(false); grid.setAllowTextSelection(false);
grid.getView().setAutoFill(true);
grid.getView().setAutoExpandColumn(valueCol);
grid.getView().setEmptyText("No info retrieved");
grid.setAllowTextSelection(true); grid.setAllowTextSelection(true);
grid.getView().setStripeRows(true);
grid.getView().setColumnLines(true);
grid.setBorders(false); grid.setBorders(false);
grid.setColumnReordering(false); grid.setColumnReordering(false);

View File

@ -55,9 +55,14 @@ public class FileViewer extends SimpleContainer {
private void create() { private void create() {
VerticalLayoutContainer lc = new VerticalLayoutContainer(); VerticalLayoutContainer lc = new VerticalLayoutContainer();
final String fileName = fileResource.getName(); final String fileName = fileResource.getName();
String fileDescription = fileResource.getDescription();
final String fileUrl = fileResource.getUrl(); final String fileUrl = fileResource.getUrl();
if(fileDescription==null||fileDescription.isEmpty()){
fileDescription="Unknow";
}
HtmlLayoutContainer fileNameHtml = new HtmlLayoutContainer("<div class='computation-output-fileName'><p>" HtmlLayoutContainer fileNameHtml = new HtmlLayoutContainer("<div class='computation-output-fileName'><p>"
+ new SafeHtmlBuilder().appendEscaped(fileName).toSafeHtml().asString() + "</p></div>"); + new SafeHtmlBuilder().appendEscaped(fileDescription).toSafeHtml().asString() + "</p></div>");
lc.add(fileNameHtml, new VerticalLayoutData(-1, -1, new Margins(0))); lc.add(fileNameHtml, new VerticalLayoutData(-1, -1, new Margins(0)));
TextButton showFileButton = new TextButton("Show"); TextButton showFileButton = new TextButton("Show");
@ -100,7 +105,7 @@ public class FileViewer extends SimpleContainer {
if (fileName != null && !fileName.isEmpty()) { if (fileName != null && !fileName.isEmpty()) {
String fileNameLowerCase = fileName.toLowerCase(); String fileNameLowerCase = fileName.toLowerCase();
if (fileNameLowerCase.endsWith(".html") || fileNameLowerCase.endsWith(".htm") 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")) { || fileNameLowerCase.endsWith(".txt")) {
buttonsContainer.add(showFileButton, buttonBoxLayoutData); buttonsContainer.add(showFileButton, buttonBoxLayoutData);
} }

View File

@ -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_OK_TITLE = "Saving operation was successful";
protected static final String SAVE_FAIL_TITLE = "Error"; protected static final String SAVE_FAIL_TITLE = "Error";
protected static final String SAVE_FAIL_MESSAGE = "Error in saving images."; protected static final String SAVE_FAIL_MESSAGE = "Error in saving images.";
private ImageResource imagesResource; private ImageResource imageResource;
// private ComputationId computationId; // private ComputationId computationId;
/** /**
* *
* @param computationId * @param computationId
* computation id * computation id
* @param imagesResource * @param imageResource
* image resource * image resource
*/ */
public ImageViewer(ComputationId computationId, ImageResource imagesResource) { public ImageViewer(ComputationId computationId, ImageResource imageResource) {
super(); super();
this.imagesResource = imagesResource; this.imageResource = imageResource;
// this.computationId = computationId; // this.computationId = computationId;
create(); create();
} }
@ -45,23 +45,27 @@ public class ImageViewer extends SimpleContainer {
private void create() { private void create() {
VerticalLayoutContainer v = new VerticalLayoutContainer(); VerticalLayoutContainer v = new VerticalLayoutContainer();
add(v); add(v);
if (imagesResource == null || imagesResource.getLink() == null || imagesResource.getLink().isEmpty()) if (imageResource == null || imageResource.getLink() == null || imageResource.getLink().isEmpty())
v.add(new HtmlLayoutContainer("<i>No image found.</i>"), new VerticalLayoutData(-1, -1, new Margins(0))); v.add(new HtmlLayoutContainer("<i>No image found.</i>"), new VerticalLayoutData(-1, -1, new Margins(0)));
else { 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"); TextButton saveImageBtn = new TextButton("Download Image");
saveImageBtn.setIcon(DataMinerManager.resources.download()); saveImageBtn.setIcon(DataMinerManager.resources.download());
saveImageBtn.addSelectHandler(new SelectEvent.SelectHandler() { saveImageBtn.addSelectHandler(new SelectEvent.SelectHandler() {
@Override @Override
public void onSelect(SelectEvent event) { 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))); 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))); v.add(img, new VerticalLayoutData(1, -1, new Margins(0)));
} }

View File

@ -4,11 +4,11 @@ import static org.gcube.common.authorization.client.Constants.authorizationServi
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import org.gcube.common.authorization.library.provider.UserInfo; import org.gcube.common.authorization.library.provider.UserInfo;
import org.gcube.data.analysis.dataminermanagercl.server.is.InformationSystemUtils; import org.gcube.data.analysis.dataminermanagercl.server.is.InformationSystemUtils;
import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials; 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.gcube.portlets.user.dataminermanager.shared.Constants;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -64,7 +64,7 @@ public class TestInformationSystemRequests extends TestCase {
} }
Map<String, String> serviceProperties = InformationSystemUtils.retrieveServiceProperties( ArrayList<ServiceInfoData> serviceProperties = InformationSystemUtils.retrieveServiceProperties(
Constants.DATAMINER_SERVICE_CATEGORY, Constants.DATA_MINER_SERVICE_NAME, serviceCredentials.getScope()); Constants.DATAMINER_SERVICE_CATEGORY, Constants.DATA_MINER_SERVICE_NAME, serviceCredentials.getScope());
logger.debug("Service Properties retrieved:" + serviceProperties); logger.debug("Service Properties retrieved:" + serviceProperties);
if (serviceProperties == null || serviceProperties.isEmpty()) { if (serviceProperties == null || serviceProperties.isEmpty()) {
@ -72,8 +72,8 @@ public class TestInformationSystemRequests extends TestCase {
throw new Exception("No DataMiner service properties available!"); throw new Exception("No DataMiner service properties available!");
} else { } else {
logger.info("DataMiner service properties found: "); logger.info("DataMiner service properties found: ");
for (String key : serviceProperties.keySet()) { for (ServiceInfoData serviceInfoData : serviceProperties) {
logger.debug("Property: " + key + "=" + serviceProperties.get(key)); logger.debug("Property: " + serviceInfoData);
} }
} }