Package com.cisco.oss.foundation.tools.simulator.rest.service

Source Code of com.cisco.oss.foundation.tools.simulator.rest.service.SimulatorService

/*
* Copyright 2014 Cisco Systems, Inc.
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*  http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/

package com.cisco.oss.foundation.tools.simulator.rest.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.Servlet;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.UriInfo;

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.cisco.oss.foundation.configuration.ConfigurationFactory;
import com.cisco.oss.foundation.http.server.jetty.JettyHttpServerFactory;
import com.cisco.oss.foundation.tools.simulator.rest.container.SimulatorEntity;
import com.cisco.oss.foundation.tools.simulator.rest.container.SimulatorRequest;
import com.cisco.oss.foundation.tools.simulator.rest.container.SimulatorResponse;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;

public class SimulatorService {

  private static Logger logger = LoggerFactory.getLogger(SimulatorService.class);

  private Map<Integer, SimulatorEntity> simulators = new HashMap<Integer, SimulatorEntity>();

  private static SimulatorService simulatorService;

  private SimulatorService() {

  }

  public static SimulatorService getInstance() {

    if (simulatorService == null) {
      simulatorService = new SimulatorService();
    }
    return simulatorService;
  }

  public boolean addSimulator(int port) throws Exception {
   
    String serverName = "ServerSim_" + port;
   
    ConfigurationFactory.getConfiguration().setProperty(serverName + ".http.port", port);

    if (simulatorExists(port)) {
      logger.error("simulator on port " + port + " already exists");
      return false;
    }

        ResourceConfig resourceConfig = new ResourceConfig();
        resourceConfig.packages("com.cisco.oss.foundation.tools");
   
    ServletContainer servletContainer = new ServletContainer(resourceConfig);
   
    ListMultimap<String, Servlet> servlets = ArrayListMultimap.create();
    servlets.put("/*", servletContainer);
   
    JettyHttpServerFactory.INSTANCE.startHttpServer(serverName, servlets);
   
//    Server server = new Server(port);
//
//    Context root = new Context(server, "/", Context.SESSIONS);
//        ServletHolder holder = new ServletHolder(servletContainer);
//    root.addServlet(holder, "/");
//    try {
//      server.start();
//    } catch (BindException e) {
//      logger.error("can't create simulator", e);
//      return false;
//    }
//        holder.setInitParameter("port", Integer.toString(port));

    logger.debug("simulator was added on port:" + port);

    SimulatorEntity simulatorEntity = new SimulatorEntity(port);
   
    simulators.put(port, simulatorEntity);
 
    return true;
  }

  public boolean addResponsesToSimulator(int port, List<SimulatorResponse> defaultResponses) {
   
    boolean oneOrMordeFailed = false;
   
    for (SimulatorResponse response : defaultResponses) {
      boolean added = addResponseToSimulator(port, response);
     
      if (!added) {
        logger.error("adding simulatorResponses to simulator on port " + port + ", failed loading response. " + response.toString());
        oneOrMordeFailed = true;
      }
    }
   
    return !oneOrMordeFailed;
  }
 
  public boolean addResponseToSimulator(int port, SimulatorResponse response) {

    if (!simulatorExists(port)) {
      logger.error("there is no simulator on port " + port);
      return false;
    }
 
    List<SimulatorResponse> responses = simulators.get(port).getSimulatorResponses();
   
    responses.add(response);

    logger.debug("response was added to simulator on port:" + port);
    return true;
  }

  public void deleteSimulator(int port) throws Exception {
   
    if (!simulatorExists(port)) {
      logger.debug("there is no simulator on port " + port);
      return;
    }
//    SimulatorEntity simulatorEntity = simulators.get(port);
   
    String serverName = "ServerSim_" + port;
   
    JettyHttpServerFactory.INSTANCE.stopHttpServer(serverName);
   
    logger.debug("simulator on port " + port + " was stoped");
   
    simulators.remove(port);
  }

  public SimulatorEntity getSimulator(int port) {
    return simulators.get(port);
  }

  public boolean simulatorExists(int port) {
    return simulators.containsKey(port);
  }

  public ResponseBuilder retrieveResponse(String method, HttpServletRequest httpServletRequest, UriInfo uriInfo, HttpHeaders headers, String body) {

        int port = httpServletRequest.getLocalPort();
   
    if (!simulatorExists(port)) {
      logger.error("there is no simulator on port " + port);
      Response.status(0).build();
    }
   
    SimulatorEntity simulator = simulators.get(port);
    String path = uriInfo.getPath();
    path = removeFirstAndLastSlashesFromUrl(path);
    SimulatorRequest simulatorRequest = new SimulatorRequest(method, path, uriInfo.getQueryParameters(),
        headers.getRequestHeaders(), body);
   
    simulator.addRequestToQueue(simulatorRequest);
   
    return simulator.generateResponse(simulatorRequest);
   
  }
 
  private String removeFirstAndLastSlashesFromUrl(String expectedUrl) {
    // will remove the first and last '/'
    if (expectedUrl.startsWith("/")) {
      expectedUrl = expectedUrl.substring(1);
    }
    if (expectedUrl.endsWith("/")) {
      expectedUrl = expectedUrl.substring(0, expectedUrl.length() - 1);
    }
    return expectedUrl;
  }

  public List<SimulatorRequest> getAllQueueOfSimulator(int port) {

    SimulatorEntity simulator = getSimulator(port);
   
    if (simulator != null) {
      return simulator.getAllRequests();
    }
    return null;
  }

  public List<SimulatorRequest> getQueueOfSimulator(int port, int numOfMsg) {
   
    SimulatorEntity simulator = getSimulator(port);

    if (simulator != null) {
      return simulator.getLastRequests(numOfMsg);
    }
    return null;
  }

  public void removeQueueOfSimulator(int port) {
    SimulatorEntity simulator = getSimulator(port);

    if (simulator != null) {
      simulator.removeAllRequests();
      logger.debug("queue of requests was removed for simulator on port:" + port);
    }
  }

  public SimulatorRequest removeLastRequestOfSimulator(int port) {
    SimulatorEntity simulator = getSimulator(port);

    if (simulator != null) {
      SimulatorRequest removedLastRequest = simulator.removeLastRequest();
      logger.debug("last request was removed for simulator on port:" + port);
      return removedLastRequest;
    }
   
    return null;
  }
 
  public boolean addNextResponseToSimulator(int port,  SimulatorResponse simulatorNextResponse) {
    if (!simulatorExists(port)) {
      logger.error("there is no simulator on port " + port);
      return false;
    }
 
    SimulatorEntity simulator = simulators.get(port);
    simulator.setSimulatorNextResponse(simulatorNextResponse);
   
    logger.debug("next response was added to simulator on port:" + port);
   
    return true;
  }

  public boolean deleteNextResponseForSimulator(int port) {
    if (!simulatorExists(port)) {
      logger.error("there is no simulator on port " + port);
      return false;
    }
 
    SimulatorEntity simulator = simulators.get(port);
    simulator.setSimulatorNextResponse(null);
   
    logger.debug("next response was deleted for simulator on port:" + port);
   
    return true;
   
  }

}
TOP

Related Classes of com.cisco.oss.foundation.tools.simulator.rest.service.SimulatorService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.