/* * The MIT License * * Copyright (c) 2009 The Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package htsjdk.samtools.fastq; /** * Represents a fastq record, fairly literally, i.e. without any conversion. */ public class FastqRecord { private final String seqHeaderPrefix; private final String seqLine; private final String qualHeaderPrefix; private final String qualLine; public FastqRecord(final String seqHeaderPrefix, final String seqLine, final String qualHeaderPrefix, final String qualLine) { if (seqHeaderPrefix != null && seqHeaderPrefix.length() > 0) this.seqHeaderPrefix = seqHeaderPrefix; else this.seqHeaderPrefix = null; if (qualHeaderPrefix != null && qualHeaderPrefix.length() > 0) this.qualHeaderPrefix = qualHeaderPrefix; else this.qualHeaderPrefix = null; this.seqLine = seqLine ; this.qualLine = qualLine ; } /** @return the read name */ public String getReadHeader() { return seqHeaderPrefix; } /** @return the read DNA sequence */ public String getReadString() { return seqLine; } /** @return the quality header */ public String getBaseQualityHeader() { return qualHeaderPrefix; } /** @return the quality string */ public String getBaseQualityString() { return qualLine; } /** shortcut to getReadString().length() */ public int length() { return this.seqLine==null?0:this.seqLine.length();} @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((qualHeaderPrefix == null) ? 0 : qualHeaderPrefix.hashCode()); result = prime * result + ((qualLine == null) ? 0 : qualLine.hashCode()); result = prime * result + ((seqHeaderPrefix == null) ? 0 : seqHeaderPrefix.hashCode()); result = prime * result + ((seqLine == null) ? 0 : seqLine.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; FastqRecord other = (FastqRecord) obj; if (seqLine == null) { if (other.seqLine != null) return false; } else if (!seqLine.equals(other.seqLine)) return false; if (qualHeaderPrefix == null) { if (other.qualHeaderPrefix != null) return false; } else if (!qualHeaderPrefix.equals(other.qualHeaderPrefix)) return false; if (qualLine == null) { if (other.qualLine != null) return false; } else if (!qualLine.equals(other.qualLine)) return false; if (seqHeaderPrefix == null) { if (other.seqHeaderPrefix != null) return false; } else if (!seqHeaderPrefix.equals(other.seqHeaderPrefix)) return false; return true; } @Override public String toString() { return new StringBuilder(). append(FastqConstants.SEQUENCE_HEADER).append(this.seqHeaderPrefix==null?"":this.seqHeaderPrefix).append('\n'). append(this.seqLine==null?"":this.seqLine).append('\n'). append(FastqConstants.QUALITY_HEADER).append(this.qualHeaderPrefix==null?"":this.qualHeaderPrefix).append('\n'). append(this.qualLine==null?"":this.qualLine). toString(); } }