/* * Copyright 2015 MiLaboratory.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.milaboratory.util; import com.milaboratory.core.sequence.NSequenceWithQuality; import java.util.Arrays; public class NSequenceWithQualityPrintHelper { final NSequenceWithQuality seq; final int offset, lineLength; final int linesCount; public NSequenceWithQualityPrintHelper(NSequenceWithQuality seq, int offset, int lineLength) { this.seq = seq; this.offset = offset; this.lineLength = lineLength; this.linesCount = (seq.size() + lineLength - 1) / lineLength; } public int getLinesCount() { return linesCount; } public String getSequenceLine(int lineIndex) { int initialPosition = (lineIndex * lineLength); String initialPositionStr = "" + initialPosition; int numberOfspaces = offset - 1 - initialPositionStr.length(); int finalPosition = Math.min(initialPosition + lineLength, seq.size()); StringBuilder sb = new StringBuilder(); sb.append(spaces(numberOfspaces)); sb.append(initialPositionStr); sb.append(" "); sb.append(seq.getSequence().getRange(initialPosition, finalPosition)); sb.append(" "); sb.append(finalPosition - 1); return sb.toString(); } public String getQualityLine(int lineIndex) { int initialPosition = lineIndex * lineLength; int finalPosition = Math.min(initialPosition + lineLength, seq.size()); StringBuilder sb = new StringBuilder(); sb.append(spaces(offset)); sb.append(seq.getQuality().getRange(initialPosition, finalPosition)); return sb.toString(); } private static String spaces(int n) { char[] c = new char[n]; Arrays.fill(c, ' '); return String.valueOf(c); } @Override public String toString() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < linesCount; ++i) { sb.append(getSequenceLine(i)); sb.append("\n"); sb.append(getQualityLine(i)); sb.append("\n"); sb.append("\n"); } return sb.toString(); } }