001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021package org.biojava.bio.program.fastq;
022
023/**
024 * FASTQ formatted sequence.
025 *
026 * @since 1.7.1
027 */
028public final class Fastq
029{
030    /** Description of this FASTQ formatted sequence. */
031    private final String description;
032
033    /** Sequence for this FASTQ formatted sequence. */
034    private final String sequence;
035
036    /** Quality scores for this FASTQ formatted sequence. */
037    private final String quality;
038
039    /** FASTQ sequence format variant for this FASTQ formatted sequence. */
040    private final FastqVariant variant;
041
042
043    /**
044     * Create a new FASTQ formatted sequence from the specified description, sequence, quality scores,
045     * and sequence format variant.
046     *
047     * @param description description of this FASTQ formatted sequence, must not be null
048     * @param sequence sequence for this FASTQ formatted sequence, must not be null
049     * @param quality quality scores for this FASTQ formatted sequence, must not be null
050     * @param variant FASTQ sequence format variant for this FASTQ formatted sequence, must not be null
051     */
052    Fastq(final String description,
053          final String sequence,
054          final String quality,
055          final FastqVariant variant)
056    {
057        if (description == null)
058        {
059            throw new IllegalArgumentException("description must not be null");
060        }
061        if (sequence == null)
062        {
063            throw new IllegalArgumentException("sequence must not be null");
064        }
065        if (quality == null)
066        {
067            throw new IllegalArgumentException("quality must not be null");
068        }
069        if (variant == null)
070        {
071            throw new IllegalArgumentException("variant must not be null");
072        }
073        this.description = description;
074        this.sequence = sequence;
075        this.quality = quality;
076        this.variant = variant;
077    }
078
079
080    /**
081     * Return the description of this FASTQ formatted sequence.
082     * The description will not be null.
083     *
084     * @return the description of this FASTQ formatted sequence
085     */
086    public String getDescription()
087    {
088        return description;
089    }
090
091    /**
092     * Return the sequence for this FASTQ formatted sequence.
093     * The sequence will not be null.
094     *
095     * @return the sequence for this FASTQ formatted sequence
096     */
097    public String getSequence()
098    {
099        return sequence;
100    }
101
102    /**
103     * Return the quality scores for this FASTQ formatted sequence.
104     * The quality scores will not be null.
105     *
106     * @return the quality scores for this FASTQ formatted sequence
107     */
108    public String getQuality()
109    {
110        return quality;
111    }
112
113    /**
114     * Return the FASTQ sequence format variant for this FASTQ formatted sequence.
115     * The FASTQ sequence format variant will not be null.
116     *
117     * @return the FASTQ sequence format variant for this FASTQ formatted sequence
118     */
119    public FastqVariant getVariant()
120    {
121        return variant;
122    }
123
124    /**
125     * Create and return a new FastqBuilder.
126     * The FastqBuilder will not be null.
127     *
128     * @return a new FastqBuilder
129     */
130    public static final FastqBuilder builder()
131    {
132        return new FastqBuilder();
133    }
134}