Package com.vmware.example.sqlfire.service

Source Code of com.vmware.example.sqlfire.service.SimpleStoreService

package com.vmware.example.sqlfire.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.transaction.annotation.Transactional;

import com.vmware.example.sqlfire.data.StoreData;
import com.vmware.example.sqlfire.domain.Order;
import com.vmware.example.sqlfire.domain.OrderItem;
import com.vmware.example.sqlfire.domain.Request;
import com.vmware.example.sqlfire.domain.Response;
import com.vmware.example.sqlfire.util.SimpleIdGenerator;
import com.vmware.example.sqlfire.util.SimpleStopWatch;
import com.vmware.example.sqlfire.util.SimpleTimestampGenerator;

public class SimpleStoreService implements StoreService {

  private static final String ITEM_NAME_PREFIX = "Item-";

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

  private StoreData dao;
  private String storeType;

  @Autowired
  SimpleIdGenerator idGenerator;

  @Autowired
  SimpleTimestampGenerator timestampGenerator;


  @Override
  public Response saveRequest(Request request) {
    logger.debug("Request: " + request);

    logger.debug("Saving: Request" + request);
    dao.saveRequest(request);

    logger.debug("Fetching Response: " + request);
    return getRequest(request.getId());
  }


  @Override
  @Transactional
  public synchronized Response runRequest(Request request) {
    logger.debug("Request: " + request);

    // Start timer
    SimpleStopWatch watch = new SimpleStopWatch(true);

    List<Order> orders = new ArrayList<Order>();

    for (int j = 0; j < request.getOrders(); j++) {

      Order order = new Order();
      order.setOn(timestampGenerator.getNow());
      String oId = request.getId() + "-" + request.getIndex() + "-" + j;
      order.setId(oId);

      for (int i = 0; i < request.getItems(); i++) {
        OrderItem item = new OrderItem();
        item.setName(ITEM_NAME_PREFIX + i);
        item.setPrice(new BigDecimal(i));
        item.setId(oId + "-" + i);
        order.getItems().add(item);
      }

      logger.debug("Saving Order: " + order);
      dao.saveOder(request, order);

      orders.add(order);

    }

    logger.debug("Delete Orders and Order Items for: " + request);
    for (Order order : orders) {
      logger.debug("Delete Order Items: " + order.getId());
      dao.removeOderItems(order.getId());

      logger.debug("Delete Order: " + request.getId());
      dao.removeOders(request.getId());
    }

    // Stop timer
    watch.stop();

    // returns stats only for the current call
    // summary from the seperate call
    Request storeRequest = dao.getRequest(request.getId());
    storeRequest.setOrders(request.getOrders());
    storeRequest.setItems(request.getItems());
    storeRequest.setDuration(watch.getDuration());

    logger.debug("Update Duration: " + storeRequest);
    dao.updateRequestDuration(storeRequest);

    logger.debug("Fetching Response: " + storeRequest);
    return getRequest(request.getId());
  }


  @Override
  public Response getRequest(String requestId) {
    logger.debug("Request Id: " + requestId);

    Response response = new Response();
    response.setRequest(dao.getRequest(requestId));
    response.setStoreType(storeType);

    return response;

  }

  @Required
  public void setDao(StoreData dao) {
    this.dao = dao;
  }


  @Override
  public void setStoreType(String storeType) {
    this.storeType = storeType;
  }


  @Override
  public String getStoreType() {
    return storeType;
  }

}
TOP

Related Classes of com.vmware.example.sqlfire.service.SimpleStoreService

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.