package de.axone.web.rest; import java.io.IOException; import java.io.PrintWriter; import java.util.Map; import javax.servlet.http.HttpServletResponse; import de.axone.data.Charsets; import de.axone.data.Mime.MimeTypes; import de.axone.web.Method; import de.axone.web.SuperURL; public abstract class AbstractRestFunction<DATA, REQUEST extends RestRequest> implements RestFunction<DATA,REQUEST> { private final String name; public AbstractRestFunction( String name ){ this.name = name; } @Override public String name(){ return name; } @Override public abstract RestFunctionDescription description(); protected String readParamAsString( REQUEST req, String name, boolean required ) throws RestFunctionException { String text = req.getParameter( name ); if( required && text == null ) throw new RestFunctionException( name + " request parameter is missing in request" ); return text; } protected <T> T readData( REQUEST req, Class<T> type ) throws RestFunctionException { T jsonData; String data = req.getParameter( "data" ); // Only for debugging /* if( data == null ){ try { data = Slurper.slurpString( req.getInputStream() ); } catch( IOException e ) { throw new RestFunctionException( e ); } } E.rr( type.getSimpleName() ); E.rr( data ); */ // / debuggin try { if( data != null ){ jsonData = req.mapper().readValue( data, type ); } else { jsonData = req.mapper().readValue( req.getInputStream(), type ); } } catch( IOException e ) { e.printStackTrace(); throw new RestFunctionException( "Cannot read JSON String", e ); } return jsonData; } public abstract void doRun( DATA data, Method method, Map<String, String> parameters, SuperURL url, PrintWriter out, REQUEST req, HttpServletResponse resp ) throws Exception; @Override public void run( DATA data, Method method, Map<String,String> parameters, SuperURL url, PrintWriter out, REQUEST req, HttpServletResponse resp ) throws Exception { resp.setCharacterEncoding( Charsets.utf8 ); resp.setContentType( MimeTypes.JSON.text() ); doRun( data, method, parameters, url, out, req, resp ); } }