+ public static AlignmentExportData getAlignmentForExport(
+ String exportFormat, AlignViewportI viewport,
+ AlignExportSettingI exportSettings)
+ {
+ AlignmentI alignmentToExport = null;
+ AlignExportSettingI settings = exportSettings;
+ 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;
+ if (settings == null)
+ {
+ settings = new AlignExportSettings(hasHiddenSeqs,
+ viewport.hasHiddenColumns(), exportFormat);
+ }
+ // 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;
+ }
+
+ public static int[] getStartEnd(int[] aligmentStartEnd,
+ List<int[]> hiddenCols)
+ {
+ int startPos = aligmentStartEnd[0];
+ int endPos = aligmentStartEnd[1];
+
+ int[] lowestRange = new int[] { -1, -1 };
+ int[] higestRange = new int[] { -1, -1 };
+
+ for (int[] hiddenCol : hiddenCols)
+ {
+ lowestRange = (hiddenCol[0] <= startPos) ? hiddenCol : lowestRange;
+ higestRange = (hiddenCol[1] >= endPos) ? hiddenCol : higestRange;
+ }
+
+ if (lowestRange[0] == -1 && lowestRange[1] == -1)
+ {
+ startPos = aligmentStartEnd[0];
+ }
+ else
+ {
+ startPos = lowestRange[1] + 1;
+ }
+
+ if (higestRange[0] == -1 && higestRange[1] == -1)
+ {
+ endPos = aligmentStartEnd[1];
+ }
+ else
+ {
+ endPos = higestRange[0] - 1;
+ }
+
+ // System.out.println("Export range : " + startPos + " - " + endPos);
+ return new int[] { startPos, endPos };
+ }
+
+ public static void main(String[] args)
+ {
+ ArrayList<int[]> hiddenCols = new ArrayList<int[]>();
+ hiddenCols.add(new int[] { 0, 0 });
+ hiddenCols.add(new int[] { 6, 9 });
+ hiddenCols.add(new int[] { 11, 12 });
+ hiddenCols.add(new int[] { 33, 33 });
+ hiddenCols.add(new int[] { 50, 50 });
+
+ int[] x = getStartEnd(new int[] { 0, 50 }, hiddenCols);
+ // System.out.println("Export range : " + x[0] + " - " + x[1]);
+ }
+