GenBank { static void read(SBOLDocument doc,String stringBuffer,String URIPrefix,String displayId,String defaultVersion) throws IOException, SBOLConversionException, SBOLValidationException { so = new SequenceOntology(); doc.addNamespace(URI.create(GBNAMESPACE), GBPREFIX); doc.addNamespace(URI.create(GBCONVNAMESPACE), GBCONVPREFIX); BufferedReader br = new BufferedReader(new StringReader(stringBuffer)); String strLine; int featureCnt = 0; int refCnt = 0; nextLine = null; String labelType = ""; URI lastRole = null; while (true) { boolean cont = false; String id = displayId; String accession = ""; String version = defaultVersion; featureMode = false; originMode = false; StringBuilder sbSequence = new StringBuilder(); String elements = null; String description = ""; String comment = ""; URI type = ComponentDefinition.DNA_REGION; ComponentDefinition topCD = null; List<Annotation> annotations = new ArrayList<Annotation>(); List<Annotation> nestedAnnotations = null; Annotation annotation = null; boolean circular = false; int baseCount = 0; while ((strLine = readGenBankLine(br)) != null) { strLine = strLine.trim(); if (strLine.startsWith("LOCUS")) { Matcher m = lp.matcher(strLine.trim()); if (m.matches()) { } else { System.out.println(strLine.trim()); throw new SBOLConversionException("Error: bad locus line"); } if (id == null || id.equals("")) { id = m.group(1).trim(); annotation = new Annotation(new QName(GBNAMESPACE, LOCUS, GBPREFIX), id); id = URIcompliance.fixDisplayId(id); annotations.add(annotation); } try { baseCount = Integer.parseInt(m.group(2)); } catch (NumberFormatException e) { throw new SBOLConversionException("Error: bad sequence length"); } String seqType = m.group(4); if (seqType.toUpperCase().contains("RNA")) { type = ComponentDefinition.RNA_REGION; } annotation = new Annotation(new QName(GBNAMESPACE, MOLECULE, GBPREFIX), seqType); annotations.add(annotation); String topology = m.group(7); if (topology != null) { if (topology.startsWith("linear") || topology.startsWith("circular")) { if (topology.startsWith("circular")) circular = true; } } String division = null; String date = null; if (m.group(8) != null && m.group(9) != null) { division = m.group(8); date = m.group(9); } else if (m.group(8) != null) { date = m.group(8); } else if (m.group(9) != null) { date = m.group(9); } if (division != null) { annotation = new Annotation(new QName(GBNAMESPACE, DIVISION, GBPREFIX), division); annotations.add(annotation); } if (date != null) { annotation = new Annotation(new QName(GBNAMESPACE, DATE, GBPREFIX), date); annotations.add(annotation); } } else if (strLine.startsWith("DEFINITION")) { description = strLine.replaceFirst("DEFINITION ", ""); } else if (strLine.startsWith("ACCESSION")) { String[] strSplit = strLine.split("\\s+"); if (strSplit.length > 1) { accession = strSplit[1]; if (accession.length()>1) { id = accession; id = URIcompliance.fixDisplayId(id); } } if (strSplit.length > 3) { if (strSplit[2].equals("REGION:")) { annotation = new Annotation(new QName(GBNAMESPACE, REGION, GBPREFIX), strSplit[3]); annotations.add(annotation); } } } else if (strLine.startsWith("VERSION")) { String[] strSplit = strLine.split("\\s+"); if (strSplit.length > 1) { if (!accession.equals(strSplit[1])) { if (strSplit[1].split("\\.").length > 1) { version = strSplit[1].split("\\.")[strSplit[1].split("\\.").length-1]; } if (strSplit[1].split("\\.").length > 0) { String vId = strSplit[1].split("\\.")[0]; if (!accession.equals(vId)) { throw new SBOLConversionException("Warning: id in version does not match id in accession"); } } } } if (strSplit.length > 2) { annotation = new Annotation(new QName(GBNAMESPACE,GINUMBER,GBPREFIX),strSplit[2]); annotations.add(annotation); } } else if (strLine.startsWith("KEYWORDS")) { String annotationStr = strLine.replace("KEYWORDS", "").trim(); annotation = new Annotation(new QName(GBNAMESPACE,KEYWORDS,GBPREFIX), annotationStr); annotations.add(annotation); } else if (strLine.startsWith("SOURCE")) { String annotationStr = strLine.replace("SOURCE", "").trim(); annotation = new Annotation(new QName(GBNAMESPACE,SOURCE,GBPREFIX), annotationStr); annotations.add(annotation); } else if (strLine.startsWith("ORGANISM")) { String annotationStr = strLine.replace("ORGANISM", "").trim(); annotation = new Annotation(new QName(GBNAMESPACE,ORGANISM,GBPREFIX), annotationStr); annotations.add(annotation); } else if (strLine.startsWith("REFERENCE")) { String annotationStr = strLine.replace("REFERENCE", "").trim(); nestedAnnotations = new ArrayList<Annotation>(); Annotation labelAnnotation = new Annotation(new QName(GBNAMESPACE,LABEL,GBPREFIX), annotationStr); nestedAnnotations.add(labelAnnotation); URI nestedURI = URI.create(URIPrefix+id+"/reference"+refCnt); refCnt++; annotation = new Annotation(new QName(GBNAMESPACE,REFERENCE,GBPREFIX), new QName(GBNAMESPACE,NESTEDREFERENCE,GBPREFIX),nestedURI,nestedAnnotations); annotations.add(annotation); } else if (strLine.startsWith("AUTHORS")) { String annotationStr = strLine.replace("AUTHORS", "").trim(); Annotation nestedAnnotation = new Annotation(new QName(GBNAMESPACE,AUTHORS,GBPREFIX), annotationStr); nestedAnnotations.add(nestedAnnotation); annotation.setAnnotations(nestedAnnotations); } else if (strLine.startsWith("TITLE")) { String annotationStr = strLine.replace("TITLE", "").trim(); Annotation nestedAnnotation = new Annotation(new QName(GBNAMESPACE,TITLE,GBPREFIX), annotationStr); nestedAnnotations.add(nestedAnnotation); annotation.setAnnotations(nestedAnnotations); } else if (strLine.startsWith("JOURNAL")) { String annotationStr = strLine.replace("JOURNAL", "").trim(); Annotation nestedAnnotation = new Annotation(new QName(GBNAMESPACE,JOURNAL,GBPREFIX), annotationStr); nestedAnnotations.add(nestedAnnotation); annotation.setAnnotations(nestedAnnotations); } else if (strLine.startsWith("MEDLINE")) { String annotationStr = strLine.replace("MEDLINE", "").trim(); Annotation nestedAnnotation = new Annotation(new QName(GBNAMESPACE,MEDLINE,GBPREFIX), annotationStr); nestedAnnotations.add(nestedAnnotation); annotation.setAnnotations(nestedAnnotations); } else if (strLine.startsWith("PUBMED")) { String annotationStr = strLine.replace("PUBMED", "").trim(); Annotation nestedAnnotation = new Annotation(new QName(GBNAMESPACE,PUBMED,GBPREFIX), annotationStr); nestedAnnotations.add(nestedAnnotation); annotation.setAnnotations(nestedAnnotations); Annotation pubMedAnnotation = new Annotation(new QName("http: annotations.add(pubMedAnnotation); } else if (strLine.startsWith("COMMENT")) { String annotationStr = strLine.replace("COMMENT ", ""); if (!comment.equals("")) { comment += "\n "; } comment += annotationStr; } else if (strLine.startsWith("BASE COUNT")) { String annotationStr = strLine.replace("BASE COUNT", "").trim(); annotation = new Annotation(new QName(GBNAMESPACE,BASECOUNT,GBPREFIX), annotationStr); annotations.add(annotation); } else if (strLine.startsWith("FEATURE")) { if (!comment.equals("")) { annotation = new Annotation(new QName(GBNAMESPACE,COMMENT,GBPREFIX), comment); annotations.add(annotation); } topCD = doc.createComponentDefinition(id, version, type); if (circular) { topCD.addType(SequenceOntology.CIRCULAR); } else { topCD.addType(SequenceOntology.LINEAR); } topCD.addRole(SequenceOntology.ENGINEERED_REGION); if (!"".equals(description)) { topCD.setDescription(description); } topCD.setAnnotations(annotations); featureMode = true; } else if (strLine.startsWith("ORIGIN")) { originMode = true; featureMode = false; } else { if (featureMode) { if (strLine.startsWith("/")) { String tag = strLine.replace("/","").trim(); String value = ""; if((-1) != strLine.indexOf('=')) { String[] splitStr = strLine.split("="); tag = splitStr[0].replace("/",""); value = splitStr[1]; } StringBuilder sbValue = new StringBuilder(); sbValue.append(value); if(value.startsWith("\"") && !value.endsWith("\"")) { while(true) { strLine = readGenBankLine(br).trim(); sbValue.append(strLine); if (value.contains(" ") || strLine.contains(" ")) { value += " " + strLine; } else { value += strLine; } if(strLine.endsWith("\"")) { break; } } } SequenceAnnotation sa = topCD.getSequenceAnnotation("annotation" + (featureCnt - 1)); if(sa != null) { if (tag.equals("Apeinfo_label")) { sa.setName(value.replace("\"", "")); labelType = "Apeinfo_label"; } else if (tag.equals("label")) { if (!labelType.equals("Apeinfo_label")) { sa.setName(value.replace("\"", "")); labelType = "label"; } } else if (tag.equals("product")) { if (!labelType.equals("Apeinfo_label")&& !labelType.equals("label")) { sa.setName(value.replace("\"", "")); labelType = "product"; } } else if (tag.equals("gene")) { if (!labelType.equals("Apeinfo_label")&& !labelType.equals("label")&& !labelType.equals("product")) { sa.setName(value.replace("\"", "")); labelType = "gene"; } } else if (tag.equals("note")) { if (!labelType.equals("Apeinfo_label")&& !labelType.equals("label")&& !labelType.equals("product")&& !labelType.equals("gene")) { sa.setName(value.replace("\"", "")); labelType = "note"; } } else if (tag.equals("organism")) { if (!labelType.equals("Apeinfo_label")&& !labelType.equals("label")&& !labelType.equals("product")&& !labelType.equals("gene")&& !labelType.equals("note")) { sa.setName(value.replace("\"", "")); labelType = "organism"; } } tag = fixTag(tag); if (value.startsWith("\"")) { value = value.replaceAll("\"", ""); annotation = new Annotation(new QName(GBCONVNAMESPACE,tag,GBCONVPREFIX),value); } else { annotation = new Annotation(new QName(GBCONVNAMESPACE,tag,GBCONVPREFIX),value); } sa.addAnnotation(annotation); } } else { strLine = strLine.replace(", ",","); String[] strSplit = strLine.split("\\s+"); String featureType = strSplit[0]; URI role = convertGenBanktoSO(featureType); String range = strSplit[1]; boolean outerComplement = false; OrientationType orientation = OrientationType.INLINE; if (range.startsWith("complement")) { outerComplement = true; orientation = OrientationType.REVERSECOMPLEMENT; range = range.replace("complement(", "").replace(")",""); if ((range.startsWith("join")) || (range.startsWith("order"))) range += ")"; } if (range.startsWith("join")||range.startsWith("order")) { String multiType = "join"; if (range.startsWith("order")) { multiType = "order"; } while (!range.endsWith(")")) { strLine = readGenBankLine(br).trim(); range += strLine; } range = range.replace("join(", "").replace(")",""); range = range.replace("order(", "").replace(")",""); String[] ranges = range.split(","); int rangeCnt = 0; SequenceAnnotation sa = null; for (String r : ranges) { orientation = OrientationType.INLINE; if (r.startsWith("complement")||outerComplement) { orientation = OrientationType.REVERSECOMPLEMENT; r = r.replace("complement(", "").replace(")",""); } boolean startLessThan=false; boolean endGreaterThan=false; if (r.contains("<")) { startLessThan=true; r = r.replace("<",""); } if (r.contains(">")) { endGreaterThan=true; r = r.replace(">", ""); } boolean singleBaseRange = false; String[] rangeSplit = null; if (range.contains(".") && !range.contains("..")) { rangeSplit = r.split("\\."); singleBaseRange = true; } else { rangeSplit = r.split("\\.\\."); } int start = 0; if (rangeSplit.length > 0) { start = Integer.parseInt(rangeSplit[0]); } int end = start; if (rangeSplit.length > 1) { end = Integer.parseInt(rangeSplit[1]); } Range newRange = null; if (rangeCnt==0) { sa = topCD.createSequenceAnnotation("annotation"+featureCnt,"range"+rangeCnt, start,end,orientation); sa.setName(featureType); sa.addRole(role); annotation = new Annotation(new QName(GBCONVNAMESPACE,MULTIRANGETYPE,GBCONVPREFIX),multiType); sa.addAnnotation(annotation); if (role.equals(SequenceOntology.SEQUENCE_FEATURE)) { annotation = new Annotation(new QName(GBCONVNAMESPACE,FEATURETYPE,GBCONVPREFIX),featureType); sa.addAnnotation(annotation); } newRange = (Range)sa.getLocation("range"+rangeCnt); } else if (sa != null) { newRange = sa.addRange("range"+rangeCnt, start, end, orientation); } if (outerComplement) { annotation = new Annotation(new QName(GBCONVNAMESPACE,POSITION,GBCONVPREFIX),"position"+((ranges.length-1)-rangeCnt)); } else { annotation = new Annotation(new QName(GBCONVNAMESPACE,POSITION,GBCONVPREFIX),"position"+rangeCnt); } newRange.addAnnotation(annotation); if (startLessThan) { annotation = new Annotation(new QName(GBCONVNAMESPACE,STARTLESSTHAN,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } if (endGreaterThan) { annotation = new Annotation(new QName(GBCONVNAMESPACE,ENDGREATERTHAN,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } if (singleBaseRange) { annotation = new Annotation(new QName(GBCONVNAMESPACE,SINGLEBASERANGE,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } rangeCnt++; } } else if (range.contains("^")) { String[] rangeSplit = range.split("\\^"); int at = Integer.parseInt(rangeSplit[0]); SequenceAnnotation sa = topCD.createSequenceAnnotation("annotation"+featureCnt,"cut",at,orientation); sa.addRole(role); sa.setName(featureType); if (role.equals(SequenceOntology.SEQUENCE_FEATURE)) { annotation = new Annotation(new QName(GBCONVNAMESPACE,FEATURETYPE,GBCONVPREFIX),featureType); sa.addAnnotation(annotation); } } else { boolean startLessThan=false; boolean endGreaterThan=false; if (range.contains("<")) { startLessThan=true; range = range.replace("<",""); } if (range.contains(">")) { endGreaterThan=true; range = range.replace(">", ""); } boolean singleBaseRange = false; String[] rangeSplit = null; if (range.contains(".") && !range.contains("..")) { rangeSplit = range.split("\\."); singleBaseRange = true; } else { rangeSplit = range.split("\\.\\."); } int start = Integer.parseInt(rangeSplit[0]); int end = Integer.parseInt(rangeSplit[0]); if (rangeSplit.length > 1) { end = Integer.parseInt(rangeSplit[1]); } if (start > end && circular) { SequenceAnnotation sa = topCD.createSequenceAnnotation("annotation"+featureCnt,"range0",start,baseCount,orientation); sa.addRole(role); sa.setName(featureType); annotation = new Annotation(new QName(GBCONVNAMESPACE,STRADLESORIGIN,GBCONVPREFIX),"true"); sa.addAnnotation(annotation); if (role.equals(SequenceOntology.SEQUENCE_FEATURE)) { annotation = new Annotation(new QName(GBCONVNAMESPACE,FEATURETYPE,GBCONVPREFIX),featureType); sa.addAnnotation(annotation); } Range newRange = (Range)sa.getLocation("range0"); if (startLessThan) { annotation = new Annotation(new QName(GBCONVNAMESPACE,STARTLESSTHAN,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } if (singleBaseRange) { annotation = new Annotation(new QName(GBCONVNAMESPACE,SINGLEBASERANGE,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } newRange = sa.addRange("range1", 1, end, orientation); if (singleBaseRange) { annotation = new Annotation(new QName(GBCONVNAMESPACE,SINGLEBASERANGE,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } if (endGreaterThan) { annotation = new Annotation(new QName(GBCONVNAMESPACE,ENDGREATERTHAN,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } } else { SequenceAnnotation sa = topCD.createSequenceAnnotation("annotation"+featureCnt,"range",start,end,orientation); sa.addRole(role); sa.setName(featureType); if (role.equals(SequenceOntology.SEQUENCE_FEATURE)) { annotation = new Annotation(new QName(GBCONVNAMESPACE,FEATURETYPE,GBCONVPREFIX),featureType); sa.addAnnotation(annotation); } Range newRange = (Range)sa.getLocation("range"); if (startLessThan) { annotation = new Annotation(new QName(GBCONVNAMESPACE,STARTLESSTHAN,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } if (endGreaterThan) { annotation = new Annotation(new QName(GBCONVNAMESPACE,ENDGREATERTHAN,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } if (singleBaseRange) { annotation = new Annotation(new QName(GBCONVNAMESPACE,SINGLEBASERANGE,GBCONVPREFIX),"true"); newRange.addAnnotation(annotation); } } } labelType = ""; lastRole = role; featureCnt++; } } else if (originMode) { if (featureCnt==1) { topCD.clearRoles(); topCD.addRole(lastRole); } if(elements == null) { elements = new String(""); } if (strLine.startsWith(" cont = true; break; } String[] strSplit = strLine.split(" "); for (int i = 1; i < strSplit.length; i++) { sbSequence.append(strSplit[i]); } } cont = false; } } if (topCD!=null) { Sequence sequence = doc.createSequence(id+"_seq", version, sbSequence.toString(), Sequence.IUPAC_DNA); topCD.addSequence(sequence); createSubComponentDefinitions(doc,topCD,type,sbSequence.toString(),version); } if (!cont) break; } br.close(); }   static final String GBPREFIX; static final String GBNAMESPACE; static final String LOCUS; static final String REGION; static final String MOLECULE; static final String TOPOLOGY; static final String DIVISION; static final String DATE; static final String GINUMBER; static final String KEYWORDS; static final String SOURCE; static final String ORGANISM; static final String REFERENCE; static final String NESTEDREFERENCE; static final String LABEL; static final String AUTHORS; static final String TITLE; static final String JOURNAL; static final String MEDLINE; static final String PUBMED; static final String COMMENT; static final String BASECOUNT; static final String FEATURETYPE; static final String GBCONVPREFIX; static final String GBCONVNAMESPACE; static final String POSITION; static final String STRADLESORIGIN; static final String STARTLESSTHAN; static final String ENDGREATERTHAN; static final String SINGLEBASERANGE; static final String MULTIRANGETYPE; }
@Test public void testParseMultilineLabelContainsSOTerm() { String genbank = "LOCUS simple 56 bp DNA circular 29-MAR-2016" + NEWLINE + "FEATURES Location/Qualifiers " + NEWLINE + " CDS 1..56 " + NEWLINE + " /note=\"this is a very interesting and yet not studied " + NEWLINE + " gene since it does not start with a typical start codon " + NEWLINE + " and its length is not a multiple of 3\"" + NEWLINE + "ORIGIN"+ NEWLINE + " 1 CGTGGAAACC GTTCGAGAGC AAAAATCATA GTGGAATAAC ATTTAGTCTT GATAGT" + NEWLINE + " try ( BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(genbank.getBytes())); ) { SBOLReader.setURIPrefix("http: SBOLDocument doc = SBOLReader.read(bis); assertTrue(null != doc.getComponentDefinitions()); assertTrue(null != doc.getSequences()); } catch(Exception e) { e.printStackTrace(); assertTrue(false); } }
@Test public void testParseMultilineLabels() { String genbank = "LOCUS simple 56 bp DNA circular PRI 29-MAR-2016" + NEWLINE + "FEATURES Location/Qualifiers " + NEWLINE + " CDS 1..60 " + NEWLINE + " /gene=\"dnaN\" " + NEWLINE + " /locus_tag=\"MMCAP2_0002\"" + NEWLINE + " /EC_number=\"2.7.7.7\"" + NEWLINE + " /note=\"identified by match to protein family HMM PF00712;" + NEWLINE + " match to protein family HMM PF02767; match to protein " + NEWLINE + " family HMM PF02768; match to protein family HMM TIGR00663\"" + NEWLINE + " /codon_start=1" + NEWLINE + " /transl_table=4" + NEWLINE + " /product=\"DNA polymerase III, beta subunit\"" + NEWLINE + " /protein_id=\"ACU79029.1\"" + NEWLINE + " /db_xref=\"GI:256384459\"" + NEWLINE + " /translation=\"MNFSINRMVLLDNLSKAAKVIDPKNVNPSLAGIYLNVLSDQVNI" + NEWLINE + " IATSGILSFKSILNNQNSDLEVKQEGKVLLKPKFVLEMLRRLDDEFVVFSMVEDNELI" + NEWLINE + " IKTDNSDFSIGVLNSEDYPLIGFREKGIEFNLNPKEVKKTIYQVFVSMNENNKKLILT" + NEWLINE + " GLNLKLNNNKAIFSTTDSFRISQKILEIQSDNNEDIDITIPFKTALELPKLLDNAENL" + NEWLINE + " KIIIVEGYITFIIDNVIFQSNLIDGRFPNVQIAFPTKFETIITVKQKSILKVLSRFDL" + NEWLINE + " VADDGLPAIVNIKVNEDKIEFKSFISEVGKYEEDFDDFVIEGNKSLSISFNTRFLIDA" + NEWLINE + " IKTLDEDRIELKLINSTKPIVINNVYDEHLKQVILPTFLSN\"" + NEWLINE + "ORIGIN"+ NEWLINE + " 1 CGTGGAAACC GTTCGAGAGC AAAAATCATA GTGGAATAAC ATTTAGTCTT GATAGTTCCA" + NEWLINE + " try ( BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(genbank.getBytes())); ) { SBOLReader.setURIPrefix("http: SBOLDocument doc = SBOLReader.read(bis); assertTrue(null != doc.getComponentDefinitions()); assertTrue(doc.getComponentDefinitions().size() == 1); assertTrue(null != doc.getSequences()); assertTrue(doc.getSequences().size() == 1); for(ComponentDefinition cd : doc.getComponentDefinitions()) { assertTrue(null != cd.getSequenceAnnotations()); assertTrue(null != cd.getComponents()); if(!cd.getComponents().isEmpty()) { assertTrue(cd.getSequenceAnnotations().size() == 1); SequenceAnnotation sa = new ArrayList<SequenceAnnotation>(cd.getSequenceAnnotations()).get(0); assertTrue(null != sa.getAnnotations()); assertTrue(sa.getAnnotations().size() == 10); for(Annotation anno : sa.getAnnotations()) { String expectedValue = ""; if("".equals(anno.getQName().getLocalPart())) { } else if("note".equals(anno.getQName().getLocalPart())) { } switch(anno.getQName().getLocalPart()) { case "gene": expectedValue = "\"dnaN\""; break; case "locus_tag": expectedValue = "\"MMCAP2_0002\""; break; case "EC_number": expectedValue = "\"2.7.7.7\""; break; case "note": expectedValue = "\"identified by match to protein family HMM PF00712; match to protein family HMM PF02767; match to protein family HMM PF02768; match to protein family HMM TIGR00663\""; break; case "codon_start": expectedValue = "1"; break; case "transl_table": expectedValue = "4"; break; case "product": expectedValue = "\"DNA polymerase III, beta subunit\""; break; case "protein_id": expectedValue = "\"ACU79029.1\""; break; case "db_xref": expectedValue = "\"GI:256384459\""; break; case "translation": expectedValue = "\"MNFSINRMVLLDNLSKAAKVIDPKNVNPSLAGIYLNVLSDQVNIIATSGILSFKSILNNQNSDLEVKQEGKVLLKPKFVLEMLRRLDDEFVVFSMVEDNELIIKTDNSDFSIGVLNSEDYPLIGFREKGIEFNLNPKEVKKTIYQVFVSMNENNKKLILTGLNLKLNNNKAIFSTTDSFRISQKILEIQSDNNEDIDITIPFKTALELPKLLDNAENLKIIIVEGYITFIIDNVIFQSNLIDGRFPNVQIAFPTKFETIITVKQKSILKVLSRFDLVADDGLPAIVNIKVNEDKIEFKSFISEVGKYEEDFDDFVIEGNKSLSISFNTRFLIDAIKTLDEDRIELKLINSTKPIVINNVYDEHLKQVILPTFLSN\""; break; } assertTrue(expectedValue.equals(anno.getStringValue())); } } else { } } } catch(Exception e) { assertTrue(false); } }