JAL-3438 spotless for 2.11.2.0
[jalview.git] / src / jalview / io / JSONFile.java
index f957e06..2ee305f 100644 (file)
@@ -21,7 +21,7 @@
 
 package jalview.io;
 
-import jalview.api.AlignExportSettingI;
+import jalview.api.AlignExportSettingsI;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.api.ComplexAlignFile;
@@ -29,7 +29,7 @@ import jalview.api.FeatureRenderer;
 import jalview.api.FeatureSettingsModelI;
 import jalview.api.FeaturesDisplayedI;
 import jalview.bin.BuildDetails;
-import jalview.datamodel.AlignExportSettingBeanI;
+import jalview.datamodel.AlignExportSettingsAdapter;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
@@ -53,6 +53,7 @@ import jalview.schemes.JalviewColourScheme;
 import jalview.schemes.ResidueColourScheme;
 import jalview.util.ColorUtils;
 import jalview.util.Format;
+import jalview.util.JSONUtils;
 import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
 
 import java.awt.Color;
@@ -62,17 +63,14 @@ import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 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 implements ComplexAlignFile
 {
   private static String version = new BuildDetails().getVersion();
 
-  private String webstartUrl = "http://www.jalview.org/services/launchApp";
+  private String webstartUrl = "https://www.jalview.org/services/launchApp";
 
   private String application = "Jalview";
 
@@ -124,50 +122,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     try
     {
       AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
-      AlignExportSettingBeanI exportSettings = getExportSettings();
+      AlignExportSettingsI exportSettings = getExportSettings();
 
-      // if no export settings were supplied use the following with all values
-      // defaulting to true
+      /*
+       * if no export settings were supplied, provide an 'export all' setting
+       */
       if (exportSettings == null)
       {
-        exportSettings = new AlignExportSettingBeanI()
-        {
-          @Override
-          public boolean isExportHiddenSequences()
-          {
-            return true;
-          }
-
-          @Override
-          public boolean isExportHiddenColumns()
-          {
-            return true;
-          }
-
-          @Override
-          public boolean isExportGroups()
-          {
-            return true;
-          }
-
-          @Override
-          public boolean isExportFeatures()
-          {
-            return true;
-          }
-
-          @Override
-          public boolean isExportAnnotations()
-          {
-            return true;
-          }
-
-          @Override
-          public boolean isCancelled()
-          {
-            return false;
-          }
-        };
+        exportSettings = new AlignExportSettingsAdapter(true);
       }
 
       int count = 0;
@@ -256,9 +218,8 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
           jsonAlignmentPojo.getSeqGroups().add(seqGrpPojo);
         }
       }
-      org.json.JSONObject generatedJSon = new org.json.JSONObject(
-              jsonAlignmentPojo);
-      jsonOutput = generatedJSon.toString();
+
+      jsonOutput = JSONUtils.stringify(jsonAlignmentPojo);
       return jsonOutput.replaceAll("xstart", "xStart").replaceAll("xend",
               "xEnd");
     } catch (Exception e)
@@ -330,16 +291,16 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
       /*
        * get all features currently visible (and any non-positional features)
        */
-      List<SequenceFeature> seqFeatures = seq.getFeatures().getAllFeatures(
-              visibleFeatureTypes);
+      List<SequenceFeature> seqFeatures = seq.getFeatures()
+              .getAllFeatures(visibleFeatureTypes);
       for (SequenceFeature sf : seqFeatures)
       {
         SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo(
                 String.valueOf(seq.hashCode()));
 
-        String featureColour = (fr == null) ? null : Format
-                .getHexString(finder.findFeatureColour(Color.white, seq,
-                        seq.findIndex(sf.getBegin())));
+        String featureColour = (fr == null) ? null
+                : Format.getHexString(finder.findFeatureColour(Color.white,
+                        seq, seq.findIndex(sf.getBegin())));
         int xStart = sf.getBegin() == 0 ? 0
                 : seq.findIndex(sf.getBegin()) - 1;
         int xEnd = sf.getEnd() == 0 ? 0 : seq.findIndex(sf.getEnd());
@@ -434,17 +395,17 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   {
     try
     {
-      JSONParser jsonParser = new JSONParser();
-      JSONObject alignmentJsonObj = (JSONObject) jsonParser
+      Map<String, Object> alignmentJsonObj = (Map<String, Object>) JSONUtils
               .parse(jsonAlignmentString);
-      JSONArray seqJsonArray = (JSONArray) alignmentJsonObj.get("seqs");
-      JSONArray alAnnotJsonArray = (JSONArray) alignmentJsonObj
+      List<Object> seqJsonArray = (List<Object>) alignmentJsonObj
+              .get("seqs");
+      List<Object> alAnnotJsonArray = (List<Object>) alignmentJsonObj
               .get("alignAnnotation");
-      JSONArray jsonSeqArray = (JSONArray) alignmentJsonObj
+      List<Object> jsonSeqArray = (List<Object>) alignmentJsonObj
               .get("seqFeatures");
-      JSONArray seqGrpJsonArray = (JSONArray) alignmentJsonObj
+      List<Object> seqGrpJsonArray = (List<Object>) alignmentJsonObj
               .get("seqGroups");
-      JSONObject jvSettingsJsonObj = (JSONObject) alignmentJsonObj
+      Map<String, Object> jvSettingsJsonObj = (Map<String, Object>) alignmentJsonObj
               .get("appSettings");
 
       if (jvSettingsJsonObj != null)
@@ -460,10 +421,11 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
       hiddenSequences = new ArrayList<>();
       seqMap = new Hashtable<>();
-      for (Iterator<JSONObject> sequenceIter = seqJsonArray
+      for (Iterator<Object> sequenceIter = seqJsonArray
               .iterator(); sequenceIter.hasNext();)
       {
-        JSONObject sequence = sequenceIter.next();
+        Map<String, Object> sequence = (Map<String, Object>) sequenceIter
+                .next();
         String sequcenceString = sequence.get("seq").toString();
         String sequenceName = sequence.get("name").toString();
         String seqUniqueId = sequence.get("id").toString();
@@ -481,10 +443,11 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
       parseFeatures(jsonSeqArray);
 
-      for (Iterator<JSONObject> seqGrpIter = seqGrpJsonArray
+      for (Iterator<Object> seqGrpIter = seqGrpJsonArray
               .iterator(); seqGrpIter.hasNext();)
       {
-        JSONObject seqGrpObj = seqGrpIter.next();
+        Map<String, Object> seqGrpObj = (Map<String, Object>) seqGrpIter
+                .next();
         String grpName = seqGrpObj.get("groupName").toString();
         String colourScheme = seqGrpObj.get("colourScheme").toString();
         String description = (seqGrpObj.get("description") == null) ? null
@@ -500,16 +463,16 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         int startRes = Integer
                 .valueOf(seqGrpObj.get("startRes").toString());
         int endRes = Integer.valueOf(seqGrpObj.get("endRes").toString());
-        JSONArray sequenceRefs = (JSONArray) seqGrpObj.get("sequenceRefs");
+        List<Object> sequenceRefs = (List<Object>) seqGrpObj
+                .get("sequenceRefs");
 
         ArrayList<SequenceI> grpSeqs = new ArrayList<>();
         if (sequenceRefs.size() > 0)
         {
-          Iterator<String> seqHashIter = sequenceRefs.iterator();
+          Iterator<Object> seqHashIter = sequenceRefs.iterator();
           while (seqHashIter.hasNext())
           {
-            String seqHash = seqHashIter.next();
-            Sequence sequence = seqMap.get(seqHash);
+            Sequence sequence = seqMap.get(seqHashIter.next());
             if (sequence != null)
             {
               grpSeqs.add(sequence);
@@ -526,17 +489,20 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
       }
 
-      for (Iterator<JSONObject> alAnnotIter = alAnnotJsonArray
+      for (Iterator<Object> alAnnotIter = alAnnotJsonArray
               .iterator(); alAnnotIter.hasNext();)
       {
-        JSONObject alAnnot = alAnnotIter.next();
-        JSONArray annotJsonArray = (JSONArray) alAnnot.get("annotations");
+        Map<String, Object> alAnnot = (Map<String, Object>) alAnnotIter
+                .next();
+        List<Object> annotJsonArray = (List<Object>) alAnnot
+                .get("annotations");
         Annotation[] annotations = new Annotation[annotJsonArray.size()];
         int count = 0;
-        for (Iterator<JSONObject> annotIter = annotJsonArray
+        for (Iterator<Object> annotIter = annotJsonArray
                 .iterator(); annotIter.hasNext();)
         {
-          JSONObject annot = annotIter.next();
+          Map<String, Object> annot = (Map<String, Object>) annotIter
+                  .next();
           if (annot == null)
           {
             annotations[count] = null;
@@ -572,7 +538,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         alignAnnot.graph = (alAnnot.get("graphType") == null) ? 0
                 : Integer.valueOf(alAnnot.get("graphType").toString());
 
-        JSONObject diplaySettings = (JSONObject) alAnnot
+        Map<String, Object> diplaySettings = (Map<String, Object>) alAnnot
                 .get("annotationSettings");
         if (diplaySettings != null)
         {
@@ -640,30 +606,30 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     return this;
   }
 
-  public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson)
+  public void parseHiddenSeqRefsAsList(Map<String, Object> jvSettingsJson)
   {
     hiddenSeqRefs = new ArrayList<>();
     String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs");
     if (hiddenSeqs != null && !hiddenSeqs.isEmpty())
     {
       String[] seqRefs = hiddenSeqs.split(";");
-      for (String seqRef : seqRefs)
+      for (int i = 0, n = seqRefs.length; i < n; i++)
       {
-        hiddenSeqRefs.add(seqRef);
+        hiddenSeqRefs.add(seqRefs[i]);
       }
     }
   }
 
-  public void parseHiddenCols(JSONObject jvSettingsJson)
+  public void parseHiddenCols(Map<String, Object> jvSettingsJson)
   {
     String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
     if (hiddenCols != null && !hiddenCols.isEmpty())
     {
       hiddenColumns = new HiddenColumns();
       String[] rangeStrings = hiddenCols.split(";");
-      for (String rangeString : rangeStrings)
+      for (int i = 0, n = rangeStrings.length; i < n; i++)
       {
-        String[] range = rangeString.split("-");
+        String[] range = rangeStrings[i].split("-");
         hiddenColumns.hideColumns(Integer.valueOf(range[0]),
                 Integer.valueOf(range[1]));
       }
@@ -671,15 +637,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
   }
 
   @SuppressWarnings("unchecked")
-  private void parseFeatures(JSONArray jsonSeqFeatures)
+  private void parseFeatures(List<Object> jsonSeqFeatures)
   {
     if (jsonSeqFeatures != null)
     {
       displayedFeatures = new FeaturesDisplayed();
-      for (Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures
-              .iterator(); seqFeatureItr.hasNext();)
+      for (Object o : jsonSeqFeatures)
       {
-        JSONObject jsonFeature = seqFeatureItr.next();
+        Map<String, Object> jsonFeature = (Map<String, Object>) o;
         Long begin = (Long) jsonFeature.get("xStart");
         Long end = (Long) jsonFeature.get("xEnd");
         String type = (String) jsonFeature.get("type");
@@ -693,22 +658,22 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         /*
          * begin/end of 0 is for a non-positional feature
          */
-        int featureBegin = begin.intValue() == 0 ? 0 : seq
-                .findPosition(begin.intValue());
-        int featureEnd = end.intValue() == 0 ? 0 : seq.findPosition(end
-                .intValue()) - 1;
+        int featureBegin = begin.intValue() == 0 ? 0
+                : seq.findPosition(begin.intValue());
+        int featureEnd = end.intValue() == 0 ? 0
+                : seq.findPosition(end.intValue()) - 1;
 
         SequenceFeature sequenceFeature = new SequenceFeature(type,
                 description, featureBegin, featureEnd, score, featureGrp);
 
-        JSONArray linksJsonArray = (JSONArray) jsonFeature.get("links");
+        List<Object> linksJsonArray = (List<Object>) jsonFeature
+                .get("links");
         if (linksJsonArray != null && linksJsonArray.size() > 0)
         {
-          Iterator<String> linkList = linksJsonArray.iterator();
+          Iterator<Object> linkList = linksJsonArray.iterator();
           while (linkList.hasNext())
           {
-            String link = linkList.next();
-            sequenceFeature.addLink(link);
+            sequenceFeature.addLink((String) linkList.next());
           }
         }