X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FAnnotationFile.java;h=8706ad5d3154443552e74ecfb840bfbfef1e0058;hb=refs%2Fheads%2Fj2s%2Fdevelop;hp=6834e7645b8bf1bcef81e0799cd01dee8bb7895d;hpb=8d6b113f475c6b5916f7685cfd289e054d95a9ee;p=jalview.git diff --git a/src/jalview/io/AnnotationFile.java b/src/jalview/io/AnnotationFile.java index 6834e76..8706ad5 100755 --- a/src/jalview/io/AnnotationFile.java +++ b/src/jalview/io/AnnotationFile.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -34,6 +34,8 @@ import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; import jalview.schemes.ResidueProperties; import jalview.schemes.UserColourScheme; +import jalview.util.Comparison; +import jalview.util.Format; import java.io.BufferedReader; import java.io.FileReader; @@ -88,8 +90,8 @@ public class AnnotationFile } /** - * convenience method for pre-2.9 annotation files which have no view, hidden - * columns or hidden row keywords. + * convenience method for pre-2.8.3 annotation files which have no view, + * hidden columns or hidden row keywords. * * @param annotations * @param list @@ -99,7 +101,7 @@ public class AnnotationFile public String printAnnotations(AlignmentAnnotation[] annotations, List list, Hashtable properties) { - return printAnnotations(annotations, list, properties, null); + return printAnnotations(annotations, list, properties, null, null, null); } @@ -140,16 +142,56 @@ public class AnnotationFile * @return annotation file */ public String printAnnotations(AlignmentAnnotation[] annotations, - List list, Hashtable properties, ViewDef[] views) + List list, Hashtable properties, + ColumnSelection cs, AlignmentI al, ViewDef view) { - // TODO: resolve views issue : annotationFile could contain visible region, - // or full data + hidden region specifications for a view. - if (views != null) + if (view != null) { - // are views defined and then annotation added to alignment or the other - // way around ? - + if (view.viewname != null) + { + text.append("VIEW_DEF\t" + view.viewname + "\n"); + } + if (list == null) + { + list = view.visibleGroups; + } + if (cs == null) + { + cs = view.hiddencols; + } + if (al == null) + { + // add hidden rep sequences. + } + } + // first target - store and restore all settings for a view. + if (al != null && al.hasSeqrep()) + { + text.append("VIEW_SETREF\t" + al.getSeqrep().getName() + "\n"); } + if (cs != null && cs.hasHiddenColumns()) + { + text.append("VIEW_HIDECOLS\t"); + List hc = cs.getHiddenColumns(); + boolean comma = false; + for (int[] r : hc) + { + if (!comma) + { + comma = true; + } + else + { + text.append(","); + } + text.append(r[0]); + text.append("-"); + text.append(r[1]); + } + text.append("\n"); + } + // TODO: allow efficient recovery of annotation data shown in several + // different views if (annotations != null) { boolean oneColour = true; @@ -238,8 +280,8 @@ public class AnnotationFile graphLine.append("\t"); graphLine.append(row.getThreshold().label); graphLine.append("\t"); - graphLine.append(jalview.util.Format.getHexString(row - .getThreshold().colour)); + graphLine + .append(Format.getHexString(row.getThreshold().colour)); graphLine.append(newline); } @@ -270,7 +312,7 @@ public class AnnotationFile && j < row.annotations.length; j++) { if (refSeq != null - && jalview.util.Comparison.isGap(refSeq.getCharAt(j))) + && Comparison.isGap(refSeq.getCharAt(j))) { continue; } @@ -337,7 +379,7 @@ public class AnnotationFile { text.append(comma + "[" - + jalview.util.Format + + Format .getHexString(row.annotations[j].colour) + "]"); comma = ","; @@ -358,7 +400,7 @@ public class AnnotationFile colours.append("COLOUR\t"); colours.append(row.label); colours.append("\t"); - colours.append(jalview.util.Format.getHexString(color)); + colours.append(Format.getHexString(color)); colours.append(newline); } if (row.scaleColLabel || row.showAllColLabels @@ -432,7 +474,8 @@ public class AnnotationFile text.append(properties.get(key)); } // TODO: output alignment visualization settings here if required - + // iterate through one or more views, defining, marking columns and rows as visible/hidden, and emmitting view properties. + // View specific annotation is } return text.toString(); @@ -556,7 +599,7 @@ public class AnnotationFile } } text.append("outlineColour="); - text.append(jalview.util.Format.getHexString(sg.getOutlineColour())); + text.append(Format.getHexString(sg.getOutlineColour())); text.append("\t"); text.append("displayBoxes="); @@ -574,13 +617,13 @@ public class AnnotationFile if (sg.textColour != java.awt.Color.black) { text.append("textCol1="); - text.append(jalview.util.Format.getHexString(sg.textColour)); + text.append(Format.getHexString(sg.textColour)); text.append("\t"); } if (sg.textColour2 != java.awt.Color.white) { text.append("textCol2="); - text.append(jalview.util.Format.getHexString(sg.textColour2)); + text.append(Format.getHexString(sg.textColour2)); text.append("\t"); } if (sg.thresholdTextColour != 0) @@ -592,7 +635,7 @@ public class AnnotationFile if (sg.idColour != null) { text.append("idColour="); - text.append(jalview.util.Format.getHexString(sg.idColour)); + text.append(Format.getHexString(sg.idColour)); text.append("\t"); } if (sg.isHidereps()) @@ -888,6 +931,12 @@ public class AnnotationFile modified = true; continue; } + // else if (token.equalsIgnoreCase("VIEW_DEF")) + // { + // addOrSetView(al,st); + // modified = true; + // continue; + // } else if (token.equalsIgnoreCase("VIEW_SETREF")) { if (refSeq != null) @@ -897,6 +946,19 @@ public class AnnotationFile modified = true; continue; } + else if (token.equalsIgnoreCase("VIEW_HIDECOLS")) + { + if (st.hasMoreTokens()) + { + if (colSel == null) + { + colSel = new ColumnSelection(); + } + parseHideCols(colSel, st.nextToken()); + } + modified = true; + continue; + } else if (token.equalsIgnoreCase("HIDE_INSERTIONS")) { SequenceI sr = refSeq == null ? al.getSeqrep() : refSeq; @@ -1121,6 +1183,40 @@ public class AnnotationFile return modified; } + private void parseHideCols(ColumnSelection colSel, String nextToken) + { + StringTokenizer inval = new StringTokenizer(nextToken,","); + while (inval.hasMoreTokens()) + { + String range = inval.nextToken().trim(); + int from, to = range.indexOf("-"); + if (to == -1) + { + from = to = Integer.parseInt(range); + if (from >= 0) + { + colSel.hideColumns(from, to); + } + } + else + { + from = Integer.parseInt(range.substring(0, to)); + if (to < range.length() - 1) + { + to = Integer.parseInt(range.substring(to + 1)); + } + else + { + to = from; + } + if (from > 0 && to >= from) + { + colSel.hideColumns(from, to); + } + } + } + } + private Object autoAnnotsKey(AlignmentAnnotation annotation, SequenceI refSeq, String groupRef) { @@ -1697,12 +1793,13 @@ public class AnnotationFile return printAnnotations(viewport.isShowAnnotation() ? viewport .getAlignment().getAlignmentAnnotation() : null, viewport .getAlignment().getGroups(), viewport.getAlignment() - .getProperties()); + .getProperties(), viewport.getColumnSelection(), + viewport.getAlignment(), null); } public String printAnnotationsForAlignment(AlignmentI al) { return printAnnotations(al.getAlignmentAnnotation(), al.getGroups(), - al.getProperties()); + al.getProperties(), null, al, null); } }