X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJSONFile.java;h=36fe35ac71b5ffdcff7b2d0ad82cc1e309448a84;hb=d065bc916cb63af83cdab7319f5177a855724aba;hp=0d6e02f853f2d1df0c41825e8ae54d04f966b97b;hpb=e28854ac11c339662d931324c32d89aca3313ed9;p=jalview.git diff --git a/src/jalview/io/JSONFile.java b/src/jalview/io/JSONFile.java index 0d6e02f..36fe35a 100644 --- a/src/jalview/io/JSONFile.java +++ b/src/jalview/io/JSONFile.java @@ -32,7 +32,7 @@ import jalview.bin.BuildDetails; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; -import jalview.datamodel.ColumnSelection; +import jalview.datamodel.HiddenColumns; import jalview.datamodel.HiddenSequences; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceFeature; @@ -51,6 +51,7 @@ import jalview.schemes.ColourSchemeProperty; import jalview.schemes.JalviewColourScheme; import jalview.schemes.ResidueColourScheme; import jalview.util.ColorUtils; +import jalview.util.Format; import jalview.viewmodel.seqfeatures.FeaturesDisplayed; import java.awt.Color; @@ -84,9 +85,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile private FeatureRenderer fr; - private List hiddenColumns; - - private ColumnSelection columnSelection; + private HiddenColumns hiddenColumns; private List hiddenSeqRefs; @@ -230,8 +229,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile if (exportSettings.isExportFeatures()) { - jsonAlignmentPojo - .setSeqFeatures(sequenceFeatureToJsonPojo(sqs, fr)); + jsonAlignmentPojo.setSeqFeatures(sequenceFeatureToJsonPojo(sqs)); } if (exportSettings.isExportGroups() && seqGroups != null @@ -281,17 +279,8 @@ public class JSONFile extends AlignFile implements ComplexAlignFile // 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(); + hiddenSections[0] = getViewport().getAlignment().getHiddenColumns() + .regionsToString(";", "-"); } // hidden rows/seqs business @@ -320,11 +309,11 @@ public class JSONFile extends AlignFile implements ComplexAlignFile return hiddenSections; } - public List sequenceFeatureToJsonPojo( - SequenceI[] sqs, FeatureRenderer fr) + protected List sequenceFeatureToJsonPojo( + SequenceI[] sqs) { displayedFeatures = (fr == null) ? null : fr.getFeaturesDisplayed(); - List sequenceFeaturesPojo = new ArrayList(); + List sequenceFeaturesPojo = new ArrayList<>(); if (sqs == null) { return sequenceFeaturesPojo; @@ -332,41 +321,38 @@ public class JSONFile extends AlignFile implements ComplexAlignFile FeatureColourFinder finder = new FeatureColourFinder(fr); + String[] visibleFeatureTypes = displayedFeatures == null ? null + : displayedFeatures.getVisibleFeatures().toArray( + new String[displayedFeatures.getVisibleFeatureCount()]); + 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; - } - + /* + * get all features currently visible (and any non-positional features) + */ + List seqFeatures = seq.getFeatures().getAllFeatures( + visibleFeatureTypes); for (SequenceFeature sf : seqFeatures) { - if (displayedFeatures != null - && displayedFeatures.isVisible(sf.getType())) - { - SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo( - String.valueOf(seq.hashCode())); - - String featureColour = (fr == null) ? null : jalview.util.Format - .getHexString(finder.findFeatureColour(Color.white, seq, - seq.findIndex(sf.getBegin()))); - jsonFeature.setXstart(seq.findIndex(sf.getBegin()) - 1); - jsonFeature.setXend(seq.findIndex(sf.getEnd())); - jsonFeature.setType(sf.getType()); - jsonFeature.setDescription(sf.getDescription()); - jsonFeature.setLinks(sf.links); - jsonFeature.setOtherDetails(sf.otherDetails); - jsonFeature.setScore(sf.getScore()); - jsonFeature.setFillColor(featureColour); - jsonFeature.setFeatureGroup(sf.getFeatureGroup()); - sequenceFeaturesPojo.add(jsonFeature); - } + SequenceFeaturesPojo jsonFeature = new SequenceFeaturesPojo( + String.valueOf(seq.hashCode())); + + 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()); + jsonFeature.setXstart(xStart); + jsonFeature.setXend(xEnd); + jsonFeature.setType(sf.getType()); + jsonFeature.setDescription(sf.getDescription()); + jsonFeature.setLinks(sf.links); + jsonFeature.setOtherDetails(sf.otherDetails); + jsonFeature.setScore(sf.getScore()); + jsonFeature.setFillColor(featureColour); + jsonFeature.setFeatureGroup(sf.getFeatureGroup()); + sequenceFeaturesPojo.add(jsonFeature); } } return sequenceFeaturesPojo; @@ -375,7 +361,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile public static List annotationToJsonPojo( Vector annotations) { - List jsonAnnotations = new ArrayList(); + List jsonAnnotations = new ArrayList<>(); if (annotations == null) { return jsonAnnotations; @@ -472,8 +458,8 @@ public class JSONFile extends AlignFile implements ComplexAlignFile parseHiddenCols(jvSettingsJsonObj); } - hiddenSequences = new ArrayList(); - seqMap = new Hashtable(); + hiddenSequences = new ArrayList<>(); + seqMap = new Hashtable<>(); for (Iterator sequenceIter = seqJsonArray.iterator(); sequenceIter .hasNext();) { @@ -516,7 +502,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile int endRes = Integer.valueOf(seqGrpObj.get("endRes").toString()); JSONArray sequenceRefs = (JSONArray) seqGrpObj.get("sequenceRefs"); - ArrayList grpSeqs = new ArrayList(); + ArrayList grpSeqs = new ArrayList<>(); if (sequenceRefs.size() > 0) { Iterator seqHashIter = sequenceRefs.iterator(); @@ -650,7 +636,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile public void parseHiddenSeqRefsAsList(JSONObject jvSettingsJson) { - hiddenSeqRefs = new ArrayList(); + hiddenSeqRefs = new ArrayList<>(); String hiddenSeqs = (String) jvSettingsJson.get("hiddenSeqs"); if (hiddenSeqs != null && !hiddenSeqs.isEmpty()) { @@ -667,12 +653,12 @@ public class JSONFile extends AlignFile implements ComplexAlignFile String hiddenCols = (String) jvSettingsJson.get("hiddenCols"); if (hiddenCols != null && !hiddenCols.isEmpty()) { - columnSelection = new ColumnSelection(); + hiddenColumns = new HiddenColumns(); String[] rangeStrings = hiddenCols.split(";"); for (String rangeString : rangeStrings) { String[] range = rangeString.split("-"); - columnSelection.hideColumns(Integer.valueOf(range[0]), + hiddenColumns.hideColumns(Integer.valueOf(range[0]), Integer.valueOf(range[1])); } } @@ -697,8 +683,14 @@ public class JSONFile extends AlignFile implements ComplexAlignFile Float score = Float.valueOf(jsonFeature.get("score").toString()); Sequence seq = seqMap.get(seqRef); - int featureBegin = seq.findPosition(begin.intValue()); - int featureEnd = seq.findPosition(end.intValue()) - 1; + + /* + * 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; SequenceFeature sequenceFeature = new SequenceFeature(type, description, featureBegin, featureEnd, score, featureGrp); @@ -791,20 +783,15 @@ public class JSONFile extends AlignFile implements ComplexAlignFile return annotations; } - public List getHiddenColumns() - { - return hiddenColumns; - } - @Override - public ColumnSelection getColumnSelection() + public HiddenColumns getHiddenColumns() { - return columnSelection; + return hiddenColumns; } - public void setColumnSelection(ColumnSelection columnSelection) + public void setHiddenColumns(HiddenColumns hidden) { - this.columnSelection = columnSelection; + this.hiddenColumns = hidden; } @Override