From 770e8cb7e1b1c510cfdd63691f32adb23e557abe Mon Sep 17 00:00:00 2001 From: anttil <anttil> Date: Tue, 28 Mar 2017 13:59:14 +0000 Subject: [PATCH] SSDM-4839: Show information message instead of error in dataset detail view when there's no file metadata stored in pathinfo db. SVN: 37992 --- .../server/DatasetDownloadServlet.java | 35 ++++++++++++++- .../generic/server/HTMLMessageRenderer.java | 44 +++++++++++++++++++ .../dss/generic/server/IMessageRenderer.java | 22 ++++++++++ .../dss/generic/server/IRendererFactory.java | 2 + .../server/PlainTextRendererFactory.java | 21 +++++++++ .../server/SimpleHTMLRendererFactory.java | 7 +++ .../client/application/util/DataSetUtils.java | 6 +++ .../bo/datasetlister/ContentCopyRecord.java | 2 + .../bo/datasetlister/DatasetLister.java | 3 ++ .../datasetlister/IDatasetListingQuery.java | 2 +- 10 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/HTMLMessageRenderer.java create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IMessageRenderer.java diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java index 0b84f41b893..8e299d9b5c8 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java @@ -72,6 +72,8 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet static final String DISABLE_LINKS = "disableLinks"; + static final String IS_LINK_DATASET = "is_link_data"; + private static String DOWNLOAD_URL; static void setDownloadUrl(String downloadUrl) @@ -121,10 +123,13 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet private final boolean forceReferrerDomainOnEmptyDownloadURL; + private final boolean isLinkData; + public RequestParams(String dataSetCode, String pathInfo, String sessionIdOrNull, String urlPrefixWithDataset, String displayMode, boolean autoResolve, String mainDataSetPathOrNull, String mainDataSetPatternOrNull, - boolean forceAutoResolve, boolean disableLinks, String referrerDomain, boolean forceReferrerDomainOnEmptyDownloadURL) + boolean forceAutoResolve, boolean disableLinks, String referrerDomain, boolean forceReferrerDomainOnEmptyDownloadURL, + boolean isLinkData) { this.dataSetCode = dataSetCode; this.pathInfo = pathInfo; @@ -138,6 +143,7 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet this.disableLinks = disableLinks; this.referrerDomain = referrerDomain; this.forceReferrerDomainOnEmptyDownloadURL = forceReferrerDomainOnEmptyDownloadURL; + this.isLinkData = isLinkData; } public boolean isAutoResolve() @@ -200,6 +206,11 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet return forceReferrerDomainOnEmptyDownloadURL; } + public boolean isLinkData() + { + return isLinkData; + } + } @Override @@ -207,9 +218,11 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet throws ServletException, IOException { IRendererFactory rendererFactory = null; + boolean isLinkData = false; try { RequestParams requestParams = parseRequestURL(request, DATA_STORE_SERVER_WEB_APPLICATION_NAME); + isLinkData = requestParams.isLinkData(); rendererFactory = createRendererFactory(requestParams.getDisplayMode()); HttpSession session = tryGetOrCreateSession(request, requestParams.tryGetSessionId()); @@ -232,12 +245,16 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet if (!isPathInfoEnabled) { printEmptyPage(rendererFactory, request, response); + } else if (isLinkData) + { + printMessage("No content information is stored with this linked dataset.", rendererFactory, response); } else { printError(rendererFactory, request, response, e); } } + } private void printResponse(final HttpServletResponse response, @@ -381,9 +398,11 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet } // + boolean isLinkData = request.getParameter(IS_LINK_DATASET).equals("true"); + return new RequestParams(dataSetCode, pathInfo, sessionIDOrNull, urlPrefixWithDataset, displayMode, autoResolve, mainDataSetPathOrNull, mainDataSetPatternOrNull, - forceAutoResolve, disableLinks, referrerDomain, forceReferrerDomainOnEmptyDownloadURL); + forceAutoResolve, disableLinks, referrerDomain, forceReferrerDomainOnEmptyDownloadURL, isLinkData); } private static String getDisplayMode(HttpServletRequest request) @@ -405,6 +424,18 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet writer.close(); } + private void printMessage(String message, IRendererFactory rendererFactory, + final HttpServletResponse response) throws IOException + { + response.setContentType(rendererFactory.getContentType()); + PrintWriter writer = response.getWriter(); + IMessageRenderer renderer = rendererFactory.createMessageRenderer(); + renderer.setWriter(writer); + renderer.printMessage(message); + writer.flush(); + writer.close(); + } + private void printError(IRendererFactory rendererFactory, final HttpServletRequest request, final HttpServletResponse response, Exception exception) throws IOException { diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/HTMLMessageRenderer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/HTMLMessageRenderer.java new file mode 100644 index 00000000000..49869814810 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/HTMLMessageRenderer.java @@ -0,0 +1,44 @@ +/* + * Copyright 2010 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.io.PrintWriter; + +/** + * {@link IErrorRenderer} displaying error as HTML page. + * + * @author Izabela Adamczyk + */ +public class HTMLMessageRenderer implements IMessageRenderer +{ + private PrintWriter writer; + + @Override + public void setWriter(PrintWriter writer) + { + this.writer = writer; + } + + @Override + public void printMessage(String message) + { + writer.println("<html><body>"); + writer.println(message); + writer.println("</body></html>"); + } + +} \ No newline at end of file diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IMessageRenderer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IMessageRenderer.java new file mode 100644 index 00000000000..2144f9249ec --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IMessageRenderer.java @@ -0,0 +1,22 @@ +/* + * Copyright 2008 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; + +public interface IMessageRenderer extends IWriterInjector +{ + public void printMessage(String message); +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IRendererFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IRendererFactory.java index fcac3d3b4c2..db7cff56c5a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IRendererFactory.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/IRendererFactory.java @@ -28,4 +28,6 @@ public interface IRendererFactory public IDirectoryRenderer createDirectoryRenderer(RenderingContext context); public IErrorRenderer createErrorRenderer(); + + public IMessageRenderer createMessageRenderer(); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java index eb742c2f2c4..b436b33ad94 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/PlainTextRendererFactory.java @@ -100,4 +100,25 @@ public class PlainTextRendererFactory implements IRendererFactory } } + + @Override + public IMessageRenderer createMessageRenderer() + { + return new IMessageRenderer() + { + private PrintWriter writer; + + @Override + public void printMessage(String message) + { + writer.println(message); + } + + @Override + public void setWriter(PrintWriter writer) + { + this.writer = writer; + } + }; + } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLRendererFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLRendererFactory.java index 63d6ee7d116..531b38fd05d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLRendererFactory.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/SimpleHTMLRendererFactory.java @@ -41,4 +41,11 @@ public class SimpleHTMLRendererFactory implements IRendererFactory return new HTMLErrorRenderer(); } + @Override + public IMessageRenderer createMessageRenderer() + { + return new HTMLMessageRenderer(); + + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java index 18af6508026..df7d7a86dbf 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java @@ -21,6 +21,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericVie import ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind; /** * @author Franz-Josef Elmer @@ -37,6 +38,8 @@ public class DataSetUtils private static final String DISABLE_LINKS = "disableLinks"; + private static final String IS_LINK_DATASET = "is_link_data"; + public static String createDataViewUrl(AbstractExternalData dataSet, GenericViewModel model, String modeOrNull, boolean autoResolve, boolean disableLinks) { @@ -64,6 +67,9 @@ public class DataSetUtils .getMainDataSetPath()); } } + + methodWithParameters.addParameter(IS_LINK_DATASET, DataSetKind.LINK.equals(dataSet.getDataSetKind())); + String url = methodWithParameters.toString(); return url; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/ContentCopyRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/ContentCopyRecord.java index 563ce2b237d..5efef24a85a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/ContentCopyRecord.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/ContentCopyRecord.java @@ -20,4 +20,6 @@ public class ContentCopyRecord extends CodeRecord public String path; public String hash; + + public Long edms_id; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java index 90fec95f37b..cbc9ec145c2 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetLister.java @@ -1191,11 +1191,14 @@ public class DatasetLister extends AbstractLister implements IDatasetLister if (copyRecord.external_code != null) { copies.add(new UrlContentCopy(copyRecord.edms_code, copyRecord.edms_label, copyRecord.edms_address, copyRecord.external_code)); + linkDataSet.setExternalCode(copyRecord.external_code); } else { copies.add(new FileSystemContentCopy(copyRecord.edms_code, copyRecord.edms_label, copyRecord.edms_address, copyRecord.edms_address, copyRecord.hash, copyRecord.path)); } + linkDataSet.setExternalDataManagementSystem(externalDataManagementSystems + .get(copyRecord.edms_id)); } linkDataSet.setCopies(copies); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java index 528846f0a1f..e22e87f4773 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java @@ -355,7 +355,7 @@ public interface IDatasetListingQuery extends BaseQuery, IPropertyListingQuery LongSetMapper.class }, fetchSize = FETCH_SIZE) public List<MetaProjectWithEntityId> getMetaprojects(LongSet entityIds, Long userId); - @Select(sql = "SELECT edms.code AS edms_code, edms.label AS edms_label, edms.address AS edms_address, " + @Select(sql = "SELECT edms.id AS edms_id, edms.code AS edms_code, edms.label AS edms_label, edms.address AS edms_address, " + " cc.external_code AS external_code, cc.path as path, cc.git_commit_hash AS hash " + " FROM content_copies cc, external_data_management_systems edms " + " WHERE cc.edms_id = edms.id AND cc.data_id = ?{1}") -- GitLab