001    package calhoun.analysis.crf.io;
002    
003    import java.util.Collection;
004    
005    import calhoun.util.Assert;
006    
007    /** input sequence that captures the 'name' of a sequence.  This is useful for display or for tracking outputs,
008     * but usually won't be used by the engine.  The full sequence name is returned as the data element for every position.
009     * In this respect it is not really a sequence.<p>
010     * This feature has some special properties that allow sequences to be tracked as they are subsetted.
011     * When subsetting a <code>NameInputSequence</code>, a string is append to the name showing the start and stop (one-based
012     * inclusive) of the subsetting.  For example, if the sequence with name "CND1" is subsetting to based 201 to 1000, then
013     * the new name will be "CND1:201-1000".  To avoid repetitive subsetting, the NameInput does not allow subsetting on names
014     * containing a '-'.
015     */
016    public class NameInputSequence implements InputSequence<String>  {
017            String str;
018    
019            /** default constructor */
020            public NameInputSequence() { }
021            
022            /** constructors an input sequence using this name */
023            public NameInputSequence(String a) {
024                    str = a;
025            }
026            
027            public String getName() {
028                    return str;
029            }
030    
031            public String getX(int ix) {
032                    return str;
033            }
034    
035            public int length() {
036                    return -1;
037            }
038    
039            public InputSequence<?> getComponent(String name) {
040                    throw new UnsupportedOperationException();
041            }
042    
043            public Collection<String> listComponents() {
044                    throw new UnsupportedOperationException();
045            }
046    
047            public InputSequence<String> subSequence(int start, int end)  {
048                    Assert.a(!str.contains("-"));
049                    NameInputSequence n = new NameInputSequence(str + ":" + start + "-" + end);
050                    return n;
051            }
052    }