X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fbiojava%2Fdasobert%2Fdas%2FDAS_Feature_Handler.java;h=b6badc7f37e85bcdeebdece738f71564b4553b28;hb=3d54cb06f65ea70832b8795fdefc466f26154ac5;hp=b506c513377e4902e84c49fddc13a5a197d8f465;hpb=7bc226b58110fa26d9dbd3f0c78095d06909ffc3;p=jalview.git diff --git a/src/org/biojava/dasobert/das/DAS_Feature_Handler.java b/src/org/biojava/dasobert/das/DAS_Feature_Handler.java index b506c51..b6badc7 100755 --- a/src/org/biojava/dasobert/das/DAS_Feature_Handler.java +++ b/src/org/biojava/dasobert/das/DAS_Feature_Handler.java @@ -30,27 +30,42 @@ import org.xml.sax.helpers.*; /** * a class to parse the response of a DAS - Feature request - * @author Andreas Prlic - * + * + * @author Andreas Prlic Adapted for jalview use. + * @author Andrew Waterhouse Updated to Das 1.53e feature spec. + * @author Jim Procter + * */ -public class DAS_Feature_Handler - extends DefaultHandler +public class DAS_Feature_Handler extends DefaultHandler { /** - * + * */ List features; + boolean first_flag; + HashMap feature; + String featurefield; - String characterdata; + + StringBuffer characterdata; + String dasCommand; int comeBackLater; int maxFeatures; + String segmentId; + + String version; + + String type_id; + + String type_category; + public DAS_Feature_Handler() { super(); @@ -58,16 +73,51 @@ public class DAS_Feature_Handler features = new ArrayList(); first_flag = true; featurefield = ""; - characterdata = ""; + characterdata = new StringBuffer(); dasCommand = ""; comeBackLater = -1; maxFeatures = -1; + segmentId = ""; + version = ""; + type_id = ""; + type_category = ""; } - /** specifies a maximum number of features to be downloaded. if a - server returns more, they will be ignored. default is to load - all features - @param max the maximium number of features to be downloaded + /** + * get the id information specified int the SEGMENT field of the DAS response + * + * @return the segmentId or an emtpy string if not available + */ + public String getSegmentId() + { + return segmentId; + } + + /** + * get the version informationspecified in the SEGMENT field of the DAS + * response + * + * @return the version information of an empty string if not available + */ + public String getVersion() + { + return version; + } + + public boolean isMD5Checksum() + { + + if ((version != null) && (version.length() == 32)) + return true; + return false; + } + + /** + * specifies a maximum number of features to be downloaded. if a server + * returns more, they will be ignored. default is to load all features + * + * @param max + * the maximium number of features to be downloaded */ public void setMaxFeatures(int max) @@ -103,52 +153,74 @@ public class DAS_Feature_Handler void start_feature(String uri, String name, String qName, Attributes atts) { - if ( (maxFeatures > 0) && (features.size() > maxFeatures)) + if ((maxFeatures > 0) && (features.size() > maxFeatures)) { - characterdata = ""; + characterdata = new StringBuffer(); return; } feature = new HashMap(); String id = atts.getValue("id"); feature.put("id", id); feature.put("dassource", dasCommand); - characterdata = ""; + characterdata = new StringBuffer(); } void add_featuredata(String uri, String name, String qName) { - //System.out.println("featurefield "+featurefield+ " data "+characterdata); + // System.out.println("featurefield "+featurefield+ " data "+characterdata); // NOTE can have multiple lines .. - if ( (maxFeatures > 0) && (features.size() > maxFeatures)) + if ((maxFeatures > 0) && (features.size() > maxFeatures)) { return; } String data = (String) feature.get(featurefield); + String featureText = characterdata.toString(); if (data != null) { - characterdata = data + " " + characterdata; + featureText = data + " " + featureText; } - feature.put(featurefield, characterdata); + if (qName.equals("TYPE")) + { + if (featureText.length() < 1) + featureText = type_id; + + feature.put("TYPE_ID", type_id); + feature.put("TYPE_CATEGORY", type_category); + type_id = ""; + type_category = ""; + } + + feature.put(featurefield, featureText); featurefield = ""; - characterdata = ""; + characterdata = new StringBuffer(); } - private void addLink(String uri, String name, String qName, Attributes atts) + private void addLink(String uri, String name, String qName, + Attributes atts) { String href = atts.getValue("href"); feature.put("LINK", href); - characterdata = ""; + characterdata = new StringBuffer(); featurefield = "LINK-TEXT"; } + private void addGroup(String uri, String name, String qName, + Attributes atts) + { + String id = atts.getValue("id"); + feature.put("GROUP", id); + characterdata = new StringBuffer(); + featurefield = "GROUP"; + } + public void startElement(String uri, String name, String qName, - Attributes atts) + Attributes atts) { - //System.out.println("new element "+qName); + // System.out.println("new element "+qName); if (qName.equals("FEATURE")) { @@ -158,17 +230,33 @@ public class DAS_Feature_Handler { addLink(uri, name, qName, atts); } - else if (qName.equals("METHOD") || - qName.equals("TYPE") || - qName.equals("START") || - qName.equals("END") || - qName.equals("NOTE") || - qName.equals("SCORE") - ) + else if (qName.equals("GROUP")) + { + addGroup(uri, name, qName, atts); + } + else if (qName.equals("METHOD") || qName.equals("TYPE") + || qName.equals("START") || qName.equals("END") + || qName.equals("NOTE") || qName.equals("SCORE") + || qName.equals("ORIENTATION")) { - characterdata = ""; + characterdata = new StringBuffer(); featurefield = qName; } + else if (qName.equals("SEGMENT")) + { + String id = atts.getValue("id"); + if (id != null) + segmentId = id; + String v = atts.getValue("version"); + if (v != null) + version = v; + + } + if (qName.equals("TYPE")) + { + type_id = atts.getValue("id"); + type_category = atts.getValue("category"); + } } @@ -183,14 +271,11 @@ public class DAS_Feature_Handler public void endElement(String uri, String name, String qName) { - if (qName.equals("METHOD") || - qName.equals("TYPE") || - qName.equals("START") || - qName.equals("END") || - qName.equals("NOTE") || - qName.equals("LINK") || - qName.equals("SCORE") - ) + if (qName.equals("METHOD") || qName.equals("TYPE") + || qName.equals("START") || qName.equals("END") + || qName.equals("NOTE") || qName.equals("LINK") + || qName.equals("SCORE") || qName.equals("ORIENTATION") + || qName.equals("GROUP")) { add_featuredata(uri, name, qName); } @@ -214,11 +299,14 @@ public class DAS_Feature_Handler public void characters(char ch[], int start, int length) { + if (maxFeatures > 0) + if (features.size() > maxFeatures) + return; for (int i = start; i < start + length; i++) { - characterdata += ch[i]; + characterdata.append(ch[i]); } }