JAL-1641 refactor
[jalview.git] / src / jalview / io / JSONFile.java
index 621604c..39d713d 100644 (file)
@@ -33,17 +33,20 @@ 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.AlignmentI;
 import jalview.datamodel.Annotation;
+import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenSequences;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.gui.AlignViewport;
 import jalview.json.binding.v1.AlignmentAnnotationPojo;
 import jalview.json.binding.v1.AlignmentPojo;
 import jalview.json.binding.v1.AlignmentPojo.JalviewBioJsColorSchemeMapper;
@@ -54,7 +57,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 +85,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 +241,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 +255,6 @@ public class JSONFile extends AlignFile
 
       hiddenColsBuilder.deleteCharAt(0);
       hiddenSections[0] = hiddenColsBuilder.toString();
-      System.out.println(hiddenSections[0]);
     }
 
     // hidden rows/seqs business
@@ -390,6 +394,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();)
@@ -404,7 +409,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);
@@ -513,14 +518,17 @@ public class JSONFile extends AlignFile
 
   public void parseHiddenCols(JSONObject jvSettingsJson)
   {
-    hiddenColumns = new ArrayList<int[]>();
+    // 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]) });
+        // hiddenColumns.add(new int[]
+        // { Integer.valueOf(range[0]), Integer.valueOf(range[1]) });
+        columnSelection.hideColumns(Integer.valueOf(range[0]),
+                Integer.valueOf(range[1]));
       }
     }
   }
@@ -584,13 +592,12 @@ public class JSONFile extends AlignFile
     return jalviewColor;
   }
 
-  public void applySettingsToAlignmentView(AlignViewControllerGuiI avc)
+  public AlignViewportI getViewport(AlignmentI al)
   {
-    avc.setShowSeqFeatures(isShowSeqFeatures());
-    avc.changeColour(getColourScheme());
-    avc.setMenusForViewport();
-    avc.hideColumns(hiddenColumns);
-    avc.syncHiddenSequences();
+    AlignViewportI viewport = new AlignViewport(al, getColumnSelection());
+    viewport.setGlobalColourScheme(getColourScheme());
+    viewport.setShowSequenceFeatures(isShowSeqFeatures());
+    return viewport;
   }
 
   public String getGlobalColorScheme()
@@ -633,6 +640,7 @@ public class JSONFile extends AlignFile
     this.jsonExportSettings = jsonExportSettings;
   }
 
+
   public static String getJSONData(AlignViewportI av)
   {
     JSONFile jsonFile = new JSONFile();
@@ -682,6 +690,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;