Refactoring of Jalview, JalviewAppLoader, JalviewApp, various
[jalview.git] / src / jalview / util / Platform.java
index fea40c3..f4ac16f 100644 (file)
@@ -20,8 +20,6 @@
  */
 package jalview.util;
 
-import jalview.javascript.json.JSON;
-
 import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.Toolkit;
@@ -35,6 +33,11 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Date;
+import java.util.Map;
 import java.util.Properties;
 import java.util.logging.ConsoleHandler;
 import java.util.logging.Level;
@@ -47,6 +50,7 @@ import org.json.simple.parser.ParseException;
 
 import com.stevesoft.pat.Regex;
 
+import jalview.javascript.json.JSON;
 import swingjs.api.JSUtilI;
 
 /**
@@ -71,6 +75,8 @@ public class Platform
           if (isJS) {
       try
       {
+        // this is ok - it's a highly embedded method in Java; the deprecation is
+        // really a recommended best practice.
         jsutil = ((JSUtilI) Class.forName("swingjs.JSUtil").newInstance());
       } catch (InstantiationException | IllegalAccessException
               | ClassNotFoundException e)
@@ -692,6 +698,11 @@ public class Platform
 
   }
 
+  public static Regex newRegex(String regex)
+  {
+    return newRegex(regex, null);
+  }
+
   public static Regex newRegex(String searchString, String replaceString)
   {
     ensureRegex();
@@ -818,6 +829,86 @@ public class Platform
 
   }
 
-  
+  public static URL getDocumentBase()
+  {
+    return (isJS ? jsutil.getDocumentBase() : null);
+  }
+
+  public static URL getCodeBase()
+  {
+    return (isJS ? jsutil.getCodeBase() : null);
+  }
+
+  public static String getUserPath(String subpath)
+  {
+    char sep = File.separatorChar;
+    return System.getProperty("user.home") + sep + subpath.replace('/', sep);
+  }
+
+  /**
+   * This method enables checking if a cached file has exceeded a certain
+   * threshold(in days)
+   * 
+   * @param file
+   *          the cached file
+   * @param noOfDays
+   *          the threshold in days
+   * @return
+   */
+  public static boolean isFileOlderThanThreshold(File file, int noOfDays)
+  {
+    if (isJS()) {
+      // not meaningful in SwingJS -- this is a session-specific temp file. It doesn't have a timestamp. 
+      return false;
+    }
+    Path filePath = file.toPath();
+    BasicFileAttributes attr;
+    int diffInDays = 0;
+    try
+    {
+      attr = Files.readAttributes(filePath, BasicFileAttributes.class);
+      diffInDays = (int) ((new Date().getTime()
+              - attr.lastModifiedTime().toMillis())
+              / (1000 * 60 * 60 * 24));
+      // System.out.println("Diff in days : " + diffInDays);
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+    return noOfDays <= diffInDays;
+  }
+
+  /**
+   * Get the leading integer part of a string that begins with an integer.
+   * 
+   * @param input
+   *          - the string input to process
+   * @param failValue
+   *          - value returned if unsuccessful
+   * @return
+   */
+  public static int getLeadingIntegerValue(String input, int failValue)
+  {
+    if (input == null)
+    {
+      return failValue;
+    }
+    if (isJS) {
+      int val = /** @j2sNative 1 ? parseInt(input) : */ 0; 
+      return (val == val + 0 ? val : failValue);
+    }
+    // JavaScript does not support Regex ? lookahead
+    String[] parts = input.split("(?=\\D)(?<=\\d)");
+    if (parts != null && parts.length > 0 && parts[0].matches("[0-9]+"))
+    {
+      return Integer.valueOf(parts[0]);
+    }
+    return failValue;
+  }
+
+  public static Map<String, Object> getAppletInfoAsMap()
+  {
+    return (isJS ? jsutil.getAppletInfoAsMap() : null);
+  }
 
 }