X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJSONFile.java;h=51603165055ac98ef299bf4059b2a9c32a65fe90;hb=1e085f14ae2f19adfac0153c437ee891f0ad07bc;hp=bbbc122e2b8666d97819ba8f998785e2a8c7955a;hpb=93d63f3c608771bb48b5ac18f761194a1ea28554;p=jalview.git diff --git a/src/jalview/io/JSONFile.java b/src/jalview/io/JSONFile.java index bbbc122..5160316 100644 --- a/src/jalview/io/JSONFile.java +++ b/src/jalview/io/JSONFile.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) - * Copyright (C) $$Year-Rel$$ The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -21,11 +21,15 @@ package jalview.io; +import jalview.api.AlignExportSettingI; import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; import jalview.api.ComplexAlignFile; import jalview.api.FeatureRenderer; import jalview.api.FeaturesDisplayedI; +import jalview.bin.BuildDetails; import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenSequences; @@ -33,15 +37,16 @@ import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; -import jalview.json.binding.v1.AlignmentAnnotationPojo; -import jalview.json.binding.v1.AlignmentPojo; -import jalview.json.binding.v1.AlignmentPojo.JalviewBioJsColorSchemeMapper; -import jalview.json.binding.v1.AnnotationPojo; -import jalview.json.binding.v1.SequenceFeaturesPojo; -import jalview.json.binding.v1.SequenceGrpPojo; -import jalview.json.binding.v1.SequencePojo; +import jalview.json.binding.biojson.v1.AlignmentAnnotationPojo; +import jalview.json.binding.biojson.v1.AlignmentPojo; +import jalview.json.binding.biojson.v1.AnnotationPojo; +import jalview.json.binding.biojson.v1.JalviewBioJsColorSchemeMapper; +import jalview.json.binding.biojson.v1.SequenceFeaturesPojo; +import jalview.json.binding.biojson.v1.SequenceGrpPojo; +import jalview.json.binding.biojson.v1.SequencePojo; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; +import jalview.viewmodel.seqfeatures.FeaturesDisplayed; import java.awt.Color; import java.io.IOException; @@ -60,9 +65,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile { private ColourSchemeI colourScheme; - private String version = "2.9"; + private static String version = new BuildDetails().getVersion(); - private String webstartUrl = "www.jalview.org/services/launchApp"; + private String webstartUrl = "http://www.jalview.org/services/launchApp"; private String application = "Jalview"; @@ -117,14 +122,50 @@ public class JSONFile extends AlignFile implements ComplexAlignFile try { AlignmentPojo jsonAlignmentPojo = new AlignmentPojo(); - if (getViewport() != null) + AlignExportSettingI exportSettings = getExportSettings(); + + // if no export settings were supplied use the following with all values + // defaulting to true + if (exportSettings == null) { - globalColorScheme = ColourSchemeProperty - .getColourName(getViewport() - .getGlobalColourScheme()); - setDisplayedFeatures(getViewport().getFeaturesDisplayed()); - showSeqFeatures = getViewport().isShowSequenceFeatures(); - fr = getViewport().getFeatureRenderer(); + exportSettings = new AlignExportSettingI() + { + @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; + } + }; } int count = 0; @@ -142,7 +183,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile jsonSeqPojo.setSeq(seq.getSequenceAsString()); jsonAlignmentPojo.getSeqs().add(jsonSeqPojo); } - jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme); jsonAlignmentPojo.getAppSettings().put("application", application); jsonAlignmentPojo.getAppSettings().put("version", version); @@ -154,35 +194,32 @@ public class JSONFile extends AlignFile implements ComplexAlignFile if (hiddenSections != null) { if (hiddenSections[0] != null - && getViewport().getExportSettings() - .isExportHiddenColumns()) + && exportSettings.isExportHiddenColumns()) { jsonAlignmentPojo.getAppSettings().put("hiddenCols", String.valueOf(hiddenSections[0])); } if (hiddenSections[1] != null - && getViewport().getExportSettings() - .isExportHiddenSequences()) + && exportSettings.isExportHiddenSequences()) { jsonAlignmentPojo.getAppSettings().put("hiddenSeqs", String.valueOf(hiddenSections[1])); } } - if (getViewport().getExportSettings().isExportAnnotations()) + if (exportSettings.isExportAnnotations()) { jsonAlignmentPojo .setAlignAnnotation(annotationToJsonPojo(annotations)); } - if (getViewport().getExportSettings().isExportFeatures()) + if (exportSettings.isExportFeatures()) { jsonAlignmentPojo .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr)); } - if (getViewport().getExportSettings().isExportGroups() - && seqGroups != null + if (exportSettings.isExportGroups() && seqGroups != null && seqGroups.size() > 0) { for (SequenceGroup seqGrp : seqGroups) @@ -200,7 +237,8 @@ public class JSONFile extends AlignFile implements ComplexAlignFile seqGrpPojo.setShowNonconserved(seqGrp.getShowNonconserved()); for (SequenceI seq : seqGrp.getSequences()) { - seqGrpPojo.getSeqsHash().add(String.valueOf(seq.hashCode())); + seqGrpPojo.getSequenceRefs() + .add(String.valueOf(seq.hashCode())); } jsonAlignmentPojo.getSeqGroups().add(seqGrpPojo); } @@ -267,11 +305,10 @@ public class JSONFile extends AlignFile implements ComplexAlignFile return hiddenSections; } - public static List sequenceFeatureToJsonPojo( + public List sequenceFeatureToJsonPojo( List seqs, FeatureRenderer fr) { - FeaturesDisplayedI displayedFeatures = (fr == null) ? null : fr - .getFeaturesDisplayed(); + displayedFeatures = (fr == null) ? null : fr.getFeaturesDisplayed(); List sequenceFeaturesPojo = new ArrayList(); for (SequenceI seq : seqs) { @@ -293,9 +330,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile { SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo( String.valueOf(seq.hashCode())); + String featureColour = (fr == null) ? null : jalview.util.Format - .getHexString(fr - .findFeatureColour(Color.white, seq, + .getHexString(fr.findFeatureColour(Color.white, seq, seq.findIndex(sf.getBegin()))); jsonFeature.setXstart(seq.findIndex(sf.getBegin()) - 1); jsonFeature.setXend(seq.findIndex(sf.getEnd())); @@ -419,12 +456,12 @@ public class JSONFile extends AlignFile implements ComplexAlignFile int startRes = Integer .valueOf(seqGrpObj.get("startRes").toString()); int endRes = Integer.valueOf(seqGrpObj.get("endRes").toString()); - JSONArray seqsHashArray = (JSONArray) seqGrpObj.get("seqsHash"); + JSONArray sequenceRefs = (JSONArray) seqGrpObj.get("sequenceRefs"); ArrayList grpSeqs = new ArrayList(); - if (seqsHashArray.size() > 0) + if (sequenceRefs.size() > 0) { - Iterator seqHashIter = seqsHashArray.iterator(); + Iterator seqHashIter = sequenceRefs.iterator(); while (seqHashIter.hasNext()) { String seqHash = seqHashIter.next(); @@ -435,9 +472,10 @@ public class JSONFile extends AlignFile implements ComplexAlignFile } } } - ColourSchemeI scheme = getJalviewColorScheme(colourScheme); - SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, scheme, - displayBoxes, displayText, colourText, startRes, endRes); + ColourSchemeI grpColourScheme = getJalviewColorScheme(colourScheme); + SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, + grpColourScheme, displayBoxes, displayText, colourText, + startRes, endRes); seqGrp.setShowNonconserved(showNonconserved); seqGrp.setDescription(description); this.seqGroups.add(seqGrp); @@ -465,10 +503,12 @@ public class JSONFile extends AlignFile implements ComplexAlignFile .valueOf(annot.get("value").toString()); String desc = annot.get("description") == null ? null : annot .get("description").toString(); - - char ss = annot.get("secondaryStructure") == null ? ' ' - : annot.get("secondaryStructure").toString().charAt(0); - String displayChar = annot.get("displayCharacter").toString(); + char ss = annot.get("secondaryStructure") == null + || annot.get("secondaryStructure").toString() + .equalsIgnoreCase("u0000") ? ' ' : annot + .get("secondaryStructure").toString().charAt(0); + String displayChar = annot.get("displayCharacter") == null ? "" + : annot.get("displayCharacter").toString(); annotations[count] = new Annotation(displayChar, desc, ss, val); } @@ -492,9 +532,11 @@ public class JSONFile extends AlignFile implements ComplexAlignFile { hiddenSeqRefs = new ArrayList(); String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs"); - if(hiddenSeqs != null && !hiddenSeqs.isEmpty()){ + if (hiddenSeqs != null && !hiddenSeqs.isEmpty()) + { String[] seqRefs = hiddenSeqs.split(";"); - for(String seqRef : seqRefs){ + for (String seqRef : seqRefs) + { hiddenSeqRefs.add(seqRef); } } @@ -503,10 +545,12 @@ public class JSONFile extends AlignFile implements ComplexAlignFile public void parseHiddenCols(JSONObject jvSettingsJson) { String hiddenCols = (String) jvSettingsJson.get("hiddenCols"); - if(hiddenCols != null && !hiddenCols.isEmpty()){ + if (hiddenCols != null && !hiddenCols.isEmpty()) + { columnSelection = new ColumnSelection(); String[] rangeStrings = hiddenCols.split(";"); - for(String rangeString : rangeStrings){ + for (String rangeString : rangeStrings) + { String[] range = rangeString.split("-"); columnSelection.hideColumns(Integer.valueOf(range[0]), Integer.valueOf(range[1])); @@ -519,6 +563,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile { if (jsonSeqFeatures != null) { + displayedFeatures = new FeaturesDisplayed(); for (Iterator seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr .hasNext();) { @@ -550,6 +595,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile sequenceFeature.setBegin(seq.findPosition(begin.intValue())); sequenceFeature.setEnd(seq.findPosition(end.intValue()) - 1); seq.addSequenceFeature(sequenceFeature); + displayedFeatures.setVisible(type); } } } @@ -561,7 +607,9 @@ public class JSONFile extends AlignFile implements ComplexAlignFile for (JalviewBioJsColorSchemeMapper cs : JalviewBioJsColorSchemeMapper .values()) { - if (cs.getBioJsName().equalsIgnoreCase(bioJsColourSchemeName)) + if (cs.getBioJsName().equalsIgnoreCase(bioJsColourSchemeName) + || cs.getJalviewName() + .equalsIgnoreCase(bioJsColourSchemeName)) { jalviewColor = cs.getJvColourScheme(); break; @@ -590,6 +638,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile this.colourScheme = colourScheme; } + @Override public FeaturesDisplayedI getDisplayedFeatures() { return displayedFeatures; @@ -600,34 +649,33 @@ public class JSONFile extends AlignFile implements ComplexAlignFile this.displayedFeatures = displayedFeatures; } - - public static String getJSONData(AlignViewportI av) + public void configureForView(AlignmentViewPanel avpanel) { - JSONFile jsonFile = new JSONFile(); - jsonFile.setViewport(av); - jsonFile.seqGroups = av.getAlignment().getGroups(); - jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed()); + super.configureForView(avpanel); + AlignViewportI viewport = avpanel.getAlignViewport(); + AlignmentI alignment = viewport.getAlignment(); + AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation(); + + seqGroups = alignment.getGroups(); + fr = avpanel.cloneFeatureRenderer(); - for (SequenceI seq : av.getAlignment().getSequences()) - { - jsonFile.seqs.add(seq); - } - // Add non auto calculated annotation to AlignFile - for (AlignmentAnnotation annot : av.getAlignment() - .getAlignmentAnnotation()) + for (AlignmentAnnotation annot : annots) { if (annot != null && !annot.autoCalculated) { - if (annot.label.equals("PDB.CATempFactor")) + if (!annot.visible) { continue; } - jsonFile.annotations.add(annot); + annotations.add(annot); } } - String jsonString = jsonFile.print(); - return jsonString; + globalColorScheme = ColourSchemeProperty.getColourName(viewport + .getGlobalColourScheme()); + setDisplayedFeatures(viewport.getFeaturesDisplayed()); + showSeqFeatures = viewport.isShowSequenceFeatures(); + } public boolean isShowSeqFeatures() @@ -664,8 +712,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile { if (hiddenSequences == null || hiddenSequences.isEmpty()) { - return new SequenceI[] - {}; + return new SequenceI[] {}; } synchronized (hiddenSequences) {