JAL-3244 ignore file path separator when comparing pdb file paths
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 1 May 2019 16:04:16 +0000 (17:04 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 1 May 2019 16:04:16 +0000 (17:04 +0100)
src/jalview/gui/AppJmol.java
src/jalview/structure/StructureSelectionManager.java
src/jalview/util/Platform.java
test/jalview/util/PlatformTest.java

index 6c934c8..319ba06 100644 (file)
@@ -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;
index 9513220..ff88bb7 100644 (file)
@@ -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);
index 22032b5..2c2c081 100644 (file)
@@ -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);
+  }
 }
index 617bf42..28d0924 100644 (file)
@@ -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"));
+  }
 }