From 25e36b8f366dab01f838d8175e59e9148628eb68 Mon Sep 17 00:00:00 2001 From: BobHanson Date: Mon, 1 Jun 2020 12:23:58 -0500 Subject: [PATCH] JAL-3626 reconciled Platform - replaces escapeString with escapeBackslashes - adds pathEquals --- src/jalview/gui/AppJmol.java | 4 +- src/jalview/gui/ChimeraViewFrame.java | 2 +- src/jalview/project/Jalview2XML.java | 3 +- .../structure/StructureSelectionManager.java | 4 +- src/jalview/util/Platform.java | 45 ++++++++++++++------ 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 5687219..1698bf8 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -330,7 +330,7 @@ public class AppJmol extends StructureViewerBase for (String s : files) { fileList.append(SPACE).append(QUOTE) - .append(Platform.escapeString(s)).append(QUOTE); + .append(Platform.escapeBackslashes(s)).append(QUOTE); } String filesString = fileList.toString(); @@ -524,7 +524,7 @@ public class AppJmol extends StructureViewerBase addingStructures = true; // already files loaded. for (int c = 0; c < filesInViewer.length; c++) { - if (filesInViewer[c].equals(file)) + if (Platform.pathEquals(filesInViewer[c], file)) { file = null; break; diff --git a/src/jalview/gui/ChimeraViewFrame.java b/src/jalview/gui/ChimeraViewFrame.java index fff1eed..317eff5 100644 --- a/src/jalview/gui/ChimeraViewFrame.java +++ b/src/jalview/gui/ChimeraViewFrame.java @@ -481,7 +481,7 @@ public class ChimeraViewFrame extends StructureViewerBase { filePDB.add(thePdbEntry); filePDBpos.add(Integer.valueOf(pi)); - files.append(" \"" + Platform.escapeString(file) + "\""); + files.append(" \"" + Platform.escapeBackslashes(file) + "\""); } } } catch (OutOfMemoryError oomerror) diff --git a/src/jalview/project/Jalview2XML.java b/src/jalview/project/Jalview2XML.java index b0315e8..c28002f 100644 --- a/src/jalview/project/Jalview2XML.java +++ b/src/jalview/project/Jalview2XML.java @@ -4694,7 +4694,8 @@ public class Jalview2XML String reformatedOldFilename = oldfilenam.replaceAll("/", "\\\\"); filedat = oldFiles.get(new File(reformatedOldFilename)); } - newFileLoc.append(Platform.escapeString(filedat.getFilePath())); + newFileLoc + .append(Platform.escapeBackslashes(filedat.getFilePath())); pdbfilenames.add(filedat.getFilePath()); pdbids.add(filedat.getPdbId()); seqmaps.add(filedat.getSeqList().toArray(new SequenceI[0])); diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 82d66f2..66bd085 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -43,6 +43,7 @@ import jalview.io.DataSourceType; import jalview.io.StructureFile; import jalview.util.MappingUtils; import jalview.util.MessageManager; +import jalview.util.Platform; import jalview.ws.sifts.SiftsClient; import jalview.ws.sifts.SiftsException; import jalview.ws.sifts.SiftsSettings; @@ -1202,7 +1203,8 @@ public class StructureSelectionManager implements ApplicationSingletonI StringBuilder sb = new StringBuilder(64); for (StructureMapping sm : mappings) { - if (sm.pdbfile.equals(pdbfile) && seqs.contains(sm.sequence)) + if (Platform.pathEquals(sm.pdbfile, pdbfile) + && seqs.contains(sm.sequence)) { sb.append(sm.mappingDetails); sb.append(NEWLINE); diff --git a/src/jalview/util/Platform.java b/src/jalview/util/Platform.java index c511ce3..728110e 100644 --- a/src/jalview/util/Platform.java +++ b/src/jalview/util/Platform.java @@ -158,23 +158,17 @@ public class Platform } /** - * escape a string according to the local platform's escape character + * An earlier version of escapeString()? Looks fine to me -- BH * - * @param file - * @return escaped file + * Answers the input with every backslash replaced with a double backslash (an + * 'escaped' single backslash) + * + * @param s + * @return */ - public static String escapeString(String file) + public static String escapeBackslashes(String s) { - StringBuffer f = new StringBuffer(); - int p = 0, lastp = 0; - while ((p = file.indexOf('\\', lastp)) > -1) - { - f.append(file.subSequence(lastp, p)); - f.append("\\\\"); - lastp = p + 1; - } - f.append(file.substring(lastp)); - return f.toString(); + return s == null ? null : s.replace("\\", "\\\\"); } /** @@ -714,6 +708,29 @@ public class Platform } + /** + * A (case sensitive) file path comparator that ignores the difference between + * / and \ + * + * @param path1 + * @param path2 + * @return + */ + public static boolean pathEquals(String path1, String path2) + { + if (path1 == null) + { + return path2 == null; + } + if (path2 == null) + { + return false; + } + String p1 = path1.replace('\\', '/'); + String p2 = path2.replace('\\', '/'); + return p1.equals(p2); + } + public static URL getDocumentBase() { return (isJS ? jsutil.getDocumentBase() : null); -- 1.7.10.2