1 package prefuse.data.parser; 2 3 import java.util.Arrays ; 4 5 16 public class ParserFactory implements Cloneable { 17 18 private static final DataParser[] DEFAULT_PARSERS = 19 new DataParser[] { 20 new IntParser(), 21 new LongParser(), 22 new DoubleParser(), 23 new FloatParser(), 24 new BooleanParser(), 25 new ColorIntParser(), 26 new DateParser(), 27 new TimeParser(), 28 new DateTimeParser(), 29 new IntArrayParser(), 30 new LongArrayParser(), 31 new FloatArrayParser(), 32 new DoubleArrayParser(), 33 new StringParser() 34 }; 35 36 private static final ParserFactory DEFAULT_FACTORY = 37 new ParserFactory(DEFAULT_PARSERS); 38 39 private DataParser[] m_parsers; 40 private boolean[] m_isCandidate; 41 42 47 public static ParserFactory getDefaultFactory() { 48 return DEFAULT_FACTORY; 49 } 50 51 56 public ParserFactory() { 57 this(DEFAULT_PARSERS); 58 } 59 60 63 public Object clone() { 64 return new ParserFactory(m_parsers); 65 } 66 67 92 public ParserFactory(DataParser[] parsers) { 93 for ( int i=0; i<parsers.length; ++i ) { 95 if ( parsers[i] == null ) { 96 throw new IllegalArgumentException ( 97 "Input parsers must be non-null"); 98 } 99 } 100 m_parsers = parsers; 102 m_isCandidate = new boolean[m_parsers.length]; 103 reset(); 104 } 105 106 110 protected void reset() { 111 Arrays.fill(m_isCandidate, true); 112 } 113 114 119 protected void sample(String val) { 120 for ( int i=0; i<m_parsers.length; ++i ) { 121 if ( m_isCandidate[i] ) { 122 m_isCandidate[i] = m_parsers[i].canParse(val); 123 } 124 } 125 } 126 127 133 protected DataParser getParser() { 134 for ( int i=0; i<m_parsers.length; ++i ) { 135 if ( m_isCandidate[i] ) { 136 return m_parsers[i]; 137 } 138 } 139 return null; 140 } 141 142 148 public DataParser getParser(Class type) { 149 for ( int i=0; i<m_parsers.length; ++i ) { 150 if ( m_parsers[i].getType().equals(type) ) { 151 return m_parsers[i]; 152 } 153 } 154 return null; 155 } 156 157 166 public DataParser getParser(String [] data, int startRow) { 167 return getParser(new String [][] { data }, 0, startRow); 168 } 169 170 180 public DataParser getParser(String [][] data, int col, int startRow) { 181 if ( data == null || data.length == 0 ) 183 return null; 184 185 int nrows = data.length; 186 187 this.reset(); 189 for ( int row=startRow; row<nrows; ++row ) { 190 this.sample(data[row][col]); 191 } 192 193 DataParser parser = getParser(); 194 return parser; 195 } 196 197 } | Popular Tags |