JAL-3705 JAL-3251 unused attribute repurposed/renamed to mappedFromId
[jalview.git] / src / jalview / project / Jalview2XML.java
index 8bbe20c..945ddc3 100644 (file)
@@ -29,7 +29,6 @@ import java.awt.Font;
 import java.awt.Rectangle;
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -1089,13 +1088,14 @@ public class Jalview2XML
             if (frames[f] instanceof StructureViewerBase)
             {
               StructureViewerBase viewFrame = (StructureViewerBase) frames[f];
-              matchedFile = saveStructureState(ap, jds, pdb, entry, viewIds,
+              matchedFile = saveStructureViewer(ap, jds, pdb, entry, viewIds,
                       matchedFile, viewFrame);
               /*
                * Only store each structure viewer's state once in the project
                * jar. First time through only (storeDS==false)
                */
               String viewId = viewFrame.getViewId();
+              String viewerType = viewFrame.getViewerType().toString();
               if (!storeDS && !viewIds.contains(viewId))
               {
                 viewIds.add(viewId);
@@ -1103,13 +1103,13 @@ public class Jalview2XML
                 if (viewerState != null)
                 {
                   copyFileToJar(jout, viewerState.getPath(),
-                          getViewerJarEntryName(viewId));
+                          getViewerJarEntryName(viewId), viewerType);
                 }
                 else
                 {
                   Cache.log.error("Failed to save viewer state for "
                           +
-                          viewFrame.getViewerType().toString());
+                          viewerType);
                 }
               }
             }
@@ -1131,7 +1131,7 @@ public class Jalview2XML
             if (!pdbfiles.contains(pdbId))
             {
               pdbfiles.add(pdbId);
-              copyFileToJar(jout, matchedFile, pdbId);
+              copyFileToJar(jout, matchedFile, pdbId, pdbId);
             }
           }
 
@@ -1678,7 +1678,7 @@ public class Jalview2XML
       // using save and then load
       try
       {
-       fileName = fileName.replace('\\', '/');
+        fileName = fileName.replace('\\', '/');
         System.out.println("Writing jar entry " + fileName);
         JarEntry entry = new JarEntry(fileName);
         jout.putNextEntry(entry);
@@ -1979,7 +1979,7 @@ public class Jalview2XML
 
                 String varnaStateFile = varna.getStateInfo(model.rna);
                 jarEntryName = RNA_PREFIX + viewId + "_" + nextCounter();
-                copyFileToJar(jout, varnaStateFile, jarEntryName);
+                copyFileToJar(jout, varnaStateFile, jarEntryName, "Varna");
                 rnaSessions.put(model, jarEntryName);
               }
               SecondaryStructure ss = new SecondaryStructure();
@@ -2003,16 +2003,19 @@ public class Jalview2XML
    * @param jout
    * @param infilePath
    * @param jarEntryName
+   * @param msg
+   *          additional identifying info to log to the console
    */
   protected void copyFileToJar(JarOutputStream jout, String infilePath,
-          String jarEntryName)
+          String jarEntryName, String msg)
   {
     try (InputStream is = new FileInputStream(infilePath))
     {
       File file = new File(infilePath);
       if (file.exists() && jout != null)
       {
-        System.out.println("Writing jar entry " + jarEntryName);
+        System.out.println(
+                "Writing jar entry " + jarEntryName + " (" + msg + ")");
         jout.putNextEntry(new JarEntry(jarEntryName));
         copyAll(is, jout);
         jout.closeEntry();
@@ -2028,29 +2031,6 @@ public class Jalview2XML
   }
 
   /**
-   * Write the data to a new entry of given name in the output jar file
-   * 
-   * @param jout
-   * @param jarEntryName
-   * @param data
-   * @throws IOException
-   */
-  protected void writeJarEntry(JarOutputStream jout, String jarEntryName,
-          byte[] data) throws IOException
-  {
-    if (jout != null)
-    {
-      jarEntryName = jarEntryName.replace('\\','/');
-      System.out.println("Writing jar entry " + jarEntryName);
-      jout.putNextEntry(new JarEntry(jarEntryName));
-      DataOutputStream dout = new DataOutputStream(jout);
-      dout.write(data, 0, data.length);
-      dout.flush();
-      jout.closeEntry();
-    }
-  }
-
-  /**
    * Copies input to output, in 4K buffers; handles any data (text or binary)
    * 
    * @param in
@@ -2081,7 +2061,7 @@ public class Jalview2XML
    * @param viewFrame
    * @return
    */
-  protected String saveStructureState(AlignmentPanel ap, SequenceI jds,
+  protected String saveStructureViewer(AlignmentPanel ap, SequenceI jds,
           Pdbids pdb, PDBEntry entry, List<String> viewIds,
           String matchedFile, StructureViewerBase viewFrame)
   {
@@ -2567,63 +2547,61 @@ public class Jalview2XML
   private Mapping createVamsasMapping(jalview.datamodel.Mapping jmp,
           SequenceI parentseq, SequenceI jds, boolean recurse)
   {
-    Mapping mp = null;
-    if (jmp.getMap() != null)
+    if (jmp.getMap() == null)
     {
-      mp = new Mapping();
+      return null;
+    }
+    Mapping mp = new Mapping();
 
-      jalview.util.MapList mlst = jmp.getMap();
-      List<int[]> r = mlst.getFromRanges();
-      for (int[] range : r)
+    if (jmp.getMappedFromId() != null)
+    {
+      mp.setMappedFromId(jmp.getMappedFromId());
+    }
+    
+    jalview.util.MapList mlst = jmp.getMap();
+    List<int[]> r = mlst.getFromRanges();
+    for (int[] range : r)
+    {
+      MapListFrom mfrom = new MapListFrom();
+      mfrom.setStart(range[0]);
+      mfrom.setEnd(range[1]);
+      mp.getMapListFrom().add(mfrom);
+    }
+    r = mlst.getToRanges();
+    for (int[] range : r)
+    {
+      MapListTo mto = new MapListTo();
+      mto.setStart(range[0]);
+      mto.setEnd(range[1]);
+      mp.getMapListTo().add(mto);
+    }
+    mp.setMapFromUnit(BigInteger.valueOf(mlst.getFromRatio()));
+    mp.setMapToUnit(BigInteger.valueOf(mlst.getToRatio()));
+    if (jmp.getTo() != null)
+    {
+      // check/create ID for the sequence referenced by getTo()
+
+      String jmpid = "";
+      SequenceI ps = null;
+      if (parentseq != jmp.getTo()
+              && parentseq.getDatasetSequence() != jmp.getTo())
       {
-        MapListFrom mfrom = new MapListFrom();
-        mfrom.setStart(range[0]);
-        mfrom.setEnd(range[1]);
-        // mp.addMapListFrom(mfrom);
-        mp.getMapListFrom().add(mfrom);
+        // chaining dbref rather than a handshaking one
+        jmpid = seqHash(ps = jmp.getTo());
       }
-      r = mlst.getToRanges();
-      for (int[] range : r)
+      else
       {
-        MapListTo mto = new MapListTo();
-        mto.setStart(range[0]);
-        mto.setEnd(range[1]);
-        // mp.addMapListTo(mto);
-        mp.getMapListTo().add(mto);
+        jmpid = seqHash(ps = parentseq);
       }
-      mp.setMapFromUnit(BigInteger.valueOf(mlst.getFromRatio()));
-      mp.setMapToUnit(BigInteger.valueOf(mlst.getToRatio()));
-      if (jmp.getTo() != null)
+      mp.setDseqFor(jmpid);
+      if (!seqRefIds.containsKey(jmpid))
       {
-        // MappingChoice mpc = new MappingChoice();
-
-        // check/create ID for the sequence referenced by getTo()
-
-        String jmpid = "";
-        SequenceI ps = null;
-        if (parentseq != jmp.getTo()
-                && parentseq.getDatasetSequence() != jmp.getTo())
-        {
-          // chaining dbref rather than a handshaking one
-          jmpid = seqHash(ps = jmp.getTo());
-        }
-        else
-        {
-          jmpid = seqHash(ps = parentseq);
-        }
-        // mpc.setDseqFor(jmpid);
-        mp.setDseqFor(jmpid);
-        if (!seqRefIds.containsKey(jmpid))
-        {
-          jalview.bin.Cache.log.debug("creatign new DseqFor ID");
-          seqRefIds.put(jmpid, ps);
-        }
-        else
-        {
-          jalview.bin.Cache.log.debug("reusing DseqFor ID");
-        }
-
-        // mp.setMappingChoice(mpc);
+        jalview.bin.Cache.log.debug("creatign new DseqFor ID");
+        seqRefIds.put(jmpid, ps);
+      }
+      else
+      {
+        jalview.bin.Cache.log.debug("reusing DseqFor ID");
       }
     }
     return mp;
@@ -5657,6 +5635,8 @@ public class Jalview2XML
             fto, m.getMapFromUnit().intValue(),
             m.getMapToUnit().intValue());
 
+    jmap.setMappedFromId(m.getMappedFromId());
+    
     /*
      * (optional) choice of dseqFor or Sequence
      */
@@ -6198,8 +6178,8 @@ public class Jalview2XML
     String state = svattrib.getStateData(); // Jalview < 2.9
     if (state == null || state.isEmpty()) // Jalview >= 2.9
     {
-      state = readJarEntry(jprovider,
-              getViewerJarEntryName(svattrib.getViewId()));
+      String jarEntryName = getViewerJarEntryName(svattrib.getViewId());
+      state = readJarEntry(jprovider, jarEntryName);
     }
     // TODO or simpler? for each key in oldFiles,
     // replace key.getPath() in state with oldFiles.get(key).getFilePath()
@@ -6246,8 +6226,7 @@ public class Jalview2XML
       {
         // add pdb files that should be present in the viewer
         StructureData filedat = oldFiles.get(id);
-        rewritten.append(filedat.getFilePath()).append(" \"")
-                .append(filedat.getFilePath()).append("\"");
+        rewritten.append(" \"").append(filedat.getFilePath()).append("\"");
       }
       rewritten.append(";");
     }