Merge branch 'develop' of https://source.jalview.org/git/jalview.git into develop
[jalview.git] / src / jalview / io / JSONFile.java
index 8882f97..d2b8412 100644 (file)
@@ -33,12 +33,13 @@ 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.ComplexAlignFile;
 import jalview.api.FeatureRenderer;
 import jalview.api.FeaturesDisplayedI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
+import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenSequences;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
@@ -54,7 +55,7 @@ import jalview.json.binding.v1.SequencePojo;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 
-public class JSONFile extends AlignFile
+public class JSONFile extends AlignFile implements ComplexAlignFile
 {
   private ColourSchemeI colourScheme;
 
@@ -82,8 +83,12 @@ public class JSONFile extends AlignFile
 
   private List<int[]> hiddenColumns;
 
+  private ColumnSelection columnSelection;
+
   private List<String> hiddenSeqRefs;
 
+  private ArrayList<SequenceI> hiddenSequences;
+
   public JSONFile()
   {
     super();
@@ -234,11 +239,9 @@ public class JSONFile extends AlignFile
       return null;
     }
 
-    System.out.println("--- Hidden Sections ---");
     // hidden column business
     if (getViewport().hasHiddenColumns())
     {
-      System.out.print("Hidden Cols : ");
       List<int[]> hiddenCols = getViewport().getColumnSelection()
               .getHiddenColumns();
       StringBuilder hiddenColsBuilder = new StringBuilder();
@@ -250,7 +253,6 @@ public class JSONFile extends AlignFile
 
       hiddenColsBuilder.deleteCharAt(0);
       hiddenSections[0] = hiddenColsBuilder.toString();
-      System.out.println(hiddenSections[0]);
     }
 
     // hidden rows/seqs business
@@ -262,8 +264,6 @@ public class JSONFile extends AlignFile
     }
 
     SequenceI[] hiddenSeqs = hiddenSeqsObj.hiddenSequences;
-    System.out.print("Hidden Seqs : ");
-    // if(hiddenSeqs != null){
     StringBuilder hiddenSeqsBuilder = new StringBuilder();
     for (SequenceI hiddenSeq : hiddenSeqs)
     {
@@ -273,12 +273,10 @@ public class JSONFile extends AlignFile
       }
     }
     if (hiddenSeqsBuilder.length() > 0)
-      {
+    {
       hiddenSeqsBuilder.deleteCharAt(0);
-      }
+    }
     hiddenSections[1] = hiddenSeqsBuilder.toString();
-    System.out.println(hiddenSections[1]);
-    // }
 
     return hiddenSections;
   }
@@ -394,6 +392,7 @@ public class JSONFile extends AlignFile
         parseHiddenCols(jvSettingsJsonObj);
       }
 
+      hiddenSequences = new ArrayList<SequenceI>();
       seqMap = new Hashtable<String, Sequence>();
       for (Iterator<JSONObject> sequenceIter = seqJsonArray.iterator(); sequenceIter
               .hasNext();)
@@ -408,7 +407,7 @@ public class JSONFile extends AlignFile
                 end);
         if (hiddenSeqRefs != null && hiddenSeqRefs.contains(seqUniqueId))
         {
-          seq.setHidden(true);
+          hiddenSequences.add(seq);
         }
         seqs.add(seq);
         seqMap.put(seqUniqueId, seq);
@@ -517,14 +516,14 @@ public class JSONFile extends AlignFile
 
   public void parseHiddenCols(JSONObject jvSettingsJson)
   {
-    hiddenColumns = new ArrayList<int[]>();
     String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
     if(hiddenCols != null && !hiddenCols.isEmpty()){
+      columnSelection = new ColumnSelection();
       String[] rangeStrings = hiddenCols.split(";");
       for(String rangeString : rangeStrings){
         String[] range = rangeString.split("-");
-        hiddenColumns.add(new int[]
-        { Integer.valueOf(range[0]), Integer.valueOf(range[1]) });
+        columnSelection.hideColumns(Integer.valueOf(range[0]),
+                Integer.valueOf(range[1]));
       }
     }
   }
@@ -545,9 +544,6 @@ public class JSONFile extends AlignFile
         String descripiton = (String) jsonFeature.get("description");
         String seqRef = (String) jsonFeature.get("sequenceRef");
         Float score = Float.valueOf(jsonFeature.get("score").toString());
-        // Hashtable otherDetails = (Hashtable) jsonFeature
-        // .get("otherDetails");
-        // sequenceFeature.otherDetails = otherDetails;
 
         Sequence seq = seqMap.get(seqRef);
         SequenceFeature sequenceFeature = new SequenceFeature();
@@ -588,15 +584,6 @@ public class JSONFile extends AlignFile
     return jalviewColor;
   }
 
-  public void applySettingsToAlignmentView(AlignViewControllerGuiI avc)
-  {
-    avc.setShowSeqFeatures(isShowSeqFeatures());
-    avc.changeColour(getColourScheme());
-    avc.setMenusForViewport();
-    avc.hideColumns(hiddenColumns);
-    avc.syncHiddenSequences();
-  }
-
   public String getGlobalColorScheme()
   {
     return globalColorScheme;
@@ -637,6 +624,7 @@ public class JSONFile extends AlignFile
     this.jsonExportSettings = jsonExportSettings;
   }
 
+
   public static String getJSONData(AlignViewportI av)
   {
     JSONFile jsonFile = new JSONFile();
@@ -686,6 +674,34 @@ public class JSONFile extends AlignFile
     return hiddenColumns;
   }
 
+  public ColumnSelection getColumnSelection()
+  {
+    return columnSelection;
+  }
+
+  public void setColumnSelection(ColumnSelection columnSelection)
+  {
+    this.columnSelection = columnSelection;
+  }
+
+  public SequenceI[] getHiddenSequences()
+  {
+    if (hiddenSequences == null || hiddenSequences.isEmpty())
+    {
+      return new SequenceI[]
+      {};
+    }
+    synchronized (hiddenSequences)
+    {
+      return hiddenSequences.toArray(new SequenceI[hiddenSequences.size()]);
+    }
+  }
+
+  public void setHiddenSequences(ArrayList<SequenceI> hiddenSequences)
+  {
+    this.hiddenSequences = hiddenSequences;
+  }
+
   public class JSONExportSettings
   {
     private boolean exportSequence;