Team:Freiburg software/Code/BlastRobotServlet.java
From 2009.igem.org
BlastRobotServlet
/* * Copyright: synbiowave * * License: GPL * * Authors: Paul Staab * * Version: 0.1 * * DESCRIPTION: * This is the main class of a SynBioWave-Robot doing a blast-search */ package blastRobot; import java.util.LinkedHashMap; import org.biojava.bio.seq.DNATools; import org.synbiowave.menu.MenuItem; import org.synbiowave.servlet.AbstractSbwRobotServlet; import org.xml.sax.SAXException; import com.google.wave.api.Event; import com.google.wave.api.RobotMessageBundle; import com.google.wave.api.TextView; public class BlastRobotServlet extends AbstractSbwRobotServlet { private static final long serialVersionUID = 3125104904376445527L; @Override public void createMenu(MenuItem menu) { MenuItem blast_prog = new MenuItem("textfield","Program",generateKey() ); blast_prog.setOption("value", "blastn"); MenuItem blast_db = new MenuItem("textfield","Database",generateKey() ); blast_db.setOption("value", "nr"); MenuItem blast_seq = new MenuItem("textarea","Sequence",generateKey() ); blast_seq.setOption("value", "ACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCC"); menu.createSubItem("menu", "Sequence", this.generateKey()) .createSubItem("button", "BLAST", this.generateKey() ) .createSubItem("form", "BLASTform", this.generateKey() ) .appendSubItem(blast_prog) .appendSubItem(blast_db) .appendSubItem(blast_seq); } @Override public String myName() { return "blastrobot@appspot.com"; } @Override public void processSbwMenuEvents(String buttonLabel, LinkedHashMap<String, String> formValues , Event event) { if (buttonLabel.contains("BLASTform")) { try { TextView tv = event.getWavelet().getRootBlip().getDocument(); //Do the search BlastSearch blast = new BlastSearch(); blast.setSequence(DNATools.createDNA(formValues.get(this.generateKey() + "Sequence"))); blast.setDatabase(formValues.get(this.generateKey() + "Database")); blast.setProgram(formValues.get(this.generateKey() + "Program")); blast.search(); MenuItem blastbutton = new MenuItem("chron","Blasting...",this.generateKey()); blastbutton.setOption("value", "3000"); this.directMenuInsert(event.getWavelet(), blastbutton); tv.setAnnotation("rid", blast.getRID() ); tv.setAnnotation("blastresult", "0"); } catch (Exception error) { TextView tv = event.getBlip().getDocument(); tv.append("ERROR:" + error.getMessage() + " \n " ); } } if (buttonLabel.contains("Blasting...")) { TextView tv2 = event.getWavelet().getRootBlip().getDocument(); try { if ( (!tv2.getAnnotations("blastresult").isEmpty()) && tv2.getAnnotations("blastresult").get(0).getValue().contentEquals("0") ) { tv2.setAnnotation("blastresult", "1"); BlastSearch blast = new BlastSearch(); blast.setRID( tv2.getAnnotations("rid").get(0).getValue() ); blast.parseResult(); TextView tv = event.getWavelet().appendBlip().getDocument(); tv.append(blast.waveOutput()); } } catch (SAXException error) { tv2.setAnnotation("blastresult", "0"); MenuItem blastbutton = new MenuItem("chron","Blasting...",this.generateKey()); blastbutton.setOption("value", "3000"); this.directMenuInsert(event.getWavelet(), blastbutton); } catch (Exception error) { event.getWavelet().appendBlip().getDocument().append("ERROR:" + error.getMessage() + error.getClass().getCanonicalName() + " \n "); } } } @Override public void processSbwEvents(RobotMessageBundle bundle) { } }