package org.smartly.packages.http.impl.handlers.rest; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.ContextHandler; import org.json.JSONObject; import org.smartly.commons.logging.Logger; import org.smartly.commons.logging.util.LoggingUtils; import org.smartly.commons.util.DateUtils; import org.smartly.commons.util.StringUtils; import org.smartly.commons.remoting.rest.RESTRegistry; import org.smartly.commons.remoting.rest.wrapper.MethodWrapper; import org.smartly.packages.http.impl.util.ServletUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Standard REST handler. */ public class SmartlyRESTHandler extends ContextHandler { private static final String DEFAULT_ENDPOINT = "/rest"; public SmartlyRESTHandler() { super.setContextPath(DEFAULT_ENDPOINT); } @Override public void setContextPath(final String contextPath) { super.setContextPath(contextPath); } @Override public void doHandle(final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); this.handleInternal(target, baseRequest, request, response); } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ private Logger getSmartlyLogger() { return LoggingUtils.getLogger(this); } private void handleInternal(final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { final String method = request.getMethod(); final String s1 = request.getRequestURI(); final String path = request.getPathInfo(); final String endPoint = request.getContextPath(); if (StringUtils.hasText(path)) { final JSONObject formParams = ServletUtils.getParameters(request); final MethodWrapper mw = RESTRegistry.getMethod(method, path); if (null != mw) { final byte[] bytes = mw.execute(path, formParams); ServletUtils.writeResponse(response, DateUtils.now().getTime(), mw.getTypeOutput(), bytes); } else { response.sendError(HttpStatus.FORBIDDEN_403); } } } }