All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.gkutiel.flip.plugin.Template.xtend Maven / Gradle / Ivy

The newest version!

package com.github.gkutiel.flip.plugin

import java.util.List

class Template{
	def static String method(Method m) '''
		«m.name»(
			«FOR p : m.params SEPARATOR ','»
				«IF p.type.equals("java.lang.String")»
					req.getParameter("«p.name»")
				«ELSE»
					GSON.fromJson(req.getParameter("«p.name»"), «p.type».class)
				«ENDIF»
			«ENDFOR»
		)
	'''

	def static String command(CmdMethod cm) '''
		servletHandler.addServletWithMapping(new ServletHolder(new HttpServlet() {

			@Override
			protected void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException {
				doPost(req, res);
			}
			
			@Override
			protected void doPost(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException {
				try{
					«cm.clazz.toString()» o = new «cm.clazz.toString()»();
		
					«IF cm.isFliplet»
						o.set(req, res);
					«ENDIF»
		
					«FOR f : cm.filters»
						o.«method(f)»;
					«ENDFOR»
		
					Object r = "";
					«IF cm.method.returnType != null»r = «ENDIF» o.«method(cm.method)»;
					
					Response rs = new «cm.resClass»();
					
					res.setCharacterEncoding("UTF-8");
					res.setContentType(rs.getMimeType("«cm.mime»"));
					res.getOutputStream().write(rs.getBytes(r«FOR a : cm.args BEFORE ',' SEPARATOR ','»"«a»"«ENDFOR»));
				}catch(RedirectException e){
					res.sendRedirect(e.url);
				}catch(Exception e) {
					throw new ServletException(e);
				}
			}
		}), "«path(cm)»");	
	'''
	def static String path(CmdMethod cm) '''«IF cm.prefix != null»«cm.prefix.value»«ENDIF»«IF cm.path.length > 0»«cm.path»«ELSE»/«cm.method.name»«ENDIF»'''
	
	
	def static String flip(List resources)'''
		package com.github.gkutie.flip.web;
		
		import java.io.IOException;
		
		import javax.servlet.ServletException;
		import javax.servlet.http.HttpServlet;
		import javax.servlet.http.HttpServletRequest;
		import javax.servlet.http.HttpServletResponse;
		
		import org.eclipse.jetty.plus.servlet.ServletHandler;
		import org.eclipse.jetty.server.Handler;
		import org.eclipse.jetty.server.Request;
		import org.eclipse.jetty.server.Server;
		import org.eclipse.jetty.server.handler.HandlerList;
		import org.eclipse.jetty.server.handler.ResourceHandler;
		import org.eclipse.jetty.servlet.ServletContextHandler;
		import org.eclipse.jetty.servlet.ServletHolder;
		import org.eclipse.jetty.util.resource.Resource;
		import org.jolokia.http.AgentServlet;
		
		import com.github.gkutiel.flip.AFlip;
		import com.github.gkutiel.flip.RedirectException;
		import com.github.gkutiel.flip.Response;
		import com.google.gson.Gson;
		
		
		public class Flip extends AFlip{
			static final Gson GSON = new Gson();
			 
			private final Server server;
			private final ServletHandler servletHandler;
			private	final HandlerList handlerList = new HandlerList();
			
		
			@Override
			public void bind(ServletHolder servletHolder, String path){
				servletHandler.addServletWithMapping(servletHolder, path);
			}
			
			public Flip(final int port) {
				server = new Server(port);
		
				servletHandler = servletHandler();

				final ServletContextHandler jolokia = new ServletContextHandler(server, "/jolokia");
				jolokia.addServlet(new ServletHolder(new AgentServlet()), "/*");
				
				handlerList.setHandlers(new Handler[] { jolokia, resourceHandler(), servletHandler});
		
				for(Hook hook : HOOKS)
					hook.hook(this);

				server.setHandler(handlerList);
			}
		
			private ResourceHandler resourceHandler() {
				final ResourceHandler resourceHandler = new ResourceHandler() {
					@Override
					public void handle(final String target, final Request b, final HttpServletRequest r, final HttpServletResponse re) throws IOException, ServletException {
						final Resource f = getResource(r);
						if (f == null || !f.exists()) return;
						if (f.isDirectory() && getWelcome(f) == null) return;
						super.handle(target, b, r, re);
					}
				};
				resourceHandler.setResourceBase("web");
				resourceHandler.setWelcomeFiles(new String[]{"index.html", "index.xml"});
				return resourceHandler;
			}
		
			private ServletHandler servletHandler() {
				final ServletHandler servletHandler = new ServletHandler();
				«FOR servlet : resources»
					«servlet»
				«ENDFOR»
				return servletHandler;
			}
		
			public void start() {
				try {
					server.start();
					server.join();
				} catch (final Exception e) {
					throw new RuntimeException(e);
				}
			}
		}
	'''
	
	def static String cmd(CmdMethod cm)'''
		public static String «cm.method.name»(
			«FOR p : cm.method.params SEPARATOR ','»
				«p.type» «p.name»
			«ENDFOR»
		) {
			return url("«path(cm)»", new String[] {
			«FOR p : cm.method.params SEPARATOR ','»
				"«p.name»"
			«ENDFOR»
			}, new Object[] { 
			«FOR p : cm.method.params SEPARATOR ','»
				«p.name»
			«ENDFOR»
			});
		}
	'''
	
	def static String tos(List tos)'''
		package com.github.gkutie.flip.web;
		
		import java.io.UnsupportedEncodingException;
		import java.net.URLEncoder;
		
		public class To {
			private static final String UTF8 = "UTF-8";
		
			private static String param(final String key, final Object val) {
				try {
					return URLEncoder.encode(key, UTF8) + "=" + URLEncoder.encode(val.toString(), UTF8);
				} catch (final UnsupportedEncodingException e) {
					throw new RuntimeException(e);
				}
			}
		
			private static String url(final String path, final String[] keys, final Object[] vals) {
				final StringBuilder url = new StringBuilder(path);
		
				if (keys.length > 0) {
					url.append("?");
					url.append(param(keys[0], vals[0]));
		
					for (int i = 1; i < vals.length; i++) {
						url.append("&");
						url.append(param(keys[i], vals[i]));
					}
				}
		
				return url.toString();
			}
			
			«FOR cmd : tos»
				«cmd»
			«ENDFOR»
		}
	'''
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy