X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fio%2FSequenceFeatureFetcher.java;h=0c82f6fb41cd813c1a9ae04d21bc5dacb7bbe5f3;hb=064f2fdaa463367f8bf7e6aea5e7fc6a32170138;hp=cdd628b96d5e72a9e53891d97166b5c00bc619b0;hpb=06aa9445b88921bd7930421058fcb7fe49365651;p=jalview.git
diff --git a/src/jalview/io/SequenceFeatureFetcher.java b/src/jalview/io/SequenceFeatureFetcher.java
index cdd628b..0c82f6f 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,28 +59,38 @@ public class SequenceFeatureFetcher implements Runnable {
thread.start();
}
- public void run() {
-
+ /**
+ * DOCUMENT ME!
+ */
+ public void run()
+ {
RandomAccessFile out = null;
- try {
- String cache = System.getProperty("user.home") + "/.jalview.uniprot.xml";
+ 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();
}
}
@@ -77,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++)
@@ -98,23 +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();
}
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" +
@@ -123,7 +155,8 @@ 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);
}
@@ -131,7 +164,15 @@ public class SequenceFeatureFetcher implements Runnable {
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;
@@ -141,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
@@ -193,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);
}
@@ -223,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)
+ {
}
}
@@ -235,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() +
@@ -286,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");
@@ -296,52 +378,84 @@ 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
+ {
+ if(jalview.bin.Cache.getProperty("UNIPROT_CACHE")==null)
+ return;
+
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
+ {
+ if(jalview.bin.Cache.getProperty("UNIPROT_CACHE")==null)
+ return;
+
BufferedReader in = new BufferedReader(new FileReader(
jalview.bin.Cache.getProperty("UNIPROT_CACHE")));
@@ -350,15 +464,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);
}
@@ -369,40 +487,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)
+ {
}
}