}
/**
- * escape a string according to the local platform's escape character
+ * Answers the input with every backslash replaced with a double backslash (an
+ * 'escaped' single backslash)
*
- * @param file
- * @return escaped file
+ * @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("\\", "\\\\");
}
/**
*/
protected static boolean isControlDown(MouseEvent e, boolean aMac)
{
- if (!aMac)
- {
- return e.isControlDown();
- }
- // answer false for right mouse button
- // shortcut key will be META for a Mac
- return !e.isPopupTrigger()
- && (Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
- & e.getModifiers()) != 0;
- // could we use e.isMetaDown() here?
- }
+ if (aMac)
+ {
+ /*
+ * answer false for right mouse button
+ */
+ if (e.isPopupTrigger())
+ {
+ return false;
+ }
+ return (jalview.util.ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx() // .getMenuShortcutKeyMaskEx()
+ & e.getModifiersEx()) != 0; // getModifiers()) != 0;
+ }
+ return e.isControlDown();
+ }
// BH: I don't know about that previous method. Here is what SwingJS uses.
// Notice the distinction in mouse events. (BUTTON3_MASK == META)
}
}
- public static void cacheFileData(String path, byte[] data)
+ public static void cacheFileData(String path, Object data)
{
- if (!isJS())
+ if (!isJS() || data == null)
{
return;
}
*/
}
+ public static void cacheFileData(File file)
+ {
+ byte[] data;
+ if (!isJS() || (data = Platform.getFileBytes(file)) == null)
+ {
+ return;
+ }
+ cacheFileData(file.toString(), data);
+ }
+
public static byte[] getFileBytes(File f)
{
return /** @j2sNative f && f._bytes || */
public static byte[] getFileAsBytes(String fileStr)
{
+ byte[] bytes = null;
// BH 2018 hack for no support for access-origin
- return /** @j2sNative swingjs.JSUtil.getFileAsBytes$O(fileStr) || */
- null;
+ /**
+ * @j2sNative bytes = swingjs.JSUtil.getFileAsBytes$O(fileStr)
+ */
+ cacheFileData(fileStr, bytes);
+ return bytes;
}
- public static String getFileAsString(String data)
+ @SuppressWarnings("unused")
+ public static String getFileAsString(String url)
{
- return /** @j2sNative swingjs.JSUtil.getFileAsString$S(data) || */
- null;
+ String ret = null;
+ /**
+ * @j2sNative
+ *
+ * ret = swingjs.JSUtil.getFileAsString$S(url);
+ *
+ *
+ */
+ cacheFileData(url, ret);
+ return ret;
}
public static boolean setFileBytes(File f, String urlstring)
public static void streamToFile(InputStream is, File outFile)
throws IOException
{
- if (isJS() && /**
- * @j2sNative outFile.setBytes$O && outFile.setBytes$O(is) &&
- */
- true)
- {
- return;
- }
FileOutputStream fio = new FileOutputStream(outFile);
try
{
+ if (isJS()
+ && /**
+ * @j2sNative outFile.setBytes$O && outFile.setBytes$O(is) &&
+ */
+ true)
+ {
+ return;
+ }
byte[] bb = new byte[32 * 1024];
int l;
while ((l = is.read(bb)) > 0)
public static void addJ2SDirectDatabaseCall(String domain)
{
- System.out.println(
- "Platform adding no-access-control-allow-origin domain "
+ if (isJS())
+ {
+ System.out.println(
+ "Platform adding known access-control-allow-origin * for domain "
+ domain);
+ /**
+ * @j2sNative
+ *
+ * J2S.addDirectDatabaseCall(domain);
+ */
+ }
- /**
- * @j2sNative
- *
- * J2S.addDirectDatabaseCall(domain);
- */
}
public static void getURLCommandArguments()
* element to this value.
*
* @j2sNative var a =
- * decodeURI(document.location.href.replace("&","?").split("?j2s")[0].split("?")[1].split("#")[0]);
- * a && (J2S.thisApplet.__Info.args = a.split(" "));
+ * decodeURI((document.location.href.replace("&","?").split("?j2s")[0]
+ * + "?").split("?")[1].split("#")[0]); a &&
+ * (J2S.thisApplet.__Info.args = a.split(" "));
*/
}
+ /**
+ * 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);
+ }
}