package org.smartly.commons.network.socket.server.handlers.impl; import org.smartly.commons.lang.CharEncoding; import org.smartly.commons.logging.Logger; import org.smartly.commons.logging.util.LoggingUtils; import org.smartly.commons.network.socket.messages.rest.RESTMessage; import org.smartly.commons.network.socket.server.handlers.AbstractSocketHandler; import org.smartly.commons.network.socket.server.handlers.SocketRequest; import org.smartly.commons.network.socket.server.handlers.SocketResponse; import org.smartly.commons.remoting.rest.RESTRegistry; import org.smartly.commons.remoting.rest.wrapper.MethodWrapper; /** * REST Command Handler */ public class HandlerREST extends AbstractSocketHandler { public static final String TYPE = RESTMessage.class.getName(); // -------------------------------------------------------------------- // o v e r r i d e // -------------------------------------------------------------------- @Override public void handle(final SocketRequest request, final SocketResponse response) { // manage request if (request.isTypeOf(RESTMessage.class)) { final RESTMessage message = (RESTMessage) request.read(); final Object invoke_response = invoke(message); if (null != invoke_response) { response.write(invoke_response); } } } // -------------------------------------------------------------------- // p r i v a t e // -------------------------------------------------------------------- private static Logger getLogger() { return LoggingUtils.getLogger(HandlerREST.class); } private static Object invoke(final RESTMessage message) { if (null != message) { try { final MethodWrapper mw = RESTRegistry.getMethod(message.getMethod(), message.getPath()); if (null != mw) { final byte[] bytes = mw.execute(message.getPath(), message.getDataAsJSON()); return null != bytes ? new String(bytes, CharEncoding.UTF_8) : ""; } else { // method not found getLogger().error("Method not found: " + message.toString()); } } catch (Throwable t) { return t; } } return null; } }