From bd60a43d3da4ff549c14f57c1d9af884d3d4520d Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Thu, 21 Feb 2013 21:10:12 +0000 Subject: [PATCH] BIS-224 SP-333 : Scaffolding for implementation of SP-333 SVN: 28409 --- .../AbstractTabularDataGraphServlet.java | 34 ++++- .../DynamicFileTabularDataGraphServlet.java | 69 +++++++++ .../server/FileTabularDataGraphServlet.java | 25 +++- ...bularDataGraphCollectionConfiguration.java | 140 +++++++++++++++++- 4 files changed, 254 insertions(+), 14 deletions(-) create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java index b08582f26b0..0cd37ed6e18 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java @@ -79,7 +79,7 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow sessionId = getRequiredParameter(request, Utils.SESSION_ID_PARAM); datasetCode = getRequiredParameter(request, DATASET_CODE_PARAM); filePathOrNull = getOptionalParameter(request, FILE_PATH_PARAM); - graphName = getRequiredParameter(request, GRAPH_TYPE_CODE); + graphName = getOptionalParameter(request, GRAPH_TYPE_CODE, "dynamic"); width = getIntParam(request, WIDTH_PARAM, 0); height = getIntParam(request, HEIGHT_PARAM, 0); } @@ -108,6 +108,17 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow return value; } + private static String getOptionalParameter(final HttpServletRequest request, + String paramName, String defaultValue) + { + String value = request.getParameter(paramName); + if (null == value) + { + return defaultValue; + } + return value; + } + private static String getRequiredParameter(final HttpServletRequest request, String paramName) { @@ -119,6 +130,11 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow } return value; } + + public String getSessionId() + { + return sessionId; + } } /** @@ -176,11 +192,12 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow ensureDatasetAccessible(datasetCode, session, sessionId); // Get the tabular data - ITabularData fileLines = getDatasetLines(datasetCode, filePathOrNull); + ITabularData fileLines = getDatasetLines(request, datasetCode, filePathOrNull); // Generate an image into the stream ITabularDataGraph generator = - configuration.getGraph(params.graphName, fileLines, response.getOutputStream()); + getConfiguration(request).getGraph(params.graphName, fileLines, + response.getOutputStream()); response.setContentType(Utils.CONTENT_TYPE_PNG); String headerContentDisposition = "inline; filename=plot_" + (new Date().getTime()); @@ -201,7 +218,16 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow } } - protected abstract ITabularData getDatasetLines(String dataSetCode, String filePathOrNull) + /** + * Get the configuration for this graph. Defaults to the configuration ivar. Subclasses may + * override. + */ + protected TabularDataGraphCollectionConfiguration getConfiguration(HttpServletRequest request) + { + return configuration; + } + + protected abstract ITabularData getDatasetLines(HttpServletRequest request, String dataSetCode, String filePathOrNull) throws IOException; } \ No newline at end of file diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java new file mode 100644 index 00000000000..8662ed82c7b --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java @@ -0,0 +1,69 @@ +/* + * Copyright 2013 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server; + +import java.util.Enumeration; +import java.util.Properties; + +import javax.servlet.ServletConfig; +import javax.servlet.http.HttpServletRequest; + +import ch.systemsx.cisd.openbis.dss.generic.server.graph.TabularDataGraphCollectionConfiguration; +import ch.systemsx.cisd.openbis.dss.generic.server.graph.TabularDataGraphCollectionConfiguration.DynamicTabularDataGraphCollectionConfiguration; + +/** + * @author cramakri + */ +public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServlet +{ + + private static final String DYNAMIC_GRAPH_NAME = "dynamic"; + + private static final long serialVersionUID = 1L; + + @Override + protected TabularDataGraphCollectionConfiguration getConfiguration(HttpServletRequest request) + { + // TODO Implement this properly + DynamicTabularDataGraphCollectionConfiguration config = + new DynamicTabularDataGraphCollectionConfiguration(); + config.setColumnDelimiter('\t'); + Properties props = new Properties(); + props.setProperty(TabularDataGraphCollectionConfiguration.GRAPHS_KEY, + DynamicTabularDataGraphCollectionConfiguration.DYNAMIC_GRAPH_NAME); + props.setProperty(DYNAMIC_GRAPH_NAME + "." + + TabularDataGraphCollectionConfiguration.TITLE_KEY, "Title"); + props.setProperty(DYNAMIC_GRAPH_NAME + "." + + TabularDataGraphCollectionConfiguration.GRAPHS_TYPES_KEY, "SCATTERPLOT"); + props.setProperty(DYNAMIC_GRAPH_NAME + "." + + TabularDataGraphCollectionConfiguration.X_AXIS_KEY, "col1"); + props.setProperty(DYNAMIC_GRAPH_NAME + "." + + TabularDataGraphCollectionConfiguration.Y_AXIS_KEY, "col2"); + config.setProperties(props); + + return TabularDataGraphCollectionConfiguration.getConfiguration(config); + } + + @Override + protected synchronized void doSpecificInitialization(Enumeration<String> parameterNames, + ServletConfig servletConfig) + { + // Do not initialize the configuration variable -- we never use it + configuration = null; + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java index 9e64544eb8f..4f056fd39dd 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java @@ -16,10 +16,14 @@ package ch.systemsx.cisd.openbis.dss.generic.server; -import java.io.File; import java.io.IOException; +import javax.servlet.http.HttpServletRequest; + import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent; +import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode; +import ch.systemsx.cisd.openbis.dss.generic.shared.IHierarchicalContentProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.CsvFileReaderHelper; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ITabularData; @@ -34,14 +38,27 @@ public class FileTabularDataGraphServlet extends AbstractTabularDataGraphServlet * Return the tabular data from a file as a DatasetFileLines. */ @Override - protected ITabularData getDatasetLines(String dataSetCode, String pathOrNull) - throws IOException + protected ITabularData getDatasetLines(HttpServletRequest request, String dataSetCode, + String pathOrNull) throws IOException { if (pathOrNull == null) { throw new UserFailureException("No value for the parameter " + FILE_PATH_PARAM + " found in the URL"); } - return CsvFileReaderHelper.getDatasetFileLines(new File(pathOrNull), configuration); + + RequestParams requestParams = new RequestParams(request); + + IHierarchicalContentProvider contentProvider = + applicationContext.getHierarchicalContentProvider(requestParams.getSessionId()); + IHierarchicalContent content = contentProvider.asContent(dataSetCode); + IHierarchicalContentNode node = content.getNode(pathOrNull); + + ITabularData data = + CsvFileReaderHelper.getDatasetFileLines(node.getFile(), getConfiguration(request)); + + content.close(); + + return data; } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphCollectionConfiguration.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphCollectionConfiguration.java index f4d697ee098..ca1328f2b8b 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphCollectionConfiguration.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphCollectionConfiguration.java @@ -46,7 +46,7 @@ public class TabularDataGraphCollectionConfiguration implements ICsvFileReaderCo private static final String LABEL_POSTFIX = ".label"; - private static final String SEPARATOR_PROPERTY_KEY = "separator"; + public static final String SEPARATOR_PROPERTY_KEY = "separator"; private static final String IGNORE_COMMENTS_PROPERTY_KEY = "ignore-comments"; @@ -63,17 +63,17 @@ public class TabularDataGraphCollectionConfiguration implements ICsvFileReaderCo private static final String THUMBNAIL_HEIGHT_KEY = "column-height"; // the graphs to display -- each one is shown in a column. - private static final String GRAPHS_KEY = "graphs"; + public static final String GRAPHS_KEY = "graphs"; // the type of graph. See @{link GraphType} for valid types. - private static final String GRAPHS_TYPES_KEY = "graph-type"; + public static final String GRAPHS_TYPES_KEY = "graph-type"; // keys for the different kinds of graphs - private static final String TITLE_KEY = "title"; + public static final String TITLE_KEY = "title"; - private static final String X_AXIS_KEY = "x-axis"; + public static final String X_AXIS_KEY = "x-axis"; - private static final String Y_AXIS_KEY = "y-axis"; + public static final String Y_AXIS_KEY = "y-axis"; private static final String COLUMN_KEY = "column"; @@ -98,6 +98,101 @@ public class TabularDataGraphCollectionConfiguration implements ICsvFileReaderCo private final HashMap<String, TabularDataGraphConfiguration> graphTypeMap; + /** + * Class used to dynamically initialize a TabularDataGraphCollectionConfiguration; + * + * @author cramakri + */ + public static class DynamicTabularDataGraphCollectionConfiguration + { + public static String DYNAMIC_GRAPH_NAME = "dynamic"; + + private char columnDelimiter = ';'; + + private boolean ignoreComments = true; + + private int imageWidth = 800; + + private int imageHeight = 600; + + private int thumbnailWidth = 300; + + private int thumbnailHeight = 200; + + private Properties properties = new Properties(); + + public char getColumnDelimiter() + { + return columnDelimiter; + } + + public void setColumnDelimiter(char columnDelimiter) + { + this.columnDelimiter = columnDelimiter; + } + + public boolean isIgnoreComments() + { + return ignoreComments; + } + + public void setIgnoreComments(boolean ignoreComments) + { + this.ignoreComments = ignoreComments; + } + + public int getImageWidth() + { + return imageWidth; + } + + public void setImageWidth(int imageWidth) + { + this.imageWidth = imageWidth; + } + + public int getImageHeight() + { + return imageHeight; + } + + public void setImageHeight(int imageHeight) + { + this.imageHeight = imageHeight; + } + + public int getThumbnailWidth() + { + return thumbnailWidth; + } + + public void setThumbnailWidth(int thumbnailWidth) + { + this.thumbnailWidth = thumbnailWidth; + } + + public int getThumbnailHeight() + { + return thumbnailHeight; + } + + public void setThumbnailHeight(int thumbnailHeight) + { + this.thumbnailHeight = thumbnailHeight; + } + + public Properties getProperties() + { + return properties; + } + + public void setProperties(Properties properties) + { + this.properties = properties; + } + + } + /** * Create a configuration from the properties file located at path. * @@ -122,6 +217,18 @@ public class TabularDataGraphCollectionConfiguration implements ICsvFileReaderCo return new TabularDataGraphCollectionConfiguration(configurationProps); } + /** + * Create a configuration from the properties file located at path. + * + * @param path Path to the properties file. + */ + public static TabularDataGraphCollectionConfiguration getConfiguration( + DynamicTabularDataGraphCollectionConfiguration config) + throws EnvironmentFailureException + { + return new TabularDataGraphCollectionConfiguration(config); + } + /** * Initialize the configuration based on the properties object. */ @@ -148,6 +255,27 @@ public class TabularDataGraphCollectionConfiguration implements ICsvFileReaderCo } + /** + * Initialize the configuration based on the configuration object. + */ + private TabularDataGraphCollectionConfiguration( + DynamicTabularDataGraphCollectionConfiguration config) + { + comment = '#'; + + this.columnDelimiter = config.getColumnDelimiter(); + this.ignoreComments = config.isIgnoreComments(); + imageWidth = config.getImageWidth(); + imageHeight = config.getImageHeight(); + thumbnailWidth = config.getThumbnailWidth(); + thumbnailHeight = config.getThumbnailHeight(); + + graphNames = new ArrayList<String>(); + graphNames.add(DynamicTabularDataGraphCollectionConfiguration.DYNAMIC_GRAPH_NAME); + graphTypeMap = new HashMap<String, TabularDataGraphConfiguration>(); + initialzeGraphTypeMap(config.getProperties()); + } + private void initializeGraphTypeCodes(Properties properties) { String graphTypeCodesString = properties.getProperty(GRAPHS_KEY, ""); -- GitLab