2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
24 import jalview.api.AlignExportSettingI;
25 import jalview.api.AlignViewportI;
26 import jalview.api.AlignmentViewPanel;
27 import jalview.api.ComplexAlignFile;
28 import jalview.api.FeatureRenderer;
29 import jalview.api.FeaturesDisplayedI;
30 import jalview.bin.BuildDetails;
31 import jalview.datamodel.AlignmentAnnotation;
32 import jalview.datamodel.AlignmentI;
33 import jalview.datamodel.Annotation;
34 import jalview.datamodel.ColumnSelection;
35 import jalview.datamodel.HiddenSequences;
36 import jalview.datamodel.Sequence;
37 import jalview.datamodel.SequenceFeature;
38 import jalview.datamodel.SequenceGroup;
39 import jalview.datamodel.SequenceI;
40 import jalview.json.binding.biojson.v1.AlignmentAnnotationPojo;
41 import jalview.json.binding.biojson.v1.AlignmentPojo;
42 import jalview.json.binding.biojson.v1.AnnotationDisplaySettingPojo;
43 import jalview.json.binding.biojson.v1.AnnotationPojo;
44 import jalview.json.binding.biojson.v1.ColourSchemeMapper;
45 import jalview.json.binding.biojson.v1.SequenceFeaturesPojo;
46 import jalview.json.binding.biojson.v1.SequenceGrpPojo;
47 import jalview.json.binding.biojson.v1.SequencePojo;
48 import jalview.schemes.ColourSchemeProperty;
49 import jalview.schemes.UserColourScheme;
50 import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
52 import java.awt.Color;
53 import java.io.IOException;
54 import java.io.Reader;
55 import java.util.ArrayList;
56 import java.util.Hashtable;
57 import java.util.Iterator;
58 import java.util.List;
59 import java.util.Vector;
61 import org.json.simple.JSONArray;
62 import org.json.simple.JSONObject;
63 import org.json.simple.parser.JSONParser;
65 public class JSONFile extends AlignFile implements ComplexAlignFile
67 private static String version = new BuildDetails().getVersion();
69 private String webstartUrl = "http://www.jalview.org/services/launchApp";
71 private String application = "Jalview";
73 public static final String FILE_EXT = "json";
75 public static final String FILE_DESC = "JSON";
77 private String globalColourScheme;
79 private boolean showSeqFeatures;
81 private Hashtable<String, Sequence> seqMap;
83 private FeaturesDisplayedI displayedFeatures;
85 private FeatureRenderer fr;
87 private List<int[]> hiddenColumns;
89 private ColumnSelection columnSelection;
91 private List<String> hiddenSeqRefs;
93 private ArrayList<SequenceI> hiddenSequences;
95 private final static String TCOFFEE_SCORE = "TCoffeeScore";
102 public JSONFile(FileParse source) throws IOException
107 public JSONFile(String inFile, String type) throws IOException
113 public void parse() throws IOException
120 public String print()
122 String jsonOutput = null;
125 AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
126 AlignExportSettingI exportSettings = getExportSettings();
128 // if no export settings were supplied use the following with all values
129 // defaulting to true
130 if (exportSettings == null)
132 exportSettings = new AlignExportSettingI()
135 public boolean isExportHiddenSequences()
141 public boolean isExportHiddenColumns()
147 public boolean isExportGroups()
153 public boolean isExportFeatures()
159 public boolean isExportAnnotations()
165 public boolean isCancelled()
173 for (SequenceI seq : seqs)
175 StringBuilder name = new StringBuilder();
176 name.append(seq.getName()).append("/").append(seq.getStart())
177 .append("-").append(seq.getEnd());
178 SequencePojo jsonSeqPojo = new SequencePojo();
179 jsonSeqPojo.setId(String.valueOf(seq.hashCode()));
180 jsonSeqPojo.setOrder(++count);
181 jsonSeqPojo.setEnd(seq.getEnd());
182 jsonSeqPojo.setStart(seq.getStart());
183 jsonSeqPojo.setName(name.toString());
184 jsonSeqPojo.setSeq(seq.getSequenceAsString());
185 jsonAlignmentPojo.getSeqs().add(jsonSeqPojo);
187 jsonAlignmentPojo.setGlobalColorScheme(globalColourScheme);
188 jsonAlignmentPojo.getAppSettings().put("application", application);
189 jsonAlignmentPojo.getAppSettings().put("version", version);
190 jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl);
191 jsonAlignmentPojo.getAppSettings().put("showSeqFeatures",
192 String.valueOf(showSeqFeatures));
194 String[] hiddenSections = getHiddenSections();
195 if (hiddenSections != null)
197 if (hiddenSections[0] != null
198 && exportSettings.isExportHiddenColumns())
200 jsonAlignmentPojo.getAppSettings().put("hiddenCols",
201 String.valueOf(hiddenSections[0]));
203 if (hiddenSections[1] != null
204 && exportSettings.isExportHiddenSequences())
206 jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
207 String.valueOf(hiddenSections[1]));
211 if (exportSettings.isExportAnnotations())
214 .setAlignAnnotation(annotationToJsonPojo(
219 if (globalColourScheme.equalsIgnoreCase("RNA Helices"))
221 jsonAlignmentPojo.setGlobalColorScheme("None");
225 if (exportSettings.isExportFeatures())
228 .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr));
231 if (exportSettings.isExportGroups() && seqGroups != null
232 && seqGroups.size() > 0)
234 for (SequenceGroup seqGrp : seqGroups)
236 SequenceGrpPojo seqGrpPojo = new SequenceGrpPojo();
237 seqGrpPojo.setGroupName(seqGrp.getName());
238 seqGrpPojo.setColourScheme(ColourSchemeProperty
239 .getColourName(seqGrp.cs));
240 seqGrpPojo.setColourText(seqGrp.getColourText());
241 seqGrpPojo.setDescription(seqGrp.getDescription());
242 seqGrpPojo.setDisplayBoxes(seqGrp.getDisplayBoxes());
243 seqGrpPojo.setDisplayText(seqGrp.getDisplayText());
244 seqGrpPojo.setEndRes(seqGrp.getEndRes());
245 seqGrpPojo.setStartRes(seqGrp.getStartRes());
246 seqGrpPojo.setShowNonconserved(seqGrp.getShowNonconserved());
247 for (SequenceI seq : seqGrp.getSequences())
249 seqGrpPojo.getSequenceRefs()
250 .add(String.valueOf(seq.hashCode()));
252 jsonAlignmentPojo.getSeqGroups().add(seqGrpPojo);
255 org.json.JSONObject generatedJSon = new org.json.JSONObject(
257 jsonOutput = generatedJSon.toString();
258 return jsonOutput.replaceAll("xstart", "xStart").replaceAll("xend",
260 } catch (Exception e)
267 public String[] getHiddenSections()
269 String[] hiddenSections = new String[2];
270 if (getViewport() == null)
275 // hidden column business
276 if (getViewport().hasHiddenColumns())
278 List<int[]> hiddenCols = getViewport().getColumnSelection()
280 StringBuilder hiddenColsBuilder = new StringBuilder();
281 for (int[] range : hiddenCols)
283 hiddenColsBuilder.append(";").append(range[0]).append("-")
287 hiddenColsBuilder.deleteCharAt(0);
288 hiddenSections[0] = hiddenColsBuilder.toString();
291 // hidden rows/seqs business
292 HiddenSequences hiddenSeqsObj = getViewport().getAlignment()
293 .getHiddenSequences();
294 if (hiddenSeqsObj == null || hiddenSeqsObj.hiddenSequences == null)
296 return hiddenSections;
299 SequenceI[] hiddenSeqs = hiddenSeqsObj.hiddenSequences;
300 StringBuilder hiddenSeqsBuilder = new StringBuilder();
301 for (SequenceI hiddenSeq : hiddenSeqs)
303 if (hiddenSeq != null)
305 hiddenSeqsBuilder.append(";").append(hiddenSeq.hashCode());
308 if (hiddenSeqsBuilder.length() > 0)
310 hiddenSeqsBuilder.deleteCharAt(0);
312 hiddenSections[1] = hiddenSeqsBuilder.toString();
314 return hiddenSections;
317 public List<SequenceFeaturesPojo> sequenceFeatureToJsonPojo(
318 List<SequenceI> seqs, FeatureRenderer fr)
320 displayedFeatures = (fr == null) ? null : fr.getFeaturesDisplayed();
321 List<SequenceFeaturesPojo> sequenceFeaturesPojo = new ArrayList<SequenceFeaturesPojo>();
322 for (SequenceI seq : seqs)
324 SequenceI dataSetSequence = seq.getDatasetSequence();
325 SequenceFeature[] seqFeatures = (dataSetSequence == null) ? null
326 : seq.getDatasetSequence().getSequenceFeatures();
328 seqFeatures = (seqFeatures == null) ? seq.getSequenceFeatures()
330 if (seqFeatures == null)
335 for (SequenceFeature sf : seqFeatures)
337 if (displayedFeatures != null
338 && displayedFeatures.isVisible(sf.getType()))
340 SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo(
341 String.valueOf(seq.hashCode()));
343 String featureColour = (fr == null) ? null : jalview.util.Format
344 .getHexString(fr.findFeatureColour(Color.white, seq,
345 seq.findIndex(sf.getBegin())));
346 jsonFeature.setXstart(seq.findIndex(sf.getBegin()) - 1);
347 jsonFeature.setXend(seq.findIndex(sf.getEnd()));
348 jsonFeature.setType(sf.getType());
349 jsonFeature.setDescription(sf.getDescription());
350 jsonFeature.setLinks(sf.links);
351 jsonFeature.setOtherDetails(sf.otherDetails);
352 jsonFeature.setScore(sf.getScore());
353 jsonFeature.setFillColor(featureColour);
354 jsonFeature.setFeatureGroup(sf.getFeatureGroup());
355 sequenceFeaturesPojo.add(jsonFeature);
359 return sequenceFeaturesPojo;
362 public static List<AlignmentAnnotationPojo> annotationToJsonPojo(
363 Vector<AlignmentAnnotation> annotations, Vector<SequenceI> seqs)
365 List<AlignmentAnnotationPojo> jsonAnnotations = new ArrayList<AlignmentAnnotationPojo>();
366 if (annotations == null)
368 return jsonAnnotations;
370 for (AlignmentAnnotation annot : annotations)
372 AnnotationDisplaySettingPojo annotSetting = new AnnotationDisplaySettingPojo();
373 annotSetting.setBelowAlignment(annot.belowAlignment);
374 annotSetting.setCentreColLabels(annot.centreColLabels);
375 annotSetting.setScaleColLabel(annot.centreColLabels);
376 annotSetting.setShowAllColLabels(annot.showAllColLabels);
377 annotSetting.setVisible(annot.visible);
380 AlignmentAnnotationPojo alignAnnotPojo = new AlignmentAnnotationPojo();
381 alignAnnotPojo.setScore(annot.score);
382 alignAnnotPojo.setCalcId(annot.getCalcId());
383 alignAnnotPojo.setDescription(annot.description);
384 alignAnnotPojo.setLabel(annot.label);
385 alignAnnotPojo.setGraphType(annot.graph);
386 alignAnnotPojo.setAnnotationSettings(annotSetting);
387 int seqHash = setAnnotationRefSeq(annot, seqs);
388 alignAnnotPojo.setSequenceRef(seqHash == 0 ? null : String
390 for (Annotation annotation : annot.annotations)
392 AnnotationPojo annotationPojo = new AnnotationPojo();
393 if (annotation != null)
395 annotationPojo.setDescription(annotation.description);
396 annotationPojo.setValue(annotation.value);
398 .setSecondaryStructure(annotation.secondaryStructure);
399 annotationPojo.setDisplayCharacter(annotation.displayCharacter);
400 if (annotation.colour != null)
402 annotationPojo.setColour(jalview.util.Format
403 .getHexString(annotation.colour));
405 alignAnnotPojo.getAnnotations().add(annotationPojo);
409 if (annot.getCalcId() != null
410 && annot.getCalcId().equalsIgnoreCase(TCOFFEE_SCORE))
416 alignAnnotPojo.getAnnotations().add(null);
420 jsonAnnotations.add(alignAnnotPojo);
422 return jsonAnnotations;
425 private static int setAnnotationRefSeq(AlignmentAnnotation annot,
426 Vector<SequenceI> seqs)
428 if (annot == null || seqs == null || seqs.size() == 0)
432 for (SequenceI seq : seqs)
434 if (seq == null || seq.getAnnotation() == null)
438 for (AlignmentAnnotation seqAnnot : seq.getAnnotation())
440 if (seqAnnot == annot)
442 return seq.hashCode();
448 @SuppressWarnings("unchecked")
449 public JSONFile parse(Reader jsonAlignmentString)
453 JSONParser jsonParser = new JSONParser();
454 JSONObject alignmentJsonObj = (JSONObject) jsonParser
455 .parse(jsonAlignmentString);
456 JSONArray seqJsonArray = (JSONArray) alignmentJsonObj.get("seqs");
457 JSONArray alAnnotJsonArray = (JSONArray) alignmentJsonObj
458 .get("alignAnnotation");
459 JSONArray jsonSeqArray = (JSONArray) alignmentJsonObj
461 JSONArray seqGrpJsonArray = (JSONArray) alignmentJsonObj
463 JSONObject jvSettingsJsonObj = (JSONObject) alignmentJsonObj
466 if (jvSettingsJsonObj != null)
468 globalColourScheme = (String) jvSettingsJsonObj
469 .get("globalColorScheme");
470 Boolean showFeatures = Boolean.valueOf(jvSettingsJsonObj.get(
471 "showSeqFeatures").toString());
472 setShowSeqFeatures(showFeatures);
473 parseHiddenSeqRefsAsList(jvSettingsJsonObj);
474 parseHiddenCols(jvSettingsJsonObj);
477 hiddenSequences = new ArrayList<SequenceI>();
478 seqMap = new Hashtable<String, Sequence>();
479 for (Iterator<JSONObject> sequenceIter = seqJsonArray.iterator(); sequenceIter
482 JSONObject sequence = sequenceIter.next();
483 String sequcenceString = sequence.get("seq").toString();
484 String sequenceName = sequence.get("name").toString();
485 String seqUniqueId = sequence.get("id").toString();
486 int start = Integer.valueOf(sequence.get("start").toString());
487 int end = Integer.valueOf(sequence.get("end").toString());
488 Sequence seq = new Sequence(sequenceName, sequcenceString, start,
490 if (hiddenSeqRefs != null && hiddenSeqRefs.contains(seqUniqueId))
492 hiddenSequences.add(seq);
495 seqMap.put(seqUniqueId, seq);
499 parseFeatures(jsonSeqArray);
501 for (Iterator<JSONObject> seqGrpIter = seqGrpJsonArray.iterator(); seqGrpIter
504 JSONObject seqGrpObj = seqGrpIter.next();
505 String grpName = seqGrpObj.get("groupName").toString();
506 String colourScheme = seqGrpObj.get("colourScheme").toString();
507 String description = (seqGrpObj.get("description") == null) ? null
508 : seqGrpObj.get("description").toString();
509 boolean displayBoxes = Boolean.valueOf(seqGrpObj
510 .get("displayBoxes").toString());
511 boolean displayText = Boolean.valueOf(seqGrpObj.get("displayText")
513 boolean colourText = Boolean.valueOf(seqGrpObj.get("colourText")
515 boolean showNonconserved = Boolean.valueOf(seqGrpObj.get(
516 "showNonconserved").toString());
517 int startRes = Integer
518 .valueOf(seqGrpObj.get("startRes").toString());
519 int endRes = Integer.valueOf(seqGrpObj.get("endRes").toString());
520 JSONArray sequenceRefs = (JSONArray) seqGrpObj.get("sequenceRefs");
522 ArrayList<SequenceI> grpSeqs = new ArrayList<SequenceI>();
523 if (sequenceRefs.size() > 0)
525 Iterator<String> seqHashIter = sequenceRefs.iterator();
526 while (seqHashIter.hasNext())
528 String seqHash = seqHashIter.next();
529 Sequence sequence = seqMap.get(seqHash);
530 if (sequence != null)
532 grpSeqs.add(sequence);
536 SequenceGroup seqGrp = new SequenceGroup(grpSeqs, grpName, null,
537 displayBoxes, displayText, colourText,
539 seqGrp.cs = ColourSchemeMapper.getJalviewColourScheme(colourScheme,
541 seqGrp.setShowNonconserved(showNonconserved);
542 seqGrp.setDescription(description);
543 this.seqGroups.add(seqGrp);
547 for (Iterator<JSONObject> alAnnotIter = alAnnotJsonArray.iterator(); alAnnotIter
550 JSONObject alAnnot = alAnnotIter.next();
555 JSONObject diplaySettings = (JSONObject) alAnnot
556 .get("annotationSettings");
558 JSONArray annotJsonArray = (JSONArray) alAnnot.get("annotations");
559 Annotation[] annotations = new Annotation[annotJsonArray.size()];
561 String calcId = alAnnot.get("calcId") == null ? "" : alAnnot.get(
562 "calcId").toString();
563 for (Iterator<JSONObject> annotIter = annotJsonArray.iterator(); annotIter
566 JSONObject annot = annotIter.next();
569 annotations[count] = null;
573 float val = annot.get("value") == null ? null : Float
574 .valueOf(annot.get("value").toString());
575 String desc = annot.get("description") == null ? null : annot
576 .get("description").toString();
577 char ss = annot.get("secondaryStructure") == null
578 || annot.get("secondaryStructure").toString()
579 .equalsIgnoreCase("u0000") ? ' ' : annot
580 .get("secondaryStructure").toString().charAt(0);
581 String displayChar = annot.get("displayCharacter") == null ? ""
582 : annot.get("displayCharacter").toString();
583 Color color = annot.get("colour") == null ? Color.white
584 : UserColourScheme.getColourFromString(annot.get(
585 "colour").toString());
586 annotations[count] = new Annotation(displayChar, desc, ss, val,
592 AlignmentAnnotation alignAnnot = new AlignmentAnnotation(alAnnot
593 .get("label").toString(), alAnnot.get("description")
594 .toString(), annotations);
595 alignAnnot.graph = (alAnnot.get("graphType") == null) ? 0 : Integer
596 .valueOf(alAnnot.get("graphType")
598 alignAnnot.scaleColLabel = (diplaySettings.get("scaleColLabel") == null) ? false
599 : Boolean.valueOf(diplaySettings.get("scaleColLabel")
601 alignAnnot.showAllColLabels = (diplaySettings
602 .get("showAllColLabels") == null) ? true : Boolean
603 .valueOf(diplaySettings.get("showAllColLabels").toString());
604 alignAnnot.centreColLabels = (diplaySettings.get("centreColLabels") == null) ? true
605 : Boolean.valueOf(diplaySettings.get("centreColLabels")
607 alignAnnot.belowAlignment = (diplaySettings.get("belowAlignment") == null) ? false
608 : Boolean.valueOf(diplaySettings.get("belowAlignment")
610 alignAnnot.visible = (diplaySettings.get("visible") == null) ? true
611 : Boolean.valueOf(diplaySettings.get("visible").toString());
614 alignAnnot.score = alAnnot.get("score") == null ? null : Double
615 .valueOf(alAnnot.get("score").toString());
616 alignAnnot.setCalcId(calcId);
617 String seqHash = (alAnnot.get("sequenceRef") != null) ? alAnnot
618 .get("sequenceRef").toString() : null;
620 Sequence sequence = (seqHash != null) ? seqMap.get(seqHash) : null;
621 if (sequence != null)
623 alignAnnot.sequenceRef = sequence;
624 sequence.addAlignmentAnnotation(alignAnnot);
625 if (alignAnnot.label.equalsIgnoreCase("T-COFFEE"))
627 alignAnnot.createSequenceMapping(sequence, sequence.getStart(),
629 sequence.addAlignmentAnnotation(alignAnnot);
630 alignAnnot.adjustForAlignment();
633 this.annotations.add(alignAnnot);
634 alignAnnot.validateRangeAndDisplay();
636 } catch (Exception e)
643 public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson)
645 hiddenSeqRefs = new ArrayList<String>();
646 String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs");
647 if (hiddenSeqs != null && !hiddenSeqs.isEmpty())
649 String[] seqRefs = hiddenSeqs.split(";");
650 for (String seqRef : seqRefs)
652 hiddenSeqRefs.add(seqRef);
657 public void parseHiddenCols(JSONObject jvSettingsJson)
659 String hiddenCols = (String) jvSettingsJson.get("hiddenCols");
660 if (hiddenCols != null && !hiddenCols.isEmpty())
662 columnSelection = new ColumnSelection();
663 String[] rangeStrings = hiddenCols.split(";");
664 for (String rangeString : rangeStrings)
666 String[] range = rangeString.split("-");
667 columnSelection.hideColumns(Integer.valueOf(range[0]),
668 Integer.valueOf(range[1]));
673 @SuppressWarnings("unchecked")
674 private void parseFeatures(JSONArray jsonSeqFeatures)
676 if (jsonSeqFeatures != null)
678 displayedFeatures = new FeaturesDisplayed();
679 for (Iterator<JSONObject> seqFeatureItr = jsonSeqFeatures.iterator(); seqFeatureItr
682 JSONObject jsonFeature = seqFeatureItr.next();
683 Long begin = (Long) jsonFeature.get("xStart");
684 Long end = (Long) jsonFeature.get("xEnd");
685 String type = (String) jsonFeature.get("type");
686 String featureGrp = (String) jsonFeature.get("featureGroup");
687 String descripiton = (String) jsonFeature.get("description");
688 String seqRef = (String) jsonFeature.get("sequenceRef");
689 Float score = Float.valueOf(jsonFeature.get("score").toString());
691 Sequence seq = seqMap.get(seqRef);
692 SequenceFeature sequenceFeature = new SequenceFeature();
693 JSONArray linksJsonArray = (JSONArray) jsonFeature.get("links");
694 if (linksJsonArray != null && linksJsonArray.size() > 0)
696 Iterator<String> linkList = linksJsonArray.iterator();
697 while (linkList.hasNext())
699 String link = linkList.next();
700 sequenceFeature.addLink(link);
703 sequenceFeature.setFeatureGroup(featureGrp);
704 sequenceFeature.setScore(score);
705 sequenceFeature.setDescription(descripiton);
706 sequenceFeature.setType(type);
707 sequenceFeature.setBegin(seq.findPosition(begin.intValue()));
708 sequenceFeature.setEnd(seq.findPosition(end.intValue()) - 1);
709 seq.addSequenceFeature(sequenceFeature);
710 displayedFeatures.setVisible(type);
715 public String getGlobalColourScheme()
717 return globalColourScheme;
720 public void setGlobalColorScheme(String globalColourScheme)
722 this.globalColourScheme = globalColourScheme;
726 public FeaturesDisplayedI getDisplayedFeatures()
728 return displayedFeatures;
731 public void setDisplayedFeatures(FeaturesDisplayedI displayedFeatures)
733 this.displayedFeatures = displayedFeatures;
736 public void configureForView(AlignmentViewPanel avpanel)
738 super.configureForView(avpanel);
739 AlignViewportI viewport = avpanel.getAlignViewport();
740 AlignmentI alignment = viewport.getAlignment();
741 AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation();
743 seqGroups = alignment.getGroups();
744 fr = avpanel.cloneFeatureRenderer();
746 // Add non auto calculated annotation to AlignFile
747 for (AlignmentAnnotation annot : annots)
749 if (annot != null && !annot.autoCalculated)
751 annotations.add(annot);
754 globalColourScheme = ColourSchemeProperty.getColourName(viewport
755 .getGlobalColourScheme());
756 setDisplayedFeatures(viewport.getFeaturesDisplayed());
757 showSeqFeatures = viewport.isShowSequenceFeatures();
761 public boolean isShowSeqFeatures()
763 return showSeqFeatures;
766 public void setShowSeqFeatures(boolean showSeqFeatures)
768 this.showSeqFeatures = showSeqFeatures;
771 public Vector<AlignmentAnnotation> getAnnotations()
776 public List<int[]> getHiddenColumns()
778 return hiddenColumns;
781 public ColumnSelection getColumnSelection()
783 return columnSelection;
786 public void setColumnSelection(ColumnSelection columnSelection)
788 this.columnSelection = columnSelection;
791 public SequenceI[] getHiddenSequences()
793 if (hiddenSequences == null || hiddenSequences.isEmpty())
795 return new SequenceI[] {};
797 synchronized (hiddenSequences)
799 return hiddenSequences.toArray(new SequenceI[hiddenSequences.size()]);
803 public void setHiddenSequences(ArrayList<SequenceI> hiddenSequences)
805 this.hiddenSequences = hiddenSequences;
808 public class JSONExportSettings
810 private boolean exportSequence;
812 private boolean exportSequenceFeatures;
814 private boolean exportAnnotations;
816 private boolean exportGroups;
818 private boolean exportJalviewSettings;
820 public boolean isExportSequence()
822 return exportSequence;
825 public void setExportSequence(boolean exportSequence)
827 this.exportSequence = exportSequence;
830 public boolean isExportSequenceFeatures()
832 return exportSequenceFeatures;
835 public void setExportSequenceFeatures(boolean exportSequenceFeatures)
837 this.exportSequenceFeatures = exportSequenceFeatures;
840 public boolean isExportAnnotations()
842 return exportAnnotations;
845 public void setExportAnnotations(boolean exportAnnotations)
847 this.exportAnnotations = exportAnnotations;
850 public boolean isExportGroups()
855 public void setExportGroups(boolean exportGroups)
857 this.exportGroups = exportGroups;
860 public boolean isExportJalviewSettings()
862 return exportJalviewSettings;
865 public void setExportJalviewSettings(boolean exportJalviewSettings)
867 this.exportJalviewSettings = exportJalviewSettings;