X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fio%2FSequenceFeatureFetcher.java;h=89d84b03b12b760a0474b4e40953beaf705aff3c;hb=fbec1b33d0fc169d72be059a5d2cf12b248270e1;hp=2f8b9ecd334520529c201bc8aef7e12c5e099203;hpb=5fafaa6e8d537c78f5bb2dfd4a9c33f468eb635b;p=jalview.git diff --git a/src/jalview/io/SequenceFeatureFetcher.java b/src/jalview/io/SequenceFeatureFetcher.java index 2f8b9ec..89d84b0 100755 --- a/src/jalview/io/SequenceFeatureFetcher.java +++ b/src/jalview/io/SequenceFeatureFetcher.java @@ -29,14 +29,28 @@ import java.io.*; import java.util.*; -public class SequenceFeatureFetcher implements Runnable { +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class SequenceFeatureFetcher implements Runnable +{ AlignmentI align; AlignmentPanel ap; ArrayList unknownSequences; CutAndPasteTransfer output = new CutAndPasteTransfer(); StringBuffer sbuffer = new StringBuffer(); - public SequenceFeatureFetcher(AlignmentI align, AlignmentPanel ap) { + /** + * Creates a new SequenceFeatureFetcher object. + * + * @param align DOCUMENT ME! + * @param ap DOCUMENT ME! + */ + public SequenceFeatureFetcher(AlignmentI align, AlignmentPanel ap) + { unknownSequences = new ArrayList(); this.align = align; this.ap = ap; @@ -45,33 +59,38 @@ public class SequenceFeatureFetcher implements Runnable { thread.start(); } - public void run() { - String cache = jalview.bin.Cache.getProperty("UNIPROT_CACHE"); - + /** + * DOCUMENT ME! + */ + public void run() + { RandomAccessFile out = null; - try { - if (cache == null) { - jalview.bin.Cache.setProperty("UNIPROT_CACHE", - System.getProperty("user.home") + "/uniprot.xml"); - cache = jalview.bin.Cache.getProperty("UNIPROT_CACHE"); - } + try + { + String cache = System.getProperty("user.home") + + "/.jalview.uniprot.xml"; File test = new File(cache); - if (!test.exists()) { + if (!test.exists()) + { out = new RandomAccessFile(cache, "rw"); out.writeBytes("\n"); out.writeBytes("\n"); - } else { + } + else + { out = new RandomAccessFile(cache, "rw"); // open exisiting cache and remove from the end long lastLine = 0; String data; - while ((data = out.readLine()) != null) { - if (data.indexOf("") > -1) { + while ((data = out.readLine()) != null) + { + if (data.indexOf("") > -1) + { lastLine = out.getFilePointer(); } } @@ -82,18 +101,21 @@ public class SequenceFeatureFetcher implements Runnable { int seqIndex = 0; Vector sequences = align.getSequences(); - while (seqIndex < sequences.size()) { + while (seqIndex < sequences.size()) + { ArrayList ids = new ArrayList(); for (int i = 0; (seqIndex < sequences.size()) && (i < 50); - seqIndex++, i++) { + seqIndex++, i++) + { SequenceI sequence = (SequenceI) sequences.get(seqIndex); ids.add(sequence.getName()); } tryLocalCacheFirst(ids, align); - if (ids.size() > 0) { + if (ids.size() > 0) + { StringBuffer remainingIds = new StringBuffer("uniprot:"); for (int i = 0; i < ids.size(); i++) @@ -103,24 +125,28 @@ public class SequenceFeatureFetcher implements Runnable { String[] result = ebi.fetchData(remainingIds.toString(), "xml", null); - if (result != null) { + if (result != null) + { ReadUniprotFile(result, out, align); } } } - if (out != null) { + if (out != null) + { out.writeBytes("\n"); out.close(); } - } catch (Exception ex) { + } + catch (Exception ex) + { ex.printStackTrace(); } - jalview.gui.PaintRefresher.Refresh(null, align); findMissingIds(align); - if (sbuffer.length() > 0) { + if (sbuffer.length() > 0) + { output.setText( "Your sequences have been matched to Uniprot. Some of the ids have been\n" + "altered, most likely the start/end residue will have been updated.\n" + @@ -129,13 +155,24 @@ public class SequenceFeatureFetcher implements Runnable { Desktop.addInternalFrame(output, "Sequence names updated ", 600, 300); } - if (unknownSequences.size() > 0) { + if (unknownSequences.size() > 0) + { //ignore for now!!!!!!!!!! // WSWUBlastClient blastClient = new WSWUBlastClient(align, unknownSequences); } + + jalview.gui.PaintRefresher.Refresh(null, align); } - void ReadUniprotFile(String[] result, RandomAccessFile out, AlignmentI align) { + /** + * DOCUMENT ME! + * + * @param result DOCUMENT ME! + * @param out DOCUMENT ME! + * @param align DOCUMENT ME! + */ + void ReadUniprotFile(String[] result, RandomAccessFile out, AlignmentI align) + { SequenceI sequence = null; Vector features = null; String type; @@ -145,42 +182,54 @@ public class SequenceFeatureFetcher implements Runnable { String end; String pdb = null; - for (int r = 0; r < result.length; r++) { - if ((sequence == null) && (result[r].indexOf("") > -1)) { + for (int r = 0; r < result.length; r++) + { + if ((sequence == null) && (result[r].indexOf("") > -1)) + { long filePointer = 0; - if (out != null) { - try { + if (out != null) + { + try + { filePointer = out.getFilePointer(); out.writeBytes("\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } String seqName = parseElement(result[r], "", out); sequence = align.findName(seqName); - if (sequence == null) { + if (sequence == null) + { sequence = align.findName(seqName.substring(0, seqName.indexOf('_'))); - if (sequence != null) { + if (sequence != null) + { sbuffer.append("changing " + sequence.getName() + " to " + seqName + "\n"); sequence.setName(seqName); } } - if (sequence == null) { + if (sequence == null) + { sbuffer.append("UNIPROT updated suggestion is " + result[r] + "\n"); sequence = align.findName(result[r]); // this entry has been suggested by ebi. // doesn't match id in alignment file - try { + try + { out.setLength(filePointer); - } catch (Exception ex) { + } + catch (Exception ex) + { } // now skip to next entry @@ -197,29 +246,36 @@ public class SequenceFeatureFetcher implements Runnable { pdb = ""; } - if (sequence == null) { + if (sequence == null) + { continue; } - if (result[r].indexOf(" -1) { + if (result[r].indexOf(" -1) + { pdb = parseValue(result[r], "value=", out); sequence.setPDBId(pdb); } - if (result[r].indexOf("feature type") > -1) { + if (result[r].indexOf("feature type") > -1) + { type = parseValue(result[r], "type=", out); description = parseValue(result[r], "description=", null); status = parseValue(result[r], "status=", null); - while (result[r].indexOf("position") == -1) { + while (result[r].indexOf("position") == -1) + { r++; // } // r++; - if (result[r].indexOf("begin") > -1) { + if (result[r].indexOf("begin") > -1) + { start = parseValue(result[r], "position=", out); end = parseValue(result[++r], "position=", out); - } else { + } + else + { start = parseValue(result[r], "position=", out); end = parseValue(result[r], "position=", null); } @@ -227,10 +283,14 @@ public class SequenceFeatureFetcher implements Runnable { int sstart = Integer.parseInt(start); int eend = Integer.parseInt(end); - if (out != null) { - try { + if (out != null) + { + try + { out.writeBytes("\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } @@ -239,45 +299,62 @@ public class SequenceFeatureFetcher implements Runnable { features.add(sf); } - if (result[r].indexOf(" -1) { + if (result[r].indexOf(" -1) + { StringBuffer seqString = new StringBuffer(); - if (out != null) { - try { + if (out != null) + { + try + { out.writeBytes(result[r] + "\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } - while (result[++r].indexOf("") == -1) { + while (result[++r].indexOf("") == -1) + { seqString.append(result[r]); - if (out != null) { - try { + if (out != null) + { + try + { out.writeBytes(result[r] + "\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } } - if (out != null) { - try { + if (out != null) + { + try + { out.writeBytes(result[r] + "\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } StringBuffer nonGapped = new StringBuffer(); - for (int i = 0; i < sequence.getSequence().length(); i++) { - if (!jalview.util.Comparison.isGap(sequence.getCharAt(i))) { + for (int i = 0; i < sequence.getSequence().length(); i++) + { + if (!jalview.util.Comparison.isGap(sequence.getCharAt(i))) + { nonGapped.append(sequence.getCharAt(i)); } } int absStart = seqString.toString().indexOf(nonGapped.toString()); - if (absStart == -1) { + if (absStart == -1) + { unknownSequences.add(sequence.getName()); features = null; sbuffer.append(sequence.getName() + @@ -290,7 +367,8 @@ public class SequenceFeatureFetcher implements Runnable { absStart += 1; if ((absStart != sequence.getStart()) || - (absEnd != sequence.getEnd())) { + (absEnd != sequence.getEnd())) + { sbuffer.append("Updated: " + sequence.getName() + " " + sequence.getStart() + "/" + sequence.getEnd() + " to " + absStart + "/" + absEnd + "\n"); @@ -300,52 +378,78 @@ public class SequenceFeatureFetcher implements Runnable { sequence.setEnd(absEnd); } - if (result[r].indexOf("") > -1) { - if (features != null) { + if (result[r].indexOf("") > -1) + { + if (features != null) + { sequence.setSequenceFeatures(features); } features = null; sequence = null; - if (out != null) { - try { + if (out != null) + { + try + { out.writeBytes("\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } } } } - void findMissingIds(AlignmentI align) { + /** + * DOCUMENT ME! + * + * @param align DOCUMENT ME! + */ + void findMissingIds(AlignmentI align) + { String data; ArrayList cachedIds = new ArrayList(); - try { + try + { BufferedReader in = new BufferedReader(new FileReader( jalview.bin.Cache.getProperty("UNIPROT_CACHE"))); - while ((data = in.readLine()) != null) { - if (data.indexOf("name") > -1) { + while ((data = in.readLine()) != null) + { + if (data.indexOf("name") > -1) + { String name = parseElement(data, "", null); cachedIds.add(name); } } - } catch (Exception ex) { + } + catch (Exception ex) + { ex.printStackTrace(); } for (int i = 0; i < align.getHeight(); i++) - if (!cachedIds.contains(align.getSequenceAt(i).getName())) { + if (!cachedIds.contains(align.getSequenceAt(i).getName())) + { unknownSequences.add(align.getSequenceAt(i).getName()); } } - void tryLocalCacheFirst(ArrayList ids, AlignmentI align) { + /** + * DOCUMENT ME! + * + * @param ids DOCUMENT ME! + * @param align DOCUMENT ME! + */ + void tryLocalCacheFirst(ArrayList ids, AlignmentI align) + { ArrayList cacheData = new ArrayList(); - try { + try + { BufferedReader in = new BufferedReader(new FileReader( jalview.bin.Cache.getProperty("UNIPROT_CACHE"))); @@ -354,15 +458,19 @@ public class SequenceFeatureFetcher implements Runnable { // make sure we remove the ids from the list to retrieve from EBI String data; - while ((data = in.readLine()) != null) { - if (data.indexOf("name") > -1) { + while ((data = in.readLine()) != null) + { + if (data.indexOf("name") > -1) + { String name = parseElement(data, "", null); - if (ids.contains(name)) { + if (ids.contains(name)) + { cacheData.add(""); cacheData.add(data); - while (data.indexOf("") == -1) { + while (data.indexOf("") == -1) + { data = in.readLine(); cacheData.add(data); } @@ -373,40 +481,72 @@ public class SequenceFeatureFetcher implements Runnable { } } } - } catch (Exception ex) { + } + catch (Exception ex) + { ex.printStackTrace(); } String[] localData = new String[cacheData.size()]; cacheData.toArray(localData); - if ((localData != null) && (localData.length > 0)) { + if ((localData != null) && (localData.length > 0)) + { ReadUniprotFile(localData, null, align); } } - String parseValue(String line, String tag, RandomAccessFile out) { - if (out != null) { - try { + /** + * DOCUMENT ME! + * + * @param line DOCUMENT ME! + * @param tag DOCUMENT ME! + * @param out DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + String parseValue(String line, String tag, RandomAccessFile out) + { + if (out != null) + { + try + { out.writeBytes(line + "\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } } int index = line.indexOf(tag) + tag.length() + 1; - if (index == tag.length()) { + if (index == tag.length()) + { return ""; } return line.substring(index, line.indexOf("\"", index + 1)); } - String parseElement(String line, String tag, RandomAccessFile out) { - if (out != null) { - try { + /** + * DOCUMENT ME! + * + * @param line DOCUMENT ME! + * @param tag DOCUMENT ME! + * @param out DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + String parseElement(String line, String tag, RandomAccessFile out) + { + if (out != null) + { + try + { out.writeBytes(line + "\n"); - } catch (Exception ex) { + } + catch (Exception ex) + { } }