From b375e6ef6fa708d38d277e3ef442fbaffe3345db Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Mon, 21 Oct 2024 10:57:34 -0700 Subject: [PATCH] Issue 50861: Pass around properly encoded WebDav URLs --- .../labkey/jbrowse/model/JBrowseSession.java | 7 +++-- .../org/labkey/jbrowse/model/JsonFile.java | 28 +++++++++++++------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/jbrowse/src/org/labkey/jbrowse/model/JBrowseSession.java b/jbrowse/src/org/labkey/jbrowse/model/JBrowseSession.java index 4a3fedd00..5fb45c17e 100644 --- a/jbrowse/src/org/labkey/jbrowse/model/JBrowseSession.java +++ b/jbrowse/src/org/labkey/jbrowse/model/JBrowseSession.java @@ -29,6 +29,7 @@ import org.labkey.jbrowse.JBrowseSchema; import java.io.File; +import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -361,12 +362,12 @@ public static String getAssemblyName(ReferenceGenome rg) public static JSONObject getIndexedFastaAdapter(ReferenceGenome rg) { ExpData d = ExperimentService.get().getExpData(rg.getFastaExpDataId()); - String url = d.getWebDavURL(FileContentService.PathType.full); + URI url = d.getWebDavURL(FileContentService.PathType.full); JSONObject ret = new JSONObject(); ret.put("type", "IndexedFastaAdapter"); ret.put("fastaLocation", new JSONObject(){{ - put("uri", url); + put("uri", url.toString()); }}); ret.put("faiLocation", new JSONObject(){{ put("uri", url + ".fai"); @@ -378,7 +379,7 @@ public static JSONObject getIndexedFastaAdapter(ReferenceGenome rg) public static JSONObject getBgZippedIndexedFastaAdapter(ReferenceGenome rg) { ExpData d = ExperimentService.get().getExpData(rg.getFastaExpDataId()); - String url = d.getWebDavURL(FileContentService.PathType.full); + URI url = d.getWebDavURL(FileContentService.PathType.full); JSONObject ret = new JSONObject(); ret.put("type", "BgzipFastaAdapter"); diff --git a/jbrowse/src/org/labkey/jbrowse/model/JsonFile.java b/jbrowse/src/org/labkey/jbrowse/model/JsonFile.java index aa63b1e50..8a6ef1ca0 100644 --- a/jbrowse/src/org/labkey/jbrowse/model/JsonFile.java +++ b/jbrowse/src/org/labkey/jbrowse/model/JsonFile.java @@ -50,6 +50,7 @@ import org.labkey.api.util.JobRunner; import org.labkey.api.util.PageFlowUtil; import org.labkey.api.util.Path; +import org.labkey.api.util.UnexpectedException; import org.labkey.api.view.UnauthorizedException; import org.labkey.jbrowse.JBrowseLuceneSearch; import org.labkey.jbrowse.JBrowseManager; @@ -59,6 +60,8 @@ import java.io.File; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.file.Files; import java.sql.SQLException; import java.util.Arrays; @@ -512,7 +515,7 @@ private JSONObject getVcfTrack(Logger log, ExpData targetFile, ReferenceGenome r put(JBrowseSession.getAssemblyName(rg)); }}); - String url = targetFile.getWebDavURL(FileContentService.PathType.full); + URI url = targetFile.getWebDavURL(FileContentService.PathType.full); if (url == null) { log.info("Unable to create WebDav URL for JBrowse resource with path: " + targetFile.getFile()); @@ -522,7 +525,7 @@ private JSONObject getVcfTrack(Logger log, ExpData targetFile, ReferenceGenome r ret.put("adapter", new JSONObject(){{ put("type", "ExtendedVariantAdapter"); put("vcfGzLocation", new JSONObject(){{ - put("uri", url); + put("uri", url.toString()); }}); put("index", new JSONObject(){{ @@ -596,7 +599,7 @@ private JSONObject getBamOrCramTrack(Logger log, ExpData targetFile, ReferenceGe put(JBrowseSession.getAssemblyName(rg)); }}); - String url = targetFile.getWebDavURL(FileContentService.PathType.full); + URI url = targetFile.getWebDavURL(FileContentService.PathType.full); if (url == null) { log.info("Unable to create WebDav URL for JBrowse resource with path: " + targetFile.getFile()); @@ -612,7 +615,7 @@ private JSONObject getBamOrCramTrack(Logger log, ExpData targetFile, ReferenceGe put("type", type); put("bamLocation", new JSONObject() {{ - put("uri", url); + put("uri", url.toString()); }}); put("index", new JSONObject() @@ -667,7 +670,7 @@ private JSONObject getBigWigTrack(Logger log, ExpData targetFile, ReferenceGenom put(getCategory()); }}); - String url = targetFile.getWebDavURL(FileContentService.PathType.full); + URI url = targetFile.getWebDavURL(FileContentService.PathType.full); if (url == null) { log.info("Unable to create WebDav URL for JBrowse resource with path: " + targetFile.getFile()); @@ -677,7 +680,7 @@ private JSONObject getBigWigTrack(Logger log, ExpData targetFile, ReferenceGenom ret.put("adapter", new JSONObject(){{ put("type", "BigWigAdapter"); put("bigWigLocation", new JSONObject(){{ - put("uri", url); + put("uri", url.toString()); put("locationType", "UriLocation"); }}); }}); @@ -747,7 +750,7 @@ private JSONObject getTabixTrack(User u, Logger log, ExpData targetFile, Referen // if not gzipped, we need to process it: File gzipped = prepareResource(u, log, true, false); - final String url; + final URI url; if (!getExpData().getFile().equals(gzipped)) { url = getWebDavURL(gzipped); @@ -1192,7 +1195,7 @@ public File getExpectedLocationOfIndexFile(String extension, boolean throwIfNotF return ret; } - private String getWebDavURL(File input) + private URI getWebDavURL(File input) { java.nio.file.Path path = input.toPath(); if (getContainerObj() == null) @@ -1221,7 +1224,14 @@ private String getWebDavURL(File input) relPath = Path.parse(FilenameUtils.separatorsToUnix(relPath)).toString(); } - return AppProps.getInstance().getBaseServerUrl() + root.getWebdavURL() + relPath; + try + { + return new URI(AppProps.getInstance().getBaseServerUrl() + root.getWebdavURL() + relPath); + } + catch (URISyntaxException e) + { + throw UnexpectedException.wrap(e); + } } return null;