From 380b48863edc503824ef53482d16058aa3d9a75c Mon Sep 17 00:00:00 2001 From: hansonr Date: Wed, 7 Nov 2018 07:40:57 -0600 Subject: [PATCH] JAL-3026-JAL-3063 session test files JS loads java50.jvx, but not java50b.jvx. --- src/jalview/project/Jalview2XML.java | 113 +++++++++++++++------------------- temp/java50.jvx | Bin 0 -> 9130 bytes temp/java50b.jvx | Bin 0 -> 9131 bytes 3 files changed, 51 insertions(+), 62 deletions(-) create mode 100644 temp/java50.jvx create mode 100644 temp/java50b.jvx diff --git a/src/jalview/project/Jalview2XML.java b/src/jalview/project/Jalview2XML.java index 194cbf2..47a07a0 100644 --- a/src/jalview/project/Jalview2XML.java +++ b/src/jalview/project/Jalview2XML.java @@ -1617,6 +1617,7 @@ public class Jalview2XML // using save and then load try { + fileName = fileName.replace('\\', '/'); System.out.println("Writing jar entry " + fileName); JarEntry entry = new JarEntry(fileName); jout.putNextEntry(entry); @@ -1797,6 +1798,7 @@ public class Jalview2XML { if (jout != null) { + jarEntryName = jarEntryName.replace('\\','/'); System.out.println("Writing jar entry " + jarEntryName); jout.putNextEntry(new JarEntry(jarEntryName)); DataOutputStream dout = new DataOutputStream(jout); @@ -2523,68 +2525,52 @@ public class Jalview2XML return af; } - @SuppressWarnings("unused") -private jarInputStreamProvider createjarInputStreamProvider( - final Object ofile) throws MalformedURLException - { - - // BH 2018 allow for bytes already attached to File object - final String file = ofile.toString(); - byte[] bytes = /** @j2sNative ofile._bytes ||*/null; - if (bytes != null) { - - return new jarInputStreamProvider() - { - - @Override - public JarInputStream getJarInputStream() throws IOException - { - return new JarInputStream(new ByteArrayInputStream(bytes)); - } - - @Override - public String getFilename() - { - return file; - } - }; - + @SuppressWarnings("unused") + private jarInputStreamProvider createjarInputStreamProvider(final Object ofile) throws MalformedURLException { + + // BH 2018 allow for bytes already attached to File object + try { + String file = (ofile instanceof File ? ((File) ofile).getCanonicalPath() : ofile.toString()); + byte[] bytes = /** @j2sNative ofile._bytes || */ + null; + URL url = null; + errorMessage = null; + uniqueSetSuffix = null; + seqRefIds = null; + viewportsAdded.clear(); + frefedSequence = null; + + if (file.startsWith("http://")) { + url = new URL(file); + } + final URL _url = url; + return new jarInputStreamProvider() { + + @Override + public JarInputStream getJarInputStream() throws IOException { + if (bytes != null) { + System.out.println("Jalview2XML: opening byte jarInputStream for bytes.length=" + bytes.length); + return new JarInputStream(new ByteArrayInputStream(bytes)); + } + if (_url != null) { + System.out.println("Jalview2XML: opening url jarInputStream for " + _url); + return new JarInputStream(_url.openStream()); + } else { + System.out.println("Jalview2XML: opening file jarInputStream for " + file); + return new JarInputStream(new FileInputStream(file)); + } + } + + @Override + public String getFilename() { + return file; + } + }; + } catch (IOException e) { + e.printStackTrace(); + return null; + } } - URL url = null; - errorMessage = null; - uniqueSetSuffix = null; - seqRefIds = null; - viewportsAdded.clear(); - frefedSequence = null; - - if (file.startsWith("http://")) - { - url = new URL(file); - } - final URL _url = url; - return new jarInputStreamProvider() - { - - @Override - public JarInputStream getJarInputStream() throws IOException - { - if (_url != null) - { - return new JarInputStream(_url.openStream()); - } - else - { - return new JarInputStream(new FileInputStream(file)); - } - } - - @Override - public String getFilename() - { - return file; - } - }; - } /** * Recover jalview session from a jalview project archive. Caller may @@ -2622,6 +2608,7 @@ private jarInputStreamProvider createjarInputStreamProvider( for (int i = 0; i < entryCount; i++) { jarentry = jin.getNextJarEntry(); + System.out.println("Jalview2XML#loadJalviewAlign: jarentry=" + (jarentry == null ? null : jarentry.getName())); } if (jarentry != null && jarentry.getName().endsWith(".xml")) @@ -2637,7 +2624,7 @@ private jarInputStreamProvider createjarInputStreamProvider( JAXBElement jbe = um .unmarshal(streamReader, JalviewModel.class); JalviewModel object = jbe.getValue(); - + System.out.println("processing JalviewModel object=" + object); /* Unmarshaller unmar = new Unmarshaller(object); unmar.setValidation(false); @@ -2984,6 +2971,7 @@ private jarInputStreamProvider createjarInputStreamProvider( do { entry = jin.getNextJarEntry(); + System.out.println("Jalview2XML#copyJarEntry: jarentry=" + (entry == null ? null : entry.getName())); } while (entry != null && !entry.getName().equals(jarEntryName)); if (entry != null) { @@ -5821,6 +5809,7 @@ private jarInputStreamProvider createjarInputStreamProvider( do { entry = jin.getNextJarEntry(); + System.out.println("Jalview2XML#readJarEntry: jarentry=" + (entry == null ? null : entry.getName())); } while (entry != null && !entry.getName().equals(jarEntryName)); if (entry != null) diff --git a/temp/java50.jvx b/temp/java50.jvx new file mode 100644 index 0000000000000000000000000000000000000000..8bd396a5d334f19af70e5d7dfed663b2b4267b1d GIT binary patch literal 9130 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 PL40`%U+Oc4e{cT<;ANd6 literal 0 HcmV?d00001 diff --git a/temp/java50b.jvx b/temp/java50b.jvx new file mode 100644 index 0000000000000000000000000000000000000000..3926122027d88d2bbafcad7a5215aa0e36390fe1 GIT binary patch literal 9131 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