package jetbrains.mps.ide.httpsupport.manager.plugin; /*Generated by MPS */ import org.jetbrains.ide.HttpRequestHandler; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.jetbrains.annotations.NotNull; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.QueryStringDecoder; import io.netty.channel.ChannelHandlerContext; import java.io.IOException; import java.net.URISyntaxException; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.smodel.structure.ExtensionPoint; import io.netty.handler.codec.http.HttpResponseStatus; import org.apache.log4j.Level; public class MPSRequestManager extends HttpRequestHandler { private static final Logger LOG = LogManager.getLogger(MPSRequestManager.class); @Override public boolean isSupported(@NotNull FullHttpRequest request) { return request.method() == HttpMethod.GET; } @Override public boolean process(@NotNull QueryStringDecoder decoder, @NotNull FullHttpRequest request, @NotNull ChannelHandlerContext context) throws IOException { HttpRequest boxedRequest; try { boxedRequest = new HttpRequest(request, decoder, context.channel()); } catch (URISyntaxException exception) { return false; } for (IHttpRequestHandlerFactory handlerFactory : Sequence.fromIterable(new ExtensionPoint<IHttpRequestHandlerFactory>("jetbrains.mps.ide.httpsupport.HttpRequestHandlerEP").getObjects())) { IHttpRequestHandler handler = handlerFactory.create(boxedRequest); if (handler.canHandle()) { try { handler.handle(); } catch (Throwable e) { handleException(e, handlerFactory, boxedRequest); } finally { return true; } } } return false; } public void handleException(Throwable e, IHttpRequestHandlerFactory factory, HttpRequest request) { String errorHeader = "Request handler '" + factory.getHandlerName() + "' throws exception"; request.sendErrorResponse(HttpResponseStatus.INTERNAL_SERVER_ERROR, errorHeader, e); if (LOG.isEnabledFor(Level.ERROR)) { LOG.error(errorHeader, e); } } }