+ private final void determineSourceType( final Object nhx_source ) throws IOException {
+ if ( nhx_source == null ) {
+ throw new PhylogenyParserException( getClass() + ": attempt to parse null object." );
+ }
+ else if ( nhx_source instanceof String ) {
+ _input_type = NHXParser.STRING;
+ _source_length = ( ( String ) nhx_source ).length();
+ _nhx_source = nhx_source;
+ }
+ else if ( nhx_source instanceof StringBuilder ) {
+ _input_type = NHXParser.STRING_BUILDER;
+ _source_length = ( ( StringBuilder ) nhx_source ).length();
+ _nhx_source = nhx_source;
+ }
+ else if ( nhx_source instanceof StringBuffer ) {
+ _input_type = NHXParser.STRING_BUFFER;
+ _source_length = ( ( StringBuffer ) nhx_source ).length();
+ _nhx_source = nhx_source;
+ }
+ else if ( nhx_source instanceof StringBuilder ) {
+ _input_type = NHXParser.STRING_BUILDER;
+ _source_length = ( ( StringBuilder ) nhx_source ).length();
+ _nhx_source = nhx_source;
+ }
+ else if ( nhx_source instanceof char[] ) {
+ _input_type = NHXParser.CHAR_ARRAY;
+ _source_length = ( ( char[] ) nhx_source ).length;
+ _nhx_source = nhx_source;
+ }
+ else if ( nhx_source instanceof File ) {
+ _input_type = NHXParser.BUFFERED_READER;
+ _source_length = 0;
+ if ( _my_source_br != null ) {
+ try {
+ _my_source_br.close();
+ }
+ catch ( final IOException e ) {
+ }
+ }
+ final File f = ( File ) nhx_source;
+ final String error = ForesterUtil.isReadableFile( f );
+ if ( !ForesterUtil.isEmpty( error ) ) {
+ throw new PhylogenyParserException( error );
+ }
+ _nhx_source = new BufferedReader( new FileReader( f ) );
+ }
+ else if ( nhx_source instanceof URL ) {
+ _input_type = NHXParser.BUFFERED_READER;
+ _source_length = 0;
+ if ( _my_source_br != null ) {
+ try {
+ _my_source_br.close();
+ }
+ catch ( final IOException e ) {
+ }
+ }
+ final InputStreamReader isr = new InputStreamReader( ( ( URL ) nhx_source ).openStream() );
+ _nhx_source = new BufferedReader( isr );
+ }
+ else if ( nhx_source instanceof InputStream ) {
+ _input_type = NHXParser.BUFFERED_READER;
+ _source_length = 0;
+ if ( _my_source_br != null ) {
+ try {
+ _my_source_br.close();
+ }
+ catch ( final IOException e ) {
+ }
+ }
+ final InputStreamReader isr = new InputStreamReader( ( InputStream ) nhx_source );
+ _nhx_source = new BufferedReader( isr );
+ }
+ else {
+ throw new IllegalArgumentException( getClass() + " can only parse objects of type String,"
+ + " StringBuffer, StringBuilder, char[], File, InputStream, or URL "
+ + " [attempt to parse object of " + nhx_source.getClass() + "]." );
+ }