\r
import java.io.*;\r
import java.util.*;\r
+import javax.swing.*;\r
import jalview.io.*;\r
import jalview.gui.*;\r
import jalview.datamodel.*;\r
{\r
AlignmentI align;\r
AlignmentPanel ap;\r
+ ArrayList unknownSequences;\r
+ JInternalFrame outputFrame = new JInternalFrame();\r
+ CutAndPasteTransfer output = new CutAndPasteTransfer(false);\r
+ StringBuffer sbuffer = new StringBuffer();\r
\r
public SequenceFeatureFetcher(AlignmentI align, AlignmentPanel ap)\r
{\r
+ unknownSequences = new ArrayList();\r
this.align = align;\r
this.ap = ap;\r
Thread thread = new Thread(this);\r
remainingIds.append(ids.get(i) + ";");\r
\r
EBIFetchClient ebi = new EBIFetchClient();\r
- String[] result = ebi.fetchData(remainingIds.toString(), "xml", null);\r
+ String[] result = ebi.fetchData(remainingIds.toString(), "xml", null);\r
\r
if(result!=null)\r
ReadUniprotFile(result, out, align);\r
}\r
}catch(Exception ex){ex.printStackTrace();}\r
\r
+ ap.repaint();\r
+ findMissingIds(align);\r
+ if(sbuffer.length()>0)\r
+ {\r
+ output.formatForOutput();\r
+ outputFrame.setContentPane(output);\r
+ output.setText("Your sequences have been matched to Uniprot. Some of the ids have been\n"\r
+ +"altered, most likely the start/end residue will have been updated.\n"\r
+ +"Save your alignment to maintain the updated id.\n\n"+sbuffer.toString());\r
+ Desktop.addInternalFrame(outputFrame, "Sequence names updated ", 600,300);\r
+\r
+ }\r
+\r
+ if(unknownSequences.size()>0)\r
+ {\r
+ //ignore for now!!!!!!!!!!\r
+ // WSWUBlastClient blastClient = new WSWUBlastClient(align, unknownSequences);\r
+ }\r
\r
}\r
\r
out.writeBytes("<entry>\n");\r
}catch(Exception ex){}\r
\r
- sequence = align.findName( parseElement( result[r], "<name>" , out)) ;\r
+ String seqName = parseElement( result[r], "<name>" , out);\r
+ sequence = align.findName( seqName ) ;\r
if(sequence==null)\r
{\r
- System.out.println("Couldnt find sequence id. Suggestion is "+result[r]);\r
+ sequence = align.findName( seqName.substring(0, seqName.indexOf('_')));\r
+ if(sequence!=null)\r
+ {\r
+ sbuffer.append("changing "+sequence.getName()+" to "+seqName+"\n");\r
+ sequence.setName(seqName);\r
+ }\r
+ }\r
+ if(sequence==null)\r
+ {\r
+ sbuffer.append("UNIPROT updated suggestion is "+result[r]+"\n");\r
+ sequence = align.findName( result[r] ) ;\r
\r
// this entry has been suggested by ebi.\r
// doesn't match id in alignment file\r
if(out!=null)\r
try{ out.writeBytes("</feature>\n"); }catch(Exception ex){}\r
\r
-\r
- if(sstart>=sequence.getStart() && eend<=sequence.getEnd())\r
- {\r
SequenceFeature sf = new SequenceFeature(type,\r
sstart,\r
eend,\r
description,\r
status);\r
features.add(sf);\r
+ }\r
+\r
+ if(result[r].indexOf("<sequence")>-1)\r
+ {\r
+ StringBuffer seqString = new StringBuffer();\r
+\r
+ if(out!=null)\r
+ try { out.writeBytes(result[r]+"\n"); } catch (Exception ex){}\r
+\r
+ while(result[++r].indexOf("</sequence>")==-1)\r
+ {\r
+ seqString.append(result[r]);\r
+ if(out!=null)\r
+ try { out.writeBytes(result[r]+"\n"); } catch (Exception ex){}\r
+ }\r
+\r
+ if(out!=null)\r
+ try { out.writeBytes(result[r]+"\n"); } catch (Exception ex){}\r
+\r
+ StringBuffer nonGapped = new StringBuffer();\r
+ for (int i = 0; i < sequence.getSequence().length(); i++)\r
+ {\r
+ if (!jalview.util.Comparison.isGap(sequence.getCharAt(i)))\r
+ nonGapped.append(sequence.getCharAt(i));\r
+ }\r
+\r
+ int absStart = seqString.toString().indexOf(nonGapped.toString());\r
+ if(absStart==-1)\r
+ {\r
+ unknownSequences.add(sequence.getName());\r
+ features = null;\r
+ sbuffer.append(sequence.getName()+ " SEQUENCE NOT %100 MATCH \n");\r
+ continue;\r
}\r
+\r
+ int absEnd = absStart + nonGapped.toString().length();\r
+ absStart+=1;\r
+\r
+ if(absStart!=sequence.getStart() || absEnd!=sequence.getEnd())\r
+ sbuffer.append("Updated: "+sequence.getName()+" "+\r
+ sequence.getStart()+"/"+sequence.getEnd()+" to "+ absStart+"/"+absEnd+"\n");\r
+\r
+\r
+ sequence.setStart(absStart);\r
+ sequence.setEnd(absEnd);\r
+\r
}\r
\r
if(result[r].indexOf("</entry>")>-1)\r
\r
}\r
}\r
+}\r
+\r
+void findMissingIds(AlignmentI align)\r
+{\r
+ String data;\r
+ ArrayList cachedIds = new ArrayList();\r
+\r
+ try\r
+ {\r
+ BufferedReader in = new BufferedReader(\r
+ new FileReader(jalview.bin.Cache.getProperty("UNIPROT_CACHE")));\r
+\r
+ while ( (data = in.readLine()) != null)\r
+ {\r
+ if (data.indexOf("name") > -1)\r
+ {\r
+ String name = parseElement(data, "<name>", null);\r
+ cachedIds.add(name);\r
+ }\r
+ }\r
+ }\r
+ catch (Exception ex)\r
+ { ex.printStackTrace(); }\r
+\r
+ for(int i=0; i<align.getHeight(); i++)\r
+ if( !cachedIds.contains( align.getSequenceAt(i).getName() ) )\r
+ unknownSequences.add( align.getSequenceAt(i).getName() );\r
\r
- ap.RefreshPanels();\r
\r
}\r
\r