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 3c266ac943506b082d0f03ef7b90f300cc7f0618..960c128cd6fc034706aa919118281f95a38faee5 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 @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server; +import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Enumeration; @@ -27,9 +28,12 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer; import ch.systemsx.cisd.openbis.dss.generic.server.graph.ITabularDataGraph; import ch.systemsx.cisd.openbis.dss.generic.server.graph.TabularDataGraphCollectionConfiguration; +import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ITabularData; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.SessionWorkspaceUtil; /** * @author Chandrasekhar Ramakrishnan @@ -77,7 +81,7 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow public RequestParams(HttpServletRequest request) { sessionId = getRequiredParameter(request, Utils.SESSION_ID_PARAM); - datasetCode = getRequiredParameter(request, DATASET_CODE_PARAM); + datasetCode = getOptionalParameter(request, DATASET_CODE_PARAM); filePathOrNull = getOptionalParameter(request, FILE_PATH_PARAM); graphName = getOptionalParameter(request, GRAPH_TYPE_CODE, "dynamic"); width = getIntParam(request, WIDTH_PARAM, 0); @@ -179,6 +183,30 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow String datasetCode = params.datasetCode; String filePathOrNull = params.filePathOrNull; + if (datasetCode == null) + { + ExposablePropertyPlaceholderConfigurer config = + (ExposablePropertyPlaceholderConfigurer) ServiceProvider + .getApplicationContext() + .getBean( + ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME); + + String workspace = + config.getResolvedProps().getProperty( + SessionWorkspaceUtil.SESSION_WORKSPACE_ROOT_DIR_KEY); + + if (workspace == null) + { + workspace = SessionWorkspaceUtil.SESSION_WORKSPACE_ROOT_DIR_DEFAULT; + } + + File sessionWorkspace = + new SessionWorkspaceProvider(new File(workspace), sessionId) + .getSessionWorkspace(); + + filePathOrNull = sessionWorkspace.getAbsolutePath() + "/" + filePathOrNull; + } + // Get the session and user from the request HttpSession session = tryGetOrCreateSession(request, sessionId); if (session == null) @@ -189,7 +217,18 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow // Check that the user has view access to the data // NOTE: This throws an exception -- it may be nicer to return an image for a // non-accessible dataset... - ensureDatasetAccessible(datasetCode, session, sessionId); + if (datasetCode != null) + { + ensureDatasetAccessible(datasetCode, session, sessionId); + } else + { + if (filePathOrNull == null || new File(filePathOrNull).exists() == false) + { + throw new UserFailureException("File '" + filePathOrNull + + "' is not accessible."); + } + + } // Get the tabular data ITabularData fileLines = getDatasetLines(request, datasetCode, filePathOrNull); 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 170155147ce49e64b7c805d9a88602dce8537277..eb49d319be7c09310de7d04ad3a64de16cb75ab2 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 @@ -67,8 +67,6 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ DynamicTabularDataGraphCollectionConfiguration config = new DynamicTabularDataGraphCollectionConfiguration(); - config.setColumnDelimiter(commonConfig.getColumnDelimiter()); - Properties props = new Properties(); if (name != null) @@ -85,6 +83,7 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ config.setImageHeight(graphConfig.getImageHeight()); config.setImageWidth(graphConfig.getImageWidth()); + config.setColumnDelimiter(commonConfig.getColumnDelimiter()); } else { name = DYNAMIC_GRAPH_NAME; @@ -195,6 +194,7 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ protected synchronized void doSpecificInitialization(Enumeration<String> parameterNames, ServletConfig servletConfig) { + if (commonConfig == null) { String propertiesFilePath = servletConfig.getInitParameter(PROPERTIES_FILE_KEY); 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 4f056fd39dd45ec08233ddecf09ed5a9ef19e6c4..43949fa53127057c5516bef76d9156f3119caf45 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,6 +16,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server; +import java.io.File; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -49,16 +50,32 @@ public class FileTabularDataGraphServlet extends AbstractTabularDataGraphServlet 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(); + File file; + IHierarchicalContent content = null; + try + { + if (dataSetCode == null) + { + file = new File(pathOrNull); + } else + { + IHierarchicalContentProvider contentProvider = + applicationContext.getHierarchicalContentProvider(requestParams + .getSessionId()); + content = contentProvider.asContent(dataSetCode); + IHierarchicalContentNode node = content.getNode(pathOrNull); + file = node.getFile(); + } - return data; + ITabularData data = + CsvFileReaderHelper.getDatasetFileLines(file, getConfiguration(request)); + return data; + } finally + { + if (content != null) + { + content.close(); + } + } } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java index 32c7d3b290d2b29578c76b5dfb5ad2125f8d74fc..c9b3e314959706b2fc5dc662608f2851f73f654e 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java @@ -23,14 +23,14 @@ import ch.systemsx.cisd.common.filesystem.QueueingPathRemoverService; /** * Utility functions for session workspace. - * + * * @author Franz-Josef Elmer */ public class SessionWorkspaceUtil { - private static final String SESSION_WORKSPACE_ROOT_DIR_KEY = "session-workspace-root-dir"; + public static final String SESSION_WORKSPACE_ROOT_DIR_KEY = "session-workspace-root-dir"; - private static final String SESSION_WORKSPACE_ROOT_DIR_DEFAULT = "data/sessionWorkspace"; + public static final String SESSION_WORKSPACE_ROOT_DIR_DEFAULT = "data/sessionWorkspace"; public static File getSessionWorkspace(Properties properties) {