package com.telefonica.claudia.slm.monitoring; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import javax.jms.JMSException; import javax.naming.NamingException; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.restlet.Component; import org.restlet.Restlet; import org.restlet.data.*; import org.restlet.resource.FileRepresentation; import org.restlet.resource.StringRepresentation; import com.telefonica.claudia.slm.common.SMConfiguration; public class ContextualizationListener { private static final String repositoryDir = "./repository/"; private Component component = null; private String host = null; private int port = -1; private String contextPath = null; private boolean running = false; private static Logger logger = Logger.getLogger(ContextualizationListener.class); private static ContextualizationListener _instance = null; static { logger.setLevel(Level.INFO); } public static ContextualizationListener getInstance() { if(_instance == null) _instance = new ContextualizationListener(); return _instance; } private ContextualizationListener() { this(SMConfiguration.getInstance().getImagesServerHost(), SMConfiguration.getInstance().getImagesServerPort(), SMConfiguration.getInstance().getImagesServerPath()); } private ContextualizationListener (String host, int port, String contextPath){ if(host == null) throw new IllegalArgumentException("Inet address cannot be null"); if(contextPath == null) throw new IllegalArgumentException("Path of rest server cannot be null"); if(port <= 0) throw new IllegalArgumentException("Port must be a positive number"); this.host = host; this.port = port; this.contextPath = contextPath; } public void start() throws JMSException, NamingException { logger.info("Starting Image REST server"); component = new Component(); component.getServers().add(Protocol.HTTP, host, port); // component.getContext().getAttributes().put(SM_MONITOR_CONTEXT_FOR_RESTLET_COMPONENTS, monitoringDataForwarder); // component.getDefaultHost().attach(new MonitoringRestletApplication(component.getContext(), monitoringPath)); try { SMConfiguration.loadProperties(); } catch (Exception e) { e.printStackTrace(); System.exit(0); } String customImagesDir = repositoryDir + SMConfiguration.getInstance().getImagesServerPath(); // TODO Auto-generated method stub // Create a new Restlet component and add a HTTP server connector to it Component component = new Component(); // component.getServers().add(Protocol.HTTP,SMConfiguration.getInstance().getImagesServerPort()); // Create a new tracing Restlet Restlet restlet = new Restlet() { public void handle(Request request, Response response) { // Print the requested URI path String message = "Resource URI : " + request.getResourceRef() + '\n' + "Root URI : " + request.getRootRef() + '\n' + "Routed part : " + request.getResourceRef().getBaseRef() + '\n' + "Remaining part: " + request.getResourceRef().getRemainingPart(); response.setEntity(message, MediaType.TEXT_PLAIN); String readFileAsString = null; // "./target/clotho-0.1.14-SNAPSHOT-environment/clotho/repository/" + request.getResourceRef().getRemainingPart() try { readFileAsString = readFileAsString (repositoryDir + request.getResourceRef().getRemainingPart()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { FileRepresentation representation = new FileRepresentation(repositoryDir + request.getResourceRef().getRemainingPart(), MediaType.TEXT_XML); System.out.println("Data representation returned [" + readFileAsString + "]"); response.setStatus(Status.SUCCESS_OK); response.setEntity(representation); } catch (Exception e) { response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST); } } }; System.out.println (SMConfiguration.getInstance().getImagesServerPath()); // Then attach it to the local host component.getDefaultHost().attach(SMConfiguration.getInstance().getImagesServerPath(), restlet); // Now, let's start the component! // Note that the HTTP server connector is also automatically started. try { component.start(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } running = true; logger.info("Image REST server listening at " + host + ":" + port); } public void stop() { if(!running){ logger.warn("Rest bus connector is not started, ignoring stop petition..."); return; } logger.info("Stopping REST server"); try { component.stop(); } catch (Exception ex) { logger.error("Exception caught when trying to close Rest server", ex); } logger.info("REST server stopped"); logger.info("Closing bus connection"); logger.info("Bus connection closed"); running = false; } private String readFileAsString(String filePath) throws java.io.IOException{ StringBuffer fileData = new StringBuffer(1000); BufferedReader reader = new BufferedReader( new FileReader(filePath)); char[] buf = new char[1024]; int numRead=0; while((numRead=reader.read(buf)) != -1){ String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); buf = new char[1024]; } reader.close(); return fileData.toString(); } }