001    package calhoun.analysis.crf.io;
002    
003    import java.io.IOException;
004    import java.util.ArrayList;
005    import java.util.Iterator;
006    import java.util.List;
007    import java.util.Map;
008    
009    /** Utility class to abstract out some of the common behavior for {@link InputHandler}s.
010     */
011    public abstract class InputHandlerBase implements InputHandler {
012            private static final long serialVersionUID = 4002620265503458109L;
013    
014            Iterator<? extends InputSequence<?>> createCompositeInput(List<Map<String, InputSequence<?>>> inputs) {
015                    // Create a composite input
016                    List<InputSequenceComposite> ret = new ArrayList();
017                    for(Map<String, InputSequence<?>> input : inputs) {
018                            ret.add(new InputSequenceComposite(input));
019                    }
020                    return ret.iterator();
021                    
022            }
023            
024            List<? extends TrainingSequence<?>> readTrainingData(String location, String trainingLocation, TrainingSequenceIO hiddenStateReader, boolean predict) throws IOException {
025                    Iterator<? extends InputSequence<Map<String, Object>>> inputIter = (Iterator<? extends InputSequence<Map<String, Object>>>) readInputData(location);
026                    
027                    List<TrainingSequence<Map<String, Object>>> ret = new ArrayList<TrainingSequence<Map<String, Object>>>();
028                    while(inputIter.hasNext()) {
029                            ret.add(new TrainingSequence(inputIter.next()));
030                    }
031                    
032                    TrainingSequenceIO readerToUse;
033                    if (predict) {
034                            readerToUse = new AllIntergenicHiddenStateReader();
035                    } else {
036                            readerToUse = hiddenStateReader;
037                    }
038                    
039                    readerToUse.readTrainingSequences(trainingLocation, ret);
040                    return ret;
041            }
042    
043    }