Dazzle:examplePlugin
From BioJava
How to write a plugin for Dazzle
The source code
The full source code for this example is available from the dazzle svn repository
How to set up a Reference and Annotation server
This example demonstrates how to set up a reference & annotation server for Dazzle using the BioJava sequence model. There is also a second way to provide features, which is using a simple GFF style bean object. (Documentation to follow).
Step 1: declare what we want to implement. As you can see below, we want to implement a ReferenceSource and we use the convenience class AbstractDataSource, so we safe some time for the implmementation.
public class UniProtDataSource extends AbstractDataSource implements DazzleReferenceSource {
These objects will collect the data:
private Map seqs; // contains all the BioJava Sequence objects. private Set allTypes; // all annotation types. String fileName; // the filename to parse
When the DAs source is requested, Dazzle will initiate this plugin. For this the init method is called:
public void init(ServletContext ctx) throws DataSourceException { super.init(ctx); try {
Now we init the variables and use BioJava to parse the uniprot file:
seqs = new HashMap(); allTypes = new HashSet(); BufferedReader br = new BufferedReader(new InputStreamReader(ctx.getResourceAsStream(fileName))); // read the SwissProt File SequenceIterator sequences = SeqIOTools.readSwissprot(br); //iterate through the sequences while(sequences.hasNext()){ Sequence seq = sequences.nextSequence(); seqs.put(seq.getName(), seq); }
If something goes wrong, we throw a DataSourceException
} catch (Exception ex) { throw new DataSourceException(ex, "Couldn't load sequence file"); } } /** try to parse a score out of the feature notes * */ public String getScore(Feature f) { String score = "-"; Annotation a = f.getAnnotation(); try { String note = (String) a.getProperty("swissprot.featureattribute"); int scorePos =note.indexOf("Score: "); if ( scorePos > 0 ) { String sc = note.substring(scorePos+7,note.length()); //System.out.println("parsed " + sc); try { double scp = Double.parseDouble(sc); score = "" + scp; } catch (Exception e){ e.printStackTrace(); } try { int scp = Integer.parseInt(sc); score = "" + scp; } catch (Exception e){ e.printStackTrace(); } } //score = ""+ (Double)a.getProperty(SCORE); System.out.println("found score " + score); } catch (NoSuchElementException e){ // igonre in this case... } return score; }
Now some simple methods to provide some data to be returned to the user.
public String getDataSourceType() { return "UniProtFile"; } public String getDataSourceVersion() { return "1.00"; }
This method is called, since in dazzecfg.xml we configured the filename attribute.
public void setFileName(String s) { fileName = s; }
And this method is called when the DAS - SEQUENCE command is being called:
public Sequence getSequence(String ref) throws DataSourceException, NoSuchElementException { Sequence seq = (Sequence) seqs.get(ref); if (seq == null) { throw new NoSuchElementException("No sequence " + ref); } return seq; } public Set getAllTypes() { return Collections.unmodifiableSet(allTypes); }
and here now the method that is used for the ENTRYPOINTS command
public Set getEntryPoints() { return seqs.keySet(); } public String getMapMaster() { // TODO Auto-generated method stub return null; } public String getLandmarkVersion(String ref) throws DataSourceException, NoSuchElementException { // TODO Auto-generated method stub return null; } }

