JAL-1760 JAL-1641 Serialisation of Hidden Seqs and Cols in JSON output. Added ability...
[jalview.git] / src / jalview / io / JSONFile.java
index 5e2139e..dca59a3 100644 (file)
 
 package jalview.io;
 
+import java.awt.Color;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
 import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureRenderer;
@@ -42,18 +54,6 @@ import jalview.json.binding.v1.SequencePojo;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 
-import java.awt.Color;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-
 public class JSONFile extends AlignFile
 {
   private ColourSchemeI colourScheme;
@@ -80,6 +80,10 @@ public class JSONFile extends AlignFile
 
   private JSONExportSettings jsonExportSettings;
 
+  private List<int[]> hiddenColumns;
+
+  private List<String> hiddenSeqRefs;
+
   public JSONFile()
   {
     super();
@@ -141,7 +145,7 @@ public class JSONFile extends AlignFile
         name.append(seq.getName()).append("/").append(seq.getStart())
                 .append("-").append(seq.getEnd());
         SequencePojo jsonSeqPojo = new SequencePojo();
-        jsonSeqPojo.setId(seq.getName() + "_" + seq.hashCode());
+        jsonSeqPojo.setId(String.valueOf(seq.hashCode()));
         jsonSeqPojo.setOrder(++count);
         jsonSeqPojo.setEnd(seq.getEnd());
         jsonSeqPojo.setStart(seq.getStart());
@@ -199,8 +203,7 @@ public class JSONFile extends AlignFile
           seqGrpPojo.setShowNonconserved(seqGrp.getShowNonconserved());
           for (SequenceI seq : seqGrp.getSequences())
           {
-            seqGrpPojo.getSeqsHash().add(
-                    seq.getName() + "_" + seq.hashCode());
+            seqGrpPojo.getSeqsHash().add(String.valueOf(seq.hashCode()));
           }
           jsonAlignmentPojo.getSeqGroups().add(seqGrpPojo);
         }
@@ -294,7 +297,7 @@ public class JSONFile extends AlignFile
                 && displayedFeatures.isVisible(sf.getType()))
         {
           SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo(
-                  seq.getName() + "_" + seq.hashCode());
+                  String.valueOf(seq.hashCode()));
           String featureColour = (fr == null) ? null : jalview.util.Format
                   .getHexString(fr
                   .findFeatureColour(Color.white, seq,
@@ -376,6 +379,8 @@ public class JSONFile extends AlignFile
                 "showSeqFeatures").toString());
         setColourScheme(getJalviewColorScheme(jsColourScheme));
         setShowSeqFeatures(showFeatures);
+        parseHiddenSeqRefsAsList(jvSettingsJsonObj);
+        parseHiddenCols(jvSettingsJsonObj);
       }
 
       seqMap = new Hashtable<String, Sequence>();
@@ -390,6 +395,10 @@ public class JSONFile extends AlignFile
         int end = Integer.valueOf(sequence.get("end").toString());
         Sequence seq = new Sequence(sequenceName, sequcenceString, start,
                 end);
+        if (hiddenSeqRefs.contains(seqUniqueId))
+        {
+          seq.setHidden(true);
+        }
         seqs.add(seq);
         seqMap.put(seqUniqueId, seq);
       }
@@ -483,6 +492,31 @@ public class JSONFile extends AlignFile
     return this;
   }
 
+  public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson)
+  {
+    hiddenSeqRefs = new ArrayList<String>();
+    String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs");
+    if(hiddenSeqs != null && !hiddenSeqs.isEmpty()){
+      String[] seqRefs = hiddenSeqs.split(";");
+      for(String seqRef : seqRefs){
+        hiddenSeqRefs.add(seqRef);
+      }
+    }
+  }
+
+  public void parseHiddenCols(JSONObject jvSettingsJson)
+  {
+    hiddenColumns = new ArrayList<int[]>();
+    String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
+    if(hiddenCols != null && !hiddenCols.isEmpty()){
+      String[] rangeStrings = hiddenCols.split(";");
+      for(String rangeString : rangeStrings){
+        String[] range = rangeString.split("-");
+        hiddenColumns.add(new int[]
+        { Integer.valueOf(range[0]), Integer.valueOf(range[1]) });
+      }
+    }
+  }
 
   @SuppressWarnings("unchecked")
   private void parseFeatures(JSONArray jsonSeqFeatures)
@@ -543,11 +577,13 @@ public class JSONFile extends AlignFile
     return jalviewColor;
   }
 
-  public void applySettingsToAlignFrame(AlignViewControllerGuiI af)
+  public void applySettingsToAlignmentView(AlignViewControllerGuiI avc)
   {
-    af.setShowSeqFeatures(isShowSeqFeatures());
-    af.changeColour(getColourScheme());
-    af.setMenusForViewport();
+    avc.setShowSeqFeatures(isShowSeqFeatures());
+    avc.changeColour(getColourScheme());
+    avc.setMenusForViewport();
+    avc.hideColumns(hiddenColumns);
+    avc.syncHiddenSequences();
   }
 
   public String getGlobalColorScheme()
@@ -634,6 +670,11 @@ public class JSONFile extends AlignFile
     return annotations;
   }
 
+  public List<int[]> getHiddenColumns()
+  {
+    return hiddenColumns;
+  }
+
   public class JSONExportSettings
   {
     private boolean exportSequence;