X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJSONFile.java;h=bdd2dcbccd1a4b2bcc4741897556221cb98bd3c2;hb=b0cee3aaf7d8873910939f97b6acb217d518968d;hp=fcedb2b6abbfd84b739681c167042f6584fd13a5;hpb=e2d6753e8cf3c5eaf8bccf34f4f5e9d651e9cb8e;p=jalview.git diff --git a/src/jalview/io/JSONFile.java b/src/jalview/io/JSONFile.java index fcedb2b..bdd2dcb 100644 --- a/src/jalview/io/JSONFile.java +++ b/src/jalview/io/JSONFile.java @@ -1,28 +1,59 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ + 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.FeatureSettingsModelI; 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; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; -import jalview.gui.AlignFrame; -import jalview.json.binding.v1.AlignmentAnnotationPojo; -import jalview.json.binding.v1.AlignmentPojo; -import jalview.json.binding.v1.AnnotationPojo; -import jalview.json.binding.v1.JalviewSettingsPojo; -import jalview.json.binding.v1.JalviewSettingsPojo.JalviewBioJsColorSchemeMapper; -import jalview.json.binding.v1.SequenceFeaturesPojo; -import jalview.json.binding.v1.SequenceGrpPojo; -import jalview.json.binding.v1.SequencePojo; -import jalview.schemes.ColourSchemeI; -import jalview.schemes.ColourSchemeProperty; +import jalview.json.binding.biojson.v1.AlignmentAnnotationPojo; +import jalview.json.binding.biojson.v1.AlignmentPojo; +import jalview.json.binding.biojson.v1.AnnotationDisplaySettingPojo; +import jalview.json.binding.biojson.v1.AnnotationPojo; +import jalview.json.binding.biojson.v1.ColourSchemeMapper; +import jalview.json.binding.biojson.v1.SequenceFeaturesPojo; +import jalview.json.binding.biojson.v1.SequenceGrpPojo; +import jalview.json.binding.biojson.v1.SequencePojo; +import jalview.schemes.JalviewColourScheme; +import jalview.schemes.ResidueColourScheme; +import jalview.util.ColorUtils; +import jalview.viewmodel.seqfeatures.FeaturesDisplayed; import java.awt.Color; import java.io.IOException; +import java.io.Reader; import java.util.ArrayList; import java.util.Hashtable; import java.util.Iterator; @@ -33,21 +64,15 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; -public class JSONFile extends AlignFile +public class JSONFile extends AlignFile implements ComplexAlignFile { - private ColourSchemeI colourScheme; - - // private static boolean seqFeaturesEnabled; - - private String jalviewVersion; + private static String version = new BuildDetails().getVersion(); - private String webStartLaunchServletUrl; + private String webstartUrl = "http://www.jalview.org/services/launchApp"; - public static final String FILE_EXT = "json"; + private String application = "Jalview"; - public static final String FILE_DESC = "JSON"; - - private String globalColorScheme; + private String globalColourScheme; private boolean showSeqFeatures; @@ -55,11 +80,17 @@ public class JSONFile extends AlignFile private FeaturesDisplayedI displayedFeatures; - // private AlignViewportI viewport; - private FeatureRenderer fr; - private JSONExportSettings jsonExportSettings; + private List hiddenColumns; + + private ColumnSelection columnSelection; + + private List hiddenSeqRefs; + + private ArrayList hiddenSequences; + + private final static String TCOFFEE_SCORE = "TCoffeeScore"; public JSONFile() { @@ -71,58 +102,80 @@ public class JSONFile extends AlignFile super(source); } - public JSONFile(String inFile, String type) throws IOException + public JSONFile(String inFile, DataSourceType sourceType) + throws IOException { - super(inFile, type); + super(inFile, sourceType); } @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() + public String print(SequenceI[] sqs, boolean jvsuffix) { + 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) + 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(); - // setSeqFeaturesEnabled(viewport.isShowSequenceFeatures()); + 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; - for (SequenceI seq : seqs) + for (SequenceI seq : sqs) { StringBuilder name = new StringBuilder(); name.append(seq.getName()).append("/").append(seq.getStart()) .append("-").append(seq.getEnd()); SequencePojo jsonSeqPojo = new SequencePojo(); - jsonSeqPojo.setId(seq.getName() + "_" + seq.hashCode()); + jsonSeqPojo.setId(String.valueOf(seq.hashCode())); jsonSeqPojo.setOrder(++count); jsonSeqPojo.setEnd(seq.getEnd()); jsonSeqPojo.setStart(seq.getStart()); @@ -130,43 +183,63 @@ public class JSONFile extends AlignFile jsonSeqPojo.setSeq(seq.getSequenceAsString()); jsonAlignmentPojo.getSeqs().add(jsonSeqPojo); } - - if (jsonExportSettings.isExportJalviewSettings()) + jsonAlignmentPojo.setGlobalColorScheme(globalColourScheme); + 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) { - jalviewVersion = jalview.bin.Cache.getProperty("VERSION"); - webStartLaunchServletUrl = jalview.bin.Cache.getDefault( - "www.jalview.org", "http://www.jalview.org") - + "/services/launchApp"; - - JalviewSettingsPojo jvSettings = new JalviewSettingsPojo(); - jvSettings.setGlobalColorScheme(globalColorScheme); - jvSettings.setJalviewVersion(jalviewVersion); - jvSettings.setWebStartUrl(webStartLaunchServletUrl); - jvSettings.setShowSeqFeatures(showSeqFeatures); - jsonAlignmentPojo.setJalviewSettings(jvSettings); + if (hiddenSections[0] != null + && exportSettings.isExportHiddenColumns()) + { + jsonAlignmentPojo.getAppSettings().put("hiddenCols", + String.valueOf(hiddenSections[0])); + } + if (hiddenSections[1] != null + && exportSettings.isExportHiddenSequences()) + { + jsonAlignmentPojo.getAppSettings().put("hiddenSeqs", + String.valueOf(hiddenSections[1])); + } } - if (jsonExportSettings.isExportAnnotations()) + if (exportSettings.isExportAnnotations()) { jsonAlignmentPojo .setAlignAnnotation(annotationToJsonPojo(annotations)); } + else + { + // These color schemes require annotation, disable them if annotations + // are not exported + if (globalColourScheme + .equalsIgnoreCase(JalviewColourScheme.RNAHelices.toString()) + || globalColourScheme + .equalsIgnoreCase(JalviewColourScheme.TCoffee + .toString())) + { + jsonAlignmentPojo.setGlobalColorScheme(ResidueColourScheme.NONE); + } + } - if (jsonExportSettings.isExportSequenceFeatures()) + if (exportSettings.isExportFeatures()) { jsonAlignmentPojo - .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr)); + .setSeqFeatures(sequenceFeatureToJsonPojo(sqs, fr)); } - if (jsonExportSettings.isExportGroups() && seqGroups != null + if (exportSettings.isExportGroups() && seqGroups != null && seqGroups.size() > 0) { for (SequenceGroup seqGrp : seqGroups) { SequenceGrpPojo seqGrpPojo = new SequenceGrpPojo(); seqGrpPojo.setGroupName(seqGrp.getName()); - seqGrpPojo.setColourScheme(ColourSchemeProperty - .getColourName(seqGrp.cs)); + seqGrpPojo.setColourScheme(seqGrp.cs.getSchemeName()); seqGrpPojo.setColourText(seqGrp.getColourText()); seqGrpPojo.setDescription(seqGrp.getDescription()); seqGrpPojo.setDisplayBoxes(seqGrp.getDisplayBoxes()); @@ -176,36 +249,92 @@ public class JSONFile extends AlignFile seqGrpPojo.setShowNonconserved(seqGrp.getShowNonconserved()); for (SequenceI seq : seqGrp.getSequences()) { - seqGrpPojo.getSeqsHash().add( - seq.getName() + "_" + seq.hashCode()); + seqGrpPojo.getSequenceRefs() + .add(String.valueOf(seq.hashCode())); } jsonAlignmentPojo.getSeqGroups().add(seqGrpPojo); } } - com.json.JSONObject generatedJSon = new com.json.JSONObject( + org.json.JSONObject generatedJSon = new org.json.JSONObject( jsonAlignmentPojo); - String jsonOutput = generatedJSon.toString(); + jsonOutput = generatedJSon.toString(); return jsonOutput.replaceAll("xstart", "xStart").replaceAll("xend", "xEnd"); } catch (Exception e) { e.printStackTrace(); - throw e; } + return jsonOutput; } - public static List sequenceFeatureToJsonPojo( - List seqs, FeatureRenderer fr) + public String[] getHiddenSections() { - FeaturesDisplayedI displayedFeatures = (fr == null) ? null : fr - .getFeaturesDisplayed(); + String[] hiddenSections = new String[2]; + if (getViewport() == null) + { + return null; + } + + // hidden column business + if (getViewport().hasHiddenColumns()) + { + List hiddenCols = getViewport().getColumnSelection() + .getHiddenColumns(); + StringBuilder hiddenColsBuilder = new StringBuilder(); + for (int[] range : hiddenCols) + { + hiddenColsBuilder.append(";").append(range[0]).append("-") + .append(range[1]); + } + + hiddenColsBuilder.deleteCharAt(0); + hiddenSections[0] = hiddenColsBuilder.toString(); + } + + // hidden rows/seqs business + HiddenSequences hiddenSeqsObj = getViewport().getAlignment() + .getHiddenSequences(); + if (hiddenSeqsObj == null || hiddenSeqsObj.hiddenSequences == null) + { + return hiddenSections; + } + + SequenceI[] hiddenSeqs = hiddenSeqsObj.hiddenSequences; + StringBuilder hiddenSeqsBuilder = new StringBuilder(); + for (SequenceI hiddenSeq : hiddenSeqs) + { + if (hiddenSeq != null) + { + hiddenSeqsBuilder.append(";").append(hiddenSeq.hashCode()); + } + } + if (hiddenSeqsBuilder.length() > 0) + { + hiddenSeqsBuilder.deleteCharAt(0); + } + hiddenSections[1] = hiddenSeqsBuilder.toString(); + + return hiddenSections; + } + + public List sequenceFeatureToJsonPojo( + SequenceI[] sqs, FeatureRenderer fr) + { + displayedFeatures = (fr == null) ? null : fr.getFeaturesDisplayed(); List sequenceFeaturesPojo = new ArrayList(); - for (SequenceI seq : seqs) + if (sqs == null) + { + return sequenceFeaturesPojo; + } + + for (SequenceI seq : sqs) { SequenceI dataSetSequence = seq.getDatasetSequence(); SequenceFeature[] seqFeatures = (dataSetSequence == null) ? null : seq.getDatasetSequence().getSequenceFeatures(); + seqFeatures = (seqFeatures == null) ? seq.getSequenceFeatures() + : seqFeatures; if (seqFeatures == null) { continue; @@ -217,10 +346,10 @@ public class JSONFile extends AlignFile && displayedFeatures.isVisible(sf.getType())) { SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo( - seq.getName() + "_" + seq.hashCode()); + 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())); @@ -251,6 +380,26 @@ public class JSONFile extends AlignFile AlignmentAnnotationPojo alignAnnotPojo = new AlignmentAnnotationPojo(); alignAnnotPojo.setDescription(annot.description); alignAnnotPojo.setLabel(annot.label); + if (!Double.isNaN(annot.score)) + { + alignAnnotPojo.setScore(annot.score); + } + alignAnnotPojo.setCalcId(annot.getCalcId()); + alignAnnotPojo.setGraphType(annot.graph); + + AnnotationDisplaySettingPojo annotSetting = new AnnotationDisplaySettingPojo(); + annotSetting.setBelowAlignment(annot.belowAlignment); + annotSetting.setCentreColLabels(annot.centreColLabels); + annotSetting.setScaleColLabel(annot.scaleColLabel); + annotSetting.setShowAllColLabels(annot.showAllColLabels); + annotSetting.setVisible(annot.visible); + annotSetting.setHasIcon(annot.hasIcons); + alignAnnotPojo.setAnnotationSettings(annotSetting); + SequenceI refSeq = annot.sequenceRef; + if (refSeq != null) + { + alignAnnotPojo.setSequenceRef(String.valueOf(refSeq.hashCode())); + } for (Annotation annotation : annot.annotations) { AnnotationPojo annotationPojo = new AnnotationPojo(); @@ -260,12 +409,28 @@ public class JSONFile extends AlignFile annotationPojo.setValue(annotation.value); annotationPojo .setSecondaryStructure(annotation.secondaryStructure); - annotationPojo.setDisplayCharacter(annotation.displayCharacter); + String displayChar = annotation.displayCharacter == null ? null + : annotation.displayCharacter; + // System.out.println("--------------------->[" + displayChar + "]"); + annotationPojo.setDisplayCharacter(displayChar); + if (annotation.colour != null) + { + annotationPojo.setColour(jalview.util.Format + .getHexString(annotation.colour)); + } alignAnnotPojo.getAnnotations().add(annotationPojo); } else { - alignAnnotPojo.getAnnotations().add(annotationPojo); + if (annot.getCalcId() != null + && annot.getCalcId().equalsIgnoreCase(TCOFFEE_SCORE)) + { + // do nothing + } + else + { + alignAnnotPojo.getAnnotations().add(annotationPojo); + } } } jsonAnnotations.add(alignAnnotPojo); @@ -274,7 +439,7 @@ public class JSONFile extends AlignFile } @SuppressWarnings("unchecked") - public JSONFile parse(String jsonAlignmentString) + public JSONFile parse(Reader jsonAlignmentString) { try { @@ -289,19 +454,20 @@ public class JSONFile extends AlignFile JSONArray seqGrpJsonArray = (JSONArray) alignmentJsonObj .get("seqGroups"); JSONObject jvSettingsJsonObj = (JSONObject) alignmentJsonObj - .get("jalviewSettings"); + .get("appSettings"); if (jvSettingsJsonObj != null) { - String jsColourScheme = (String) jvSettingsJsonObj + globalColourScheme = (String) jvSettingsJsonObj .get("globalColorScheme"); Boolean showFeatures = Boolean.valueOf(jvSettingsJsonObj.get( "showSeqFeatures").toString()); - setColourScheme(getJalviewColorScheme(jsColourScheme)); - // JSONFile.setSeqFeaturesEnabled(showFeatures); setShowSeqFeatures(showFeatures); + parseHiddenSeqRefsAsList(jvSettingsJsonObj); + parseHiddenCols(jvSettingsJsonObj); } + hiddenSequences = new ArrayList(); seqMap = new Hashtable(); for (Iterator sequenceIter = seqJsonArray.iterator(); sequenceIter .hasNext();) @@ -314,9 +480,14 @@ public class JSONFile extends AlignFile int end = Integer.valueOf(sequence.get("end").toString()); Sequence seq = new Sequence(sequenceName, sequcenceString, start, end); + if (hiddenSeqRefs != null && hiddenSeqRefs.contains(seqUniqueId)) + { + hiddenSequences.add(seq); + } seqs.add(seq); seqMap.put(seqUniqueId, seq); } + parseFeatures(jsonSeqArray); for (Iterator seqGrpIter = seqGrpJsonArray.iterator(); seqGrpIter @@ -338,12 +509,12 @@ public class JSONFile extends AlignFile 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(); @@ -354,9 +525,10 @@ public class JSONFile extends AlignFile } } } - ColourSchemeI scheme = getJalviewColorScheme(colourScheme); - SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, scheme, + SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, null, displayBoxes, displayText, colourText, startRes, endRes); + seqGrp.cs = ColourSchemeMapper.getJalviewColourScheme(colourScheme, + seqGrp); seqGrp.setShowNonconserved(showNonconserved); seqGrp.setDescription(description); this.seqGroups.add(seqGrp); @@ -384,12 +556,20 @@ public class JSONFile extends AlignFile .valueOf(annot.get("value").toString()); String desc = annot.get("description") == null ? null : annot .get("description").toString(); - - char ss = annot.get("secondaryStructure") == null ? 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); + if (annot.get("colour") != null) + { + Color color = ColorUtils.parseColourString(annot.get( + "colour").toString()); + annotations[count].colour = color; + } } ++count; } @@ -397,9 +577,65 @@ public class JSONFile extends AlignFile AlignmentAnnotation alignAnnot = new AlignmentAnnotation(alAnnot .get("label").toString(), alAnnot.get("description") .toString(), annotations); + alignAnnot.graph = (alAnnot.get("graphType") == null) ? 0 : Integer + .valueOf(alAnnot.get("graphType").toString()); + + JSONObject diplaySettings = (JSONObject) alAnnot + .get("annotationSettings"); + if (diplaySettings != null) + { + + alignAnnot.scaleColLabel = (diplaySettings.get("scaleColLabel") == null) ? false + : Boolean.valueOf(diplaySettings.get("scaleColLabel") + .toString()); + alignAnnot.showAllColLabels = (diplaySettings + .get("showAllColLabels") == null) ? true : Boolean + .valueOf(diplaySettings.get("showAllColLabels") + .toString()); + alignAnnot.centreColLabels = (diplaySettings + .get("centreColLabels") == null) ? true + : Boolean.valueOf(diplaySettings.get("centreColLabels") + .toString()); + alignAnnot.belowAlignment = (diplaySettings.get("belowAlignment") == null) ? false + : Boolean.valueOf(diplaySettings.get("belowAlignment") + .toString()); + alignAnnot.visible = (diplaySettings.get("visible") == null) ? true + : Boolean.valueOf(diplaySettings.get("visible") + .toString()); + alignAnnot.hasIcons = (diplaySettings.get("hasIcon") == null) ? true + : Boolean.valueOf(diplaySettings.get("hasIcon") + .toString()); + + } + if (alAnnot.get("score") != null) + { + alignAnnot.score = Double + .valueOf(alAnnot.get("score").toString()); + } + + String calcId = (alAnnot.get("calcId") == null) ? "" : alAnnot.get( + "calcId").toString(); + alignAnnot.setCalcId(calcId); + String seqHash = (alAnnot.get("sequenceRef") != null) ? alAnnot + .get("sequenceRef").toString() : null; + + Sequence sequence = (seqHash != null) ? seqMap.get(seqHash) : null; + if (sequence != null) + { + alignAnnot.sequenceRef = sequence; + sequence.addAlignmentAnnotation(alignAnnot); + if (alignAnnot.label.equalsIgnoreCase("T-COFFEE")) + { + alignAnnot.createSequenceMapping(sequence, sequence.getStart(), + false); + sequence.addAlignmentAnnotation(alignAnnot); + alignAnnot.adjustForAlignment(); + } + } + alignAnnot.validateRangeAndDisplay(); this.annotations.add(alignAnnot); - } + } } catch (Exception e) { e.printStackTrace(); @@ -407,12 +643,42 @@ public class JSONFile extends AlignFile return this; } + public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson) + { + hiddenSeqRefs = new ArrayList(); + String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs"); + if (hiddenSeqs != null && !hiddenSeqs.isEmpty()) + { + String[] seqRefs = hiddenSeqs.split(";"); + for (String seqRef : seqRefs) + { + hiddenSeqRefs.add(seqRef); + } + } + } + + public void parseHiddenCols(JSONObject jvSettingsJson) + { + 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("-"); + columnSelection.hideColumns(Integer.valueOf(range[0]), + Integer.valueOf(range[1])); + } + } + } @SuppressWarnings("unchecked") private void parseFeatures(JSONArray jsonSeqFeatures) { if (jsonSeqFeatures != null) { + displayedFeatures = new FeaturesDisplayed(); for (Iterator seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr .hasNext();) { @@ -424,9 +690,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(); @@ -447,110 +710,113 @@ public class JSONFile extends AlignFile sequenceFeature.setBegin(seq.findPosition(begin.intValue())); sequenceFeature.setEnd(seq.findPosition(end.intValue()) - 1); seq.addSequenceFeature(sequenceFeature); + displayedFeatures.setVisible(type); } } } - public static ColourSchemeI getJalviewColorScheme( - String bioJsColourSchemeName) + @Override + public String getGlobalColourScheme() { - ColourSchemeI jalviewColor = null; - for (JalviewBioJsColorSchemeMapper cs : JalviewBioJsColorSchemeMapper - .values()) - { - if (cs.getBioJsName().equalsIgnoreCase(bioJsColourSchemeName)) - { - jalviewColor = cs.getJvColourScheme(); - break; - } - } - return jalviewColor; + return globalColourScheme; } - public void LoadAlignmentFeatures(AlignFrame af) + public void setGlobalColorScheme(String globalColourScheme) { - af.setShowSeqFeatures(isShowSeqFeatures()); - af.changeColour(getColourScheme()); - af.setMenusForViewport(); + this.globalColourScheme = globalColourScheme; } - public String getGlobalColorScheme() + @Override + public FeaturesDisplayedI getDisplayedFeatures() { - return globalColorScheme; + return displayedFeatures; } - public void setGlobalColorScheme(String globalColorScheme) + public void setDisplayedFeatures(FeaturesDisplayedI displayedFeatures) { - this.globalColorScheme = globalColorScheme; + this.displayedFeatures = displayedFeatures; } - public ColourSchemeI getColourScheme() + @Override + public void configureForView(AlignmentViewPanel avpanel) { - return colourScheme; + if (avpanel == null) + { + return; + } + super.configureForView(avpanel); + AlignViewportI viewport = avpanel.getAlignViewport(); + AlignmentI alignment = viewport.getAlignment(); + AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation(); + + seqGroups = alignment.getGroups(); + fr = avpanel.cloneFeatureRenderer(); + + // Add non auto calculated annotation to AlignFile + if (annots != null) + { + for (AlignmentAnnotation annot : annots) + { + if (annot != null && !annot.autoCalculated) + { + annotations.add(annot); + } + } + } + globalColourScheme = viewport.getGlobalColourScheme().getSchemeName(); + setDisplayedFeatures(viewport.getFeaturesDisplayed()); + showSeqFeatures = viewport.isShowSequenceFeatures(); + } - public void setColourScheme(ColourSchemeI colourScheme) + @Override + public boolean isShowSeqFeatures() { - this.colourScheme = colourScheme; + return showSeqFeatures; } - public FeaturesDisplayedI getDisplayedFeatures() + public void setShowSeqFeatures(boolean showSeqFeatures) { - return displayedFeatures; + this.showSeqFeatures = showSeqFeatures; } - public void setDisplayedFeatures(FeaturesDisplayedI displayedFeatures) + public Vector getAnnotations() { - this.displayedFeatures = displayedFeatures; + return annotations; } - public JSONExportSettings getJsonExportSettings() + public List getHiddenColumns() { - return jsonExportSettings; + return hiddenColumns; } - public void setJsonExportSettings(JSONExportSettings jsonExportSettings) + @Override + public ColumnSelection getColumnSelection() { - this.jsonExportSettings = jsonExportSettings; + return columnSelection; } - public static String getJSONData(AlignViewportI av) + public void setColumnSelection(ColumnSelection columnSelection) { - JSONFile jsonFile = new JSONFile(); - jsonFile.setViewport(av); - jsonFile.seqGroups = av.getAlignment().getGroups(); - jsonFile.setDisplayedFeatures(av.getFeaturesDisplayed()); + this.columnSelection = columnSelection; + } - for (SequenceI seq : av.getAlignment().getSequences()) + @Override + public SequenceI[] getHiddenSequences() + { + if (hiddenSequences == null || hiddenSequences.isEmpty()) { - jsonFile.seqs.add(seq); + return new SequenceI[] {}; } - - // Add non auto calculated annotation to AlignFile - for (AlignmentAnnotation annot : av.getAlignment() - .getAlignmentAnnotation()) + synchronized (hiddenSequences) { - if (annot != null && !annot.autoCalculated) - { - if (annot.label.equals("PDB.CATempFactor")) - { - continue; - } - jsonFile.annotations.add(annot); - } + return hiddenSequences.toArray(new SequenceI[hiddenSequences.size()]); } - String jsonString = jsonFile.print(); - return jsonString; - } - - public boolean isShowSeqFeatures() - { - return showSeqFeatures; } - public void setShowSeqFeatures(boolean showSeqFeatures) + public void setHiddenSequences(ArrayList hiddenSequences) { - this.showSeqFeatures = showSeqFeatures; + this.hiddenSequences = hiddenSequences; } public class JSONExportSettings @@ -615,4 +881,19 @@ public class JSONFile extends AlignFile this.exportJalviewSettings = exportJalviewSettings; } } + + /** + * Returns a descriptor for suitable feature display settings with + *
    + *
  • ResNums or insertions features visible
  • + *
  • insertions features coloured red
  • + *
  • ResNum features coloured by label
  • + *
  • Insertions displayed above (on top of) ResNums
  • + *
+ */ + @Override + public FeatureSettingsModelI getFeatureColourScheme() + { + return new PDBFeatureSettings(); + } }