Das client files
[jalview.git] / src / org / biojava / dasobert / das / DAS_Feature_Handler.java
1 /*
2  *                    BioJava development code
3  *
4  * This code may be freely distributed and modified under the
5  * terms of the GNU Lesser General Public Licence.  This should
6  * be distributed with the code.  If you do not have a copy,
7  * see:
8  *
9  *      http://www.gnu.org/copyleft/lesser.html
10  *
11  * Copyright for this code is held jointly by the individual
12  * authors.  These should be listed in @author doc comments.
13  *
14  * For more information on the BioJava project and its aims,
15  * or to join the biojava-l mailing list, visit the home page
16  * at:
17  *
18  *      http://www.biojava.org/
19  *
20  * Created on 19.03.2004
21  * @author Andreas Prlic
22  *
23  */
24 package org.biojava.dasobert.das;
25
26 import org.xml.sax.helpers.DefaultHandler;
27 import org.xml.sax.Attributes;
28
29 import java.util.ArrayList ;
30 import java.util.HashMap ;
31 import java.util.List;
32
33 /**
34  * a class to parse the response of a DAS - Feature request
35  * @author Andreas Prlic
36  *
37  */
38 public class DAS_Feature_Handler  extends DefaultHandler{
39     
40     /**
41      * 
42      */
43     List features ;
44     boolean first_flag ;
45     HashMap feature ;
46     String featurefield ;
47     String characterdata ;
48     String dasCommand ;
49     
50     int comeBackLater ;
51     
52     public DAS_Feature_Handler() {
53         super();
54         
55         features= new ArrayList() ;
56         first_flag = true ;
57         featurefield = "" ;
58         characterdata = "";
59         dasCommand = "" ;
60         comeBackLater = -1; 
61     }
62     
63     public void setDASCommand(String cmd) { dasCommand = cmd ;}
64     public String getDASCommand() { return dasCommand; }
65     
66     public List get_features() {
67         return features ;
68     }
69     
70     public int getComBackLater(){
71         return comeBackLater;
72     }
73     
74     void start_feature(String uri, String name, String qName, Attributes atts) {
75         feature = new HashMap() ;
76         String id       = atts.getValue("id");
77         feature.put("id",id);
78         feature.put("dassource",dasCommand);
79         characterdata = "";
80     }
81     
82     void add_featuredata(String uri, String name, String qName) {
83         //System.out.println("featurefield "+featurefield+ " data "+characterdata);
84         // NOTE can have multiple lines ..
85         
86         String data = (String)feature.get(featurefield);
87         if (data != null){
88             characterdata = data + " " + characterdata;
89         }
90         
91         feature.put(featurefield,characterdata);
92         featurefield = "";
93         characterdata = "";
94     }
95     
96     private void addLink(String uri, String name, String qName, Attributes atts) {
97         String href = atts.getValue("href");
98         feature.put("LINK",href);
99         characterdata="";
100         featurefield = "LINK-TEXT";
101                 
102     }
103     
104     public void startElement (String uri, String name, String qName, Attributes atts){
105         //System.out.println("new element "+qName);
106         
107         if (qName.equals("FEATURE")) 
108             start_feature(uri,  name,  qName,  atts);
109         else if ( qName.equals("LINK"))
110             addLink(uri,name,qName, atts);
111         else if ( qName.equals("METHOD") || 
112                 qName.equals("TYPE") ||
113                 qName.equals("START") ||
114                 qName.equals("END") ||
115                 qName.equals("NOTE") ||                
116                 qName.equals("SCORE")
117         ){
118             characterdata ="";
119             featurefield = qName ;
120         }
121         
122     }
123     
124     public void startDocument() {
125         //System.out.println("start document");
126     }
127     
128     public void endDocument ()  {
129         //System.out.println("adding feature " + feature);
130         //features.add(feature);
131         
132     }
133     public void endElement(String uri, String name, String qName) {
134         //System.out.println("end "+name);
135         if ( qName.equals("METHOD") || 
136                 qName.equals("TYPE") ||
137                 qName.equals("START") ||
138                 qName.equals("END") ||
139                 qName.equals("NOTE") || 
140                 qName.equals("LINK") || 
141                 qName.equals("SCORE")
142         ) {
143             add_featuredata(uri,name,qName);
144         }
145         else if ( qName.equals("FEATURE")) {
146             //System.out.println("adding ffeature " + feature);
147             features.add(feature);
148         }
149     }
150     
151     public void characters (char ch[], int start, int length){
152         //System.out.println("characters");
153         for (int i = start; i < start + length; i++) {
154             
155             characterdata += ch[i];
156         }
157         
158     }
159     
160 }