+ String v = parseGenbankAccessor( s );\r
+ if ( !ForesterUtil.isEmpty( v ) ) {\r
+ return new Identifier( v, Identifier.NCBI );\r
+ }\r
+ v = parseRefSeqAccessor( s );\r
+ if ( !ForesterUtil.isEmpty( v ) ) {\r
+ return new Identifier( v, Identifier.REFSEQ );\r
+ }\r
+ v = parseTrEMBLAccessor( s );\r
+ if ( !ForesterUtil.isEmpty( v ) ) {\r
+ return new Identifier( v, Identifier.SP );\r
+ }\r
+ return null;\r
+ }\r
+\r
+ public final static boolean isProtein( final String query ) {\r
+ final String r1 = parseRefSeqAccessor( query );\r
+ if ( !ForesterUtil.isEmpty( r1 ) && ( r1.charAt( 1 ) == 'P' ) ) {\r
+ return true;\r
+ }\r
+ final String r2 = parseTrEMBLAccessor( query );\r
+ if ( !ForesterUtil.isEmpty( r2 ) ) {\r
+ return true;\r
+ }\r
+ return GENBANK_PROTEIN_AC_PATTERN.matcher( query ).lookingAt();\r
+ }\r
+\r
+ /**\r
+ * Returns null if no match.\r
+ * \r
+ */\r
+ public static String parseGenbankAccessor( final String query ) {\r
+ Matcher m = GENBANK_NUCLEOTIDE_AC_PATTERN_1.matcher( query );\r
+ if ( m.lookingAt() ) {\r
+ return m.group( 1 );\r
+ }\r
+ else {\r
+ m = GENBANK_NUCLEOTIDE_AC_PATTERN_2.matcher( query );\r
+ if ( m.lookingAt() ) {\r
+ return m.group( 1 );\r
+ }\r
+ else {\r
+ m = GENBANK_PROTEIN_AC_PATTERN.matcher( query );\r
+ if ( m.lookingAt() ) {\r
+ return m.group( 1 );\r
+ }\r
+ else {\r
+ return null;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Returns null if no match.\r
+ * \r
+ */\r
+ public final static String parseRefSeqAccessor( final String query ) {\r
+ final Matcher m = REFSEQ_PATTERN.matcher( query );\r
+ if ( m.lookingAt() ) {\r
+ return m.group( 1 );\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /**\r
+ * Returns null if no match.\r
+ * \r
+ */\r
+ private final static String parseTrEMBLAccessor( final String query ) {\r
+ final Matcher m = TREMBL_PATTERN.matcher( query );\r
+ if ( m.lookingAt() ) {\r
+ return m.group( 1 );\r
+ }\r