001    package calhoun.analysis.crf.io;
002    
003    import java.io.IOException;
004    import java.util.ArrayList;
005    import java.util.HashMap;
006    import java.util.List;
007    import java.util.Map;
008    
009    import calhoun.seq.FastaIterator;
010    import calhoun.seq.FastaSequence;
011    import calhoun.seq.FastaWriter;
012    import calhoun.util.Assert;
013    
014    public class FastaInput implements InputComponentIO {
015            private static final long serialVersionUID = 760405914814389112L;
016    
017            String header;
018            String sequence;
019            Integer numSeqCap = Integer.MAX_VALUE;
020    
021            public List<String> getComponentNames() {
022                    List<String> ret = new ArrayList();
023                    ret.add(header);
024                    ret.add(sequence);
025                    return ret;
026            }
027    
028            public void readInputSequences(String location, List<Map<String, InputSequence<?>>> inputs) throws IOException {
029                    FastaIterator it = new FastaIterator(location);
030                    Assert.a(inputs.size() == 0, "Fasta input always has to go first in the list.");
031                    int i = 0;
032                    if (numSeqCap == null) {
033                            numSeqCap = Integer.MAX_VALUE;
034                    }
035                    while(it.hasNext() && i < numSeqCap.intValue()) {
036                            FastaSequence seq = (FastaSequence) it.next();
037                            Map<String, InputSequence<?>> input = new HashMap();
038                            input.put(header, new NameInputSequence(seq.getHeader()));
039                            input.put(sequence, new InputSequenceCharacter(seq.getSequence().toUpperCase()));
040                            inputs.add(input);
041                            i++;
042                    }
043            }
044    
045            public void writeInputSequences(String location, List<? extends Map<String, ? extends InputSequence<?>>> inputComponents) throws IOException {
046                    FastaWriter w = new FastaWriter(location, false);
047                    for(Map<String, ? extends InputSequence<?>> input : inputComponents) {
048                            NameInputSequence nameSeq = (NameInputSequence) input.get(header);
049                            InputSequenceCharacter seqSeq = (InputSequenceCharacter) input.get(sequence);
050                            w.writeSeq(nameSeq.getName(), seqSeq.getString());
051                    }
052                    
053                    w.close();
054            }
055    
056            /**
057             * @return Returns the header.
058             */
059            public String getHeader() {
060                    return header;
061            }
062            /**
063             * @param header The header to set.
064             */
065            public void setHeader(String header) {
066                    this.header = header;
067            }
068            /**
069             * @return Returns the sequence.
070             */
071            public String getSequence() {
072                    return sequence;
073            }
074            /**
075             * @param sequence The sequence to set.
076             */
077            public void setSequence(String sequence) {
078                    this.sequence = sequence;
079            }
080            
081            public Integer getNumSeqCap() {
082                    return numSeqCap;
083            }
084            
085            public void setNumSeqCap(Integer numSeqCap) {
086                    this.numSeqCap = numSeqCap; 
087            }
088    }