From df71d2a2ed64f36fc8fe396d6f4950f7b3519926 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 1 May 2019 17:04:16 +0100 Subject: [PATCH] JAL-3244 ignore file path separator when comparing pdb file paths --- src/jalview/gui/AppJmol.java | 2 +- .../structure/StructureSelectionManager.java | 4 +++- src/jalview/util/Platform.java | 24 +++++++++++++++++++- test/jalview/util/PlatformTest.java | 11 +++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 6c934c8..319ba06 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -515,7 +515,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/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 9513220..ff88bb7 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -41,6 +41,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; @@ -1170,7 +1171,8 @@ public class StructureSelectionManager 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 22032b5..2c2c081 100644 --- a/src/jalview/util/Platform.java +++ b/src/jalview/util/Platform.java @@ -20,7 +20,6 @@ */ package jalview.util; -import java.awt.Toolkit; import java.awt.event.MouseEvent; /** @@ -145,4 +144,27 @@ public class Platform } return e.isControlDown(); } + + /** + * 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); + } } diff --git a/test/jalview/util/PlatformTest.java b/test/jalview/util/PlatformTest.java index 617bf42..28d0924 100644 --- a/test/jalview/util/PlatformTest.java +++ b/test/jalview/util/PlatformTest.java @@ -120,4 +120,15 @@ public class PlatformTest assertTrue(Platform.isControlDown(new MouseEvent(b, 0, 0L, mods, 0, 0, 0, 0, clickCount, isPopupTrigger, buttonNo), mac)); } + + @Test(groups = "Functional") + public void testPathEquals() + { + assertTrue(Platform.pathEquals(null, null)); + assertFalse(Platform.pathEquals(null, "apath")); + assertFalse(Platform.pathEquals("apath", null)); + assertFalse(Platform.pathEquals("apath", "APATH")); + assertTrue(Platform.pathEquals("apath", "apath")); + assertTrue(Platform.pathEquals("apath/a/b", "apath\\a\\b")); + } } -- 1.7.10.2