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) 
  {             

  }
}