X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJSONFile.java;h=ce70ea5f94d27ab6b91b63b4bcf40c17c2928e7e;hb=4ed384b1f2f74dd70636f7a97f73cbc96600ae5c;hp=621604c79823ab5a6b394cb793c4067b32d09a76;hpb=2564f09af31f666b30fc23889deeff9cd49c68c4;p=jalview.git diff --git a/src/jalview/io/JSONFile.java b/src/jalview/io/JSONFile.java index 621604c..ce70ea5 100644 --- a/src/jalview/io/JSONFile.java +++ b/src/jalview/io/JSONFile.java @@ -21,24 +21,13 @@ 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.AlignmentViewPanel; +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 +43,20 @@ import jalview.json.binding.v1.SequencePojo; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; -public class JSONFile extends AlignFile +import java.awt.Color; +import java.io.IOException; +import java.io.Reader; +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 implements ComplexAlignFile { private ColourSchemeI colourScheme; @@ -78,12 +80,14 @@ public class JSONFile extends AlignFile private FeatureRenderer fr; - private JSONExportSettings jsonExportSettings; - private List hiddenColumns; + private ColumnSelection columnSelection; + private List hiddenSeqRefs; + private ArrayList hiddenSequences; + public JSONFile() { super(); @@ -102,41 +106,16 @@ public class JSONFile extends AlignFile @Override public void parse() throws IOException { - StringBuilder jsonStringBuilder = new StringBuilder(); - String currentLine; - while ((currentLine = nextLine()) != null) - { - jsonStringBuilder.append(currentLine); - } - parse(jsonStringBuilder.toString()); + parse(getReader()); } - @Override public String print() { String jsonOutput = null; try { - if (getJsonExportSettings() == null) - { - jsonExportSettings = new JSONExportSettings(); - jsonExportSettings.setExportAnnotations(true); - jsonExportSettings.setExportGroups(true); - jsonExportSettings.setExportJalviewSettings(true); - jsonExportSettings.setExportSequenceFeatures(true); - } - AlignmentPojo jsonAlignmentPojo = new AlignmentPojo(); - if (getViewport() != null) - { - globalColorScheme = ColourSchemeProperty - .getColourName(getViewport() - .getGlobalColourScheme()); - setDisplayedFeatures(getViewport().getFeaturesDisplayed()); - showSeqFeatures = getViewport().isShowSequenceFeatures(); - fr = getViewport().getFeatureRenderer(); - } int count = 0; for (SequenceI seq : seqs) @@ -154,44 +133,46 @@ public class JSONFile extends AlignFile jsonAlignmentPojo.getSeqs().add(jsonSeqPojo); } - if (jsonExportSettings.isExportJalviewSettings()) + jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme); + jsonAlignmentPojo.getAppSettings().put("application", application); + jsonAlignmentPojo.getAppSettings().put("version", version); + jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl); + jsonAlignmentPojo.getAppSettings().put("showSeqFeatures", + String.valueOf(showSeqFeatures)); + + String[] hiddenSections = getHiddenSections(); + if (hiddenSections != null) { - jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme); - jsonAlignmentPojo.getAppSettings().put("application", application); - jsonAlignmentPojo.getAppSettings().put("version", version); - jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl); - jsonAlignmentPojo.getAppSettings().put("showSeqFeatures", - String.valueOf(showSeqFeatures)); - - String[] hiddenSections = exportHiddenSections(); - if (hiddenSections != null && getViewport().isIncludeHiddenRegion()) + if (hiddenSections[0] != null + && getExportSettings() + .isExportHiddenColumns()) { - if (hiddenSections[0] != null) - { - jsonAlignmentPojo.getAppSettings().put("hiddenCols", - String.valueOf(hiddenSections[0])); - } - if (hiddenSections[1] != null) - { - jsonAlignmentPojo.getAppSettings().put("hiddenSeqs", - String.valueOf(hiddenSections[1])); - } + jsonAlignmentPojo.getAppSettings().put("hiddenCols", + String.valueOf(hiddenSections[0])); + } + if (hiddenSections[1] != null + && getExportSettings() + .isExportHiddenSequences()) + { + jsonAlignmentPojo.getAppSettings().put("hiddenSeqs", + String.valueOf(hiddenSections[1])); } } - if (jsonExportSettings.isExportAnnotations()) + if (getExportSettings().isExportAnnotations()) { jsonAlignmentPojo .setAlignAnnotation(annotationToJsonPojo(annotations)); } - if (jsonExportSettings.isExportSequenceFeatures()) + if (getExportSettings().isExportFeatures()) { jsonAlignmentPojo .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr)); } - if (jsonExportSettings.isExportGroups() && seqGroups != null + if (getExportSettings().isExportGroups() + && seqGroups != null && seqGroups.size() > 0) { for (SequenceGroup seqGrp : seqGroups) @@ -226,7 +207,7 @@ public class JSONFile extends AlignFile return jsonOutput; } - public String[] exportHiddenSections() + public String[] getHiddenSections() { String[] hiddenSections = new String[2]; if (getViewport() == null) @@ -234,11 +215,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 hiddenCols = getViewport().getColumnSelection() .getHiddenColumns(); StringBuilder hiddenColsBuilder = new StringBuilder(); @@ -250,7 +229,6 @@ public class JSONFile extends AlignFile hiddenColsBuilder.deleteCharAt(0); hiddenSections[0] = hiddenColsBuilder.toString(); - System.out.println(hiddenSections[0]); } // hidden rows/seqs business @@ -361,7 +339,7 @@ public class JSONFile extends AlignFile } @SuppressWarnings("unchecked") - public JSONFile parse(String jsonAlignmentString) + public JSONFile parse(Reader jsonAlignmentString) { try { @@ -390,6 +368,7 @@ public class JSONFile extends AlignFile parseHiddenCols(jvSettingsJsonObj); } + hiddenSequences = new ArrayList(); seqMap = new Hashtable(); for (Iterator sequenceIter = seqJsonArray.iterator(); sequenceIter .hasNext();) @@ -404,7 +383,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 +492,14 @@ public class JSONFile extends AlignFile public void parseHiddenCols(JSONObject jvSettingsJson) { - hiddenColumns = new ArrayList(); 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])); } } } @@ -541,9 +520,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(); @@ -584,15 +560,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; @@ -623,41 +590,48 @@ public class JSONFile extends AlignFile this.displayedFeatures = displayedFeatures; } - public JSONExportSettings getJsonExportSettings() - { - return jsonExportSettings; - } - - public void setJsonExportSettings(JSONExportSettings jsonExportSettings) + @Override + public void configureForView(AlignmentViewPanel avpanel) { - this.jsonExportSettings = jsonExportSettings; - } + super.configureForView(avpanel); + if (isExporting()) + { + setViewport(avpanel.getAlignViewport()); + seqGroups = avpanel.getAlignment().getGroups(); + setDisplayedFeatures(getViewport().getFeaturesDisplayed()); + fr = avpanel.cloneFeatureRenderer(); - public static String getJSONData(AlignViewportI av) - { - JSONFile jsonFile = new JSONFile(); - jsonFile.setViewport(av); - jsonFile.seqGroups = av.getAlignment().getGroups(); - jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed()); + for (SequenceI seq : getViewport().getAlignment().getSequences()) + { + seqs.add(seq); + } - for (SequenceI seq : av.getAlignment().getSequences()) - { - jsonFile.seqs.add(seq); - } - - // Add non auto calculated annotation to AlignFile - for (AlignmentAnnotation annot : av.getAlignment() - .getAlignmentAnnotation()) - { - if (annot != null && !annot.autoCalculated) + // Add non auto calculated annotation to AlignFile + for (AlignmentAnnotation annot : getViewport().getAlignment() + .getAlignmentAnnotation()) { - if (annot.label.equals("PDB.CATempFactor")) + if (annot != null && !annot.autoCalculated) { - continue; + if (annot.label.equals("PDB.CATempFactor")) + { + continue; + } + annotations.add(annot); } - jsonFile.annotations.add(annot); } + + globalColorScheme = ColourSchemeProperty.getColourName(getViewport() + .getGlobalColourScheme()); + setDisplayedFeatures(getViewport().getFeaturesDisplayed()); + showSeqFeatures = getViewport().isShowSequenceFeatures(); } + } + + + public static String getJSONData(AlignmentViewPanel av) + { + JSONFile jsonFile = new JSONFile(); + jsonFile.configureForView(av); String jsonString = jsonFile.print(); return jsonString; } @@ -682,6 +656,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 hiddenSequences) + { + this.hiddenSequences = hiddenSequences; + } + public class JSONExportSettings { private boolean exportSequence;