From 540366f9f40331dd2fbb2307bab41220641aa226 Mon Sep 17 00:00:00 2001 From: anttil <anttil> Date: Tue, 26 Feb 2013 19:30:16 +0000 Subject: [PATCH] BIS-224 / SP-333 : Simplified, Flexible Graph Generation SVN: 28460 --- .../AbstractTabularDataGraphServlet.java | 5 +- .../DynamicFileTabularDataGraphServlet.java | 169 ++++++++++++++++-- ...bularDataGraphCollectionConfiguration.java | 6 +- .../graph/TabularDataGraphConfiguration.java | 17 +- 4 files changed, 175 insertions(+), 22 deletions(-) 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 0cd37ed6e18..3c266ac9435 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 @@ -44,7 +44,7 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow protected TabularDataGraphCollectionConfiguration configuration; - private static final String PROPERTIES_FILE_KEY = "properties-file"; + protected static final String PROPERTIES_FILE_KEY = "properties-file"; public static final String FILE_PATH_PARAM = "file"; @@ -227,7 +227,8 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow return configuration; } - protected abstract ITabularData getDatasetLines(HttpServletRequest request, String dataSetCode, String filePathOrNull) + 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 index 8662ed82c7b..170155147ce 100644 --- 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 @@ -24,6 +24,7 @@ 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; +import ch.systemsx.cisd.openbis.dss.generic.server.graph.TabularDataGraphConfiguration; /** * @author cramakri @@ -33,37 +34,177 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ private static final String DYNAMIC_GRAPH_NAME = "dynamic"; + private static final String PARAM_TITLE = "title"; + + private static final String PARAM_X_AXIS_COLUMN = "col-x"; + + private static final String PARAM_Y_AXIS_COLUMN = "col-y"; + + private static final String PARAM_X_AXIS_LABEL = "label-x"; + + private static final String PARAM_Y_AXIS_LABEL = "label-y"; + + private static final String PARAM_IMAGE_HEIGHT = "image-height"; + + private static final String PARAM_IMAGE_WIDTH = "image-width"; + + private static final String PARAM_GRAPH_TYPE = "graph-type"; + + private static final String PARAM_GRAPH_NAME = "graph-name"; + + private static final String PARAM_DELIMITER = "delimiter"; + private static final long serialVersionUID = 1L; + private TabularDataGraphCollectionConfiguration commonConfig; + @Override protected TabularDataGraphCollectionConfiguration getConfiguration(HttpServletRequest request) { - // TODO Implement this properly + + String name = request.getParameter(PARAM_GRAPH_NAME); + DynamicTabularDataGraphCollectionConfiguration config = new DynamicTabularDataGraphCollectionConfiguration(); - config.setColumnDelimiter('\t'); + + config.setColumnDelimiter(commonConfig.getColumnDelimiter()); + 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"); + + if (name != null) + { + TabularDataGraphConfiguration graphConfig = commonConfig.getGraphConfiguration(name); + props.setProperty(TabularDataGraphCollectionConfiguration.TITLE_KEY, graphConfig + .getTitle()); + props.setProperty(TabularDataGraphCollectionConfiguration.X_AXIS_KEY, graphConfig + .getTitle()); + props.setProperty(TabularDataGraphCollectionConfiguration.Y_AXIS_KEY, graphConfig + .getTitle()); + props.setProperty(TabularDataGraphCollectionConfiguration.GRAPHS_TYPES_KEY, graphConfig + .getGraphType().toString()); + + config.setImageHeight(graphConfig.getImageHeight()); + config.setImageWidth(graphConfig.getImageWidth()); + } else + { + name = DYNAMIC_GRAPH_NAME; + } + + String delimiter = request.getParameter(PARAM_DELIMITER); + if (delimiter != null && delimiter.toCharArray().length > 0) + { + config.setColumnDelimiter(delimiter.toCharArray()[0]); + } + + props.setProperty(TabularDataGraphCollectionConfiguration.GRAPHS_KEY, name); + + propertyOverride(TabularDataGraphCollectionConfiguration.TITLE_KEY, PARAM_TITLE, + props, name, request); + + String xColumn = + propertyOverride(TabularDataGraphCollectionConfiguration.X_AXIS_KEY, + PARAM_X_AXIS_COLUMN, + props, name, request); + + if (xColumn != null && xColumn.indexOf("<") == -1) + { + propertyOverride(TabularDataGraphCollectionConfiguration.X_AXIS_KEY, + props, name, "<" + xColumn + ">" + request.getParameter(PARAM_X_AXIS_LABEL)); + } + + String yColumn = + propertyOverride(TabularDataGraphCollectionConfiguration.Y_AXIS_KEY, + PARAM_Y_AXIS_COLUMN, + props, name, request); + + if (yColumn != null && yColumn.indexOf("<") == -1) + { + propertyOverride(TabularDataGraphCollectionConfiguration.Y_AXIS_KEY, + props, name, "<" + yColumn + ">" + request.getParameter(PARAM_Y_AXIS_LABEL)); + } + + propertyOverride(TabularDataGraphCollectionConfiguration.GRAPHS_TYPES_KEY, + PARAM_GRAPH_TYPE, + props, name, request); + + int width = + parsePositiveInt(propertyOverride(PARAM_IMAGE_WIDTH, PARAM_IMAGE_WIDTH, props, + name, request)); + int height = + parsePositiveInt(propertyOverride(PARAM_IMAGE_HEIGHT, PARAM_IMAGE_HEIGHT, props, + name, request)); + + if (width > 0) + { + config.setImageWidth(width); + } + if (height > 0) + { + config.setImageHeight(height); + } + + propertyOverride(TabularDataGraphCollectionConfiguration.COLUMN_KEY, + props, name, "col3"); + propertyOverride(TabularDataGraphCollectionConfiguration.NUMBER_OF_BINS_KEY, + props, name, "8"); + config.setProperties(props); return TabularDataGraphCollectionConfiguration.getConfiguration(config); } + private String propertyOverride(String propertyName, String parameterName, Properties props, + String name, HttpServletRequest request) + { + String value = request.getParameter(parameterName); + return propertyOverride(propertyName, props, name, value); + } + + private String propertyOverride(String propertyName, Properties props, + String name, String value) + { + if (value != null && value.trim().isEmpty() == false) + { + props.setProperty(name + "." + propertyName, value); + return value; + } + return props.getProperty(name + "." + propertyName); + } + + private int parsePositiveInt(String string) + { + if (string == null || string.isEmpty()) + { + return -1; + } + try + { + int value = Integer.parseInt(string); + if (value < 1) + { + return -1; + } + return value; + } catch (NumberFormatException e) + { + return -1; + } + } + @Override protected synchronized void doSpecificInitialization(Enumeration<String> parameterNames, ServletConfig servletConfig) { - // Do not initialize the configuration variable -- we never use it - configuration = null; + if (commonConfig == null) + { + String propertiesFilePath = servletConfig.getInitParameter(PROPERTIES_FILE_KEY); + if (propertiesFilePath != null) + { + commonConfig = + TabularDataGraphCollectionConfiguration + .getConfiguration(propertiesFilePath); + } + } } } 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 ca1328f2b8b..28acaea40dd 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 @@ -28,8 +28,8 @@ import java.util.Properties; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.properties.PropertyParametersUtil; -import ch.systemsx.cisd.common.properties.PropertyUtils; import ch.systemsx.cisd.common.properties.PropertyParametersUtil.SectionProperties; +import ch.systemsx.cisd.common.properties.PropertyUtils; import ch.systemsx.cisd.openbis.dss.generic.server.graph.TabularDataGraphConfiguration.GraphType; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.CodeAndLabelUtil; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.CsvFileReaderHelper.ICsvFileReaderConfiguration; @@ -75,9 +75,9 @@ public class TabularDataGraphCollectionConfiguration implements ICsvFileReaderCo public static final String Y_AXIS_KEY = "y-axis"; - private static final String COLUMN_KEY = "column"; + public static final String COLUMN_KEY = "column"; - private static final String NUMBER_OF_BINS_KEY = "number-of-bins"; + public static final String NUMBER_OF_BINS_KEY = "number-of-bins"; private final char columnDelimiter; diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphConfiguration.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphConfiguration.java index 01d39cf48d1..4d5db818c51 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphConfiguration.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/graph/TabularDataGraphConfiguration.java @@ -53,7 +53,8 @@ public class TabularDataGraphConfiguration * @param imageWidth The desired width of the resulting image * @param imageHeight The desired height of the resulting image */ - protected TabularDataGraphConfiguration(GraphType graphType, String title, CodeAndLabel xAxisColumn, + protected TabularDataGraphConfiguration(GraphType graphType, String title, + CodeAndLabel xAxisColumn, CodeAndLabel yAxisColumn, int imageWidth, int imageHeight) { this.graphType = graphType; @@ -96,7 +97,7 @@ public class TabularDataGraphConfiguration /** * The width of the resulting image. */ - protected int getImageWidth() + public int getImageWidth() { return imageWidth; } @@ -104,8 +105,18 @@ public class TabularDataGraphConfiguration /** * The height of the resulting image. */ - protected int getImageHeight() + public int getImageHeight() { return imageHeight; } + + public String getXLabel() + { + return xAxisColumn.getLabel(); + } + + public String getYLabel() + { + return yAxisColumn.getLabel(); + } } -- GitLab