Team:Freiburg software/Code/AbstractSynBioWaveServlet.java

background-position:0% -42px; } background-position:100% -42px; color:#213340; } display:none; }
 * 1) tabs a.code_active {
 * 1) tabs a.code_active span {
 * 1) toc {

org.synbiowave.servlet.AbstractSynBioWaveRobot
/*   Copyright: synbiowave License: GPL Authors: Jörg Wassolesk Version: 0.1 DESCRIPTION: This class provides the functions for recieving url-connections. Our central SynBioWave-Robot extends this class in instead of AbstractSbwRobot. All others don't. This class enhances the servlet capabilities of the Google Wave Robot Servlet to serve also file up - and download.

package org.synbiowave.servlet;

import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.Iterator;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; import org.biojava.bio.seq.Feature; import org.biojavax.bio.db.HashRichSequenceDB; import org.biojavax.bio.db.RichSequenceDB; import org.biojavax.bio.seq.RichSequence; import org.biojavax.bio.seq.RichSequenceIterator; import org.synbiowave.biojava.Util; import org.synbiowave.database.DatastoreManager; import org.synbiowave.database.Sequence; import org.synbiowave.sequence.SequenceView;

import com.google.wave.api.AbstractRobotServlet; import com.google.wave.api.Annotation; import com.google.wave.api.Range;

// TODO: Auto-generated Javadoc /** * The Class AbstractSynBioWaveServlet. */ @SuppressWarnings("serial") public abstract class AbstractSynBioWaveServlet extends AbstractRobotServlet{

/** The current sequence. */	protected Long currentSequence=null; /** The format. */	protected String format="genbank";

/* (non-Javadoc) * @see com.google.wave.api.AbstractRobotServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */	@Override protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException { if(req.getContentType.equals("application/json; charset=UTF-8")){super.doPost(req,resp);} else if(req.getContentType.contains("multipart/form-data")){ try{ ServletFileUpload fileUpload=new ServletFileUpload; resp.setContentType("text/html"); try{ FileItemIterator iterator=fileUpload.getItemIterator(req); while(iterator.hasNext){ FileItemStream item=iterator.next; InputStream in=item.openStream; if(!item.isFormField){ try{ String plain=IOUtils.toString(in); try{ RichSequenceIterator rsi= Util.read(new ByteArrayInputStream(plain.getBytes)); boolean single=true; RichSequence rs; while(rsi.hasNext){ rs=rsi.nextRichSequence; String type; if(rs.getAlphabet.getName!=null){ type=rs.getAlphabet.getName;} else{type=SequenceView.isSequence(rs.seqString);} Sequence sequence= new Sequence("import",                                                                                                  System.currentTimeMillis,                                                                                                   null,null,null,rs.seqString,type); if(rs.getDescription!=null                                                                                          &&rs.getDescription.length>1){ sequence.setName (rs.getDescription);} else{ sequence.setName("Import"+"("+ new Date (System.currentTimeMillis).toString +")");}										if(rsi.hasNext){ Iterator fi=rs.features; while(fi.hasNext){ Feature f=fi.next; sequence.addAnnotation(                                                                                               new Annotation("feature",f.getType, new Range(f.getLocation.getMin,                                                                                               f.getLocation.getMax)));}} else if(single){sequence.setPlain(plain);} single=false; currentSequence= DatastoreManager.store(sequence).getId;}} catch(Exception exc){}} finally{IOUtils.closeQuietly(in);}}}} catch(SizeLimitExceededException e){}} catch(Exception ex){}} else if(req.getContentType.contains("application/x-www-form-urlencoded")){ try{ Sequence sequence=DatastoreManager.getByID(new Sequence,currentSequence); org.biojava.bio.seq.Sequence s = Util.convertToRichSequence(sequence); RichSequenceDB rsdb=new HashRichSequenceDB; rsdb.addSequence(s); String extension; if(format.equals("genbank")){ if(sequence.getType.equals("PROTEIN")){extension="gp";} else{extension="gb";}} else{extension=format;} resp.setContentType("text/plain"); resp.setHeader("Content-Disposition","attachment;filename=\""+sequence.getName+"."+extension+"\""); Util.write(resp.getOutputStream,rsdb.getRichSequenceIterator,format);} catch (Exception ex) {}}} }