X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fbiojava%2Fdasobert%2Fdas%2FDAS_Feature_Handler.java;h=eed54e8ceb2039c8f9fd336d491953fa999eecd8;hb=54e003f9b2fff47dbfea6401c3944afdb7bd37b3;hp=b506c513377e4902e84c49fddc13a5a197d8f465;hpb=b318e1301843732eabd1b34ce391828887c883df;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..eed54e8 100755 --- a/src/org/biojava/dasobert/das/DAS_Feature_Handler.java +++ b/src/org/biojava/dasobert/das/DAS_Feature_Handler.java @@ -31,7 +31,11 @@ import org.xml.sax.helpers.*; /** * a class to parse the response of a DAS - Feature request * @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 @@ -44,25 +48,60 @@ public class DAS_Feature_Handler boolean first_flag; HashMap feature; String featurefield; - String characterdata; + StringBuffer characterdata; String dasCommand; int comeBackLater; int maxFeatures; - public DAS_Feature_Handler() - { + String segmentId ; + String version; + String type_id; + String type_category; + + + public DAS_Feature_Handler() { super(); features = new ArrayList(); first_flag = true; featurefield = ""; - characterdata = ""; + characterdata = new StringBuffer(); dasCommand = ""; comeBackLater = -1; maxFeatures = -1; + segmentId = ""; + version = ""; + type_id = ""; + type_category=""; + } + + + + /** 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 @@ -103,16 +142,15 @@ public class DAS_Feature_Handler void start_feature(String uri, String name, String qName, Attributes atts) { - if ( (maxFeatures > 0) && (features.size() > maxFeatures)) - { - characterdata = ""; + if (( maxFeatures > 0 ) && ( features.size() > maxFeatures ) ) { + 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) @@ -126,28 +164,44 @@ public class DAS_Feature_Handler } String data = (String) feature.get(featurefield); - if (data != null) - { - characterdata = data + " " + characterdata; + String featureText = characterdata.toString(); + if (data != null){ + 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) { String href = atts.getValue("href"); feature.put("LINK", href); - characterdata = ""; + characterdata= new StringBuffer(); featurefield = "LINK-TEXT"; } - public void startElement(String uri, String name, String qName, - Attributes atts) - { + 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){ //System.out.println("new element "+qName); if (qName.equals("FEATURE")) @@ -157,18 +211,32 @@ public class DAS_Feature_Handler else if (qName.equals("LINK")) { addLink(uri, name, qName, atts); - } + } 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") - ) - { - characterdata = ""; + qName.equals("SCORE") || + qName.equals("ORIENTATION") + ){ + 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"); + } } @@ -189,9 +257,10 @@ public class DAS_Feature_Handler qName.equals("END") || qName.equals("NOTE") || qName.equals("LINK") || - qName.equals("SCORE") - ) - { + qName.equals("SCORE") || + qName.equals("ORIENTATION") || + qName.equals("GROUP") + ) { add_featuredata(uri, name, qName); } else if (qName.equals("FEATURE")) @@ -212,15 +281,16 @@ public class DAS_Feature_Handler } } - public void characters(char ch[], int start, int length) - { + 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++) - { + for (int i = start; i < start + length; i++) { - characterdata += ch[i]; - } + characterdata.append(ch[i]); + } - } + } }