Team:Freiburg software/Code/AbstractSynBioWaveServlet.java
From 2009.igem.org
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<Feature> 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) {}}}
}
"

