+ public static AlignmentExportData getAlignmentForExport(String exportFomat,
+ AlignViewportI viewport)
+ {
+ AlignmentI alignmentToExport = null;
+ String[] omitHidden = null;
+ int[] alignmentStartEnd = new int[2];
+
+ HiddenSequences hiddenSeqs = viewport.getAlignment()
+ .getHiddenSequences();
+
+
+ alignmentToExport = viewport.getAlignment();
+ alignmentStartEnd = new int[]
+ { 0, alignmentToExport.getWidth() - 1 };
+
+ boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0;
+ AlignExportSettings settings = new AlignExportSettings(hasHiddenSeqs,
+ viewport.hasHiddenColumns(), exportFomat);
+ settings.isExportAnnotations();
+
+ if (viewport.hasHiddenColumns() && !settings.isExportHiddenColumns())
+ {
+ omitHidden = viewport.getViewAsString(false);
+ }
+
+ if (hasHiddenSeqs && settings.isExportHiddenSequences())
+ {
+ alignmentToExport = hiddenSeqs.getFullAlignment();
+ }
+ else
+ {
+ alignmentToExport = viewport.getAlignment();
+ alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
+ .getColumnSelection().getHiddenColumns());
+ }
+ AlignmentExportData ed = new AlignmentExportData(alignmentToExport, omitHidden, alignmentStartEnd,
+ settings);
+ return ed;
+ }
+
+ private static int[] getStartEnd(int[] aligmentStartEnd,
+ List<int[]> hiddenCols)
+ {
+ int startPos = aligmentStartEnd[0];
+ int endPos = aligmentStartEnd[1];
+
+ int[] lowestRange = new int[2];
+ int[] higestRange = new int[2];
+
+ for (int[] hiddenCol : hiddenCols)
+ {
+ // System.out.println("comparing : " + hiddenCol[0] + "-" + hiddenCol[1]);
+
+ lowestRange = (hiddenCol[0] <= startPos) ? hiddenCol : lowestRange;
+ higestRange = (hiddenCol[1] >= endPos) ? hiddenCol : higestRange;
+ }
+ // System.out.println("min : " + lowestRange[0] + "-" + lowestRange[1]);
+ // System.out.println("max : " + higestRange[0] + "-" + higestRange[1]);
+
+ if (lowestRange[0] == 0 && lowestRange[1] == 0)
+ {
+ startPos = aligmentStartEnd[0];
+ }
+ else
+ {
+ startPos = lowestRange[1] + 1;
+ }
+
+ if (higestRange[0] == 0 && higestRange[1] == 0)
+ {
+ endPos = aligmentStartEnd[1];
+ }
+ else
+ {
+ endPos = higestRange[0];
+ }
+
+ // System.out.println("Export range : " + minPos + " - " + maxPos);
+ return new int[]
+ { startPos, endPos };
+ }
+
+ public static void main(String[] args)
+ {
+ ArrayList<int[]> hiddenCols = new ArrayList<int[]>();
+ hiddenCols.add(new int[]
+ { 0, 4 });
+ hiddenCols.add(new int[]
+ { 6, 9 });
+ hiddenCols.add(new int[]
+ { 11, 12 });
+ hiddenCols.add(new int[]
+ { 33, 33 });
+ hiddenCols.add(new int[]
+ { 45, 50 });
+
+ int[] x = getStartEnd(new int[]
+ { 0, 50 }, hiddenCols);
+ // System.out.println("Export range : " + x[0] + " - " + x[1]);
+ }
+