binhonglee/TicketingSystem

View on GitHub
src/VehicleManager.cpp

Summary

Maintainability
Test Coverage
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <json/json.h>
#include "VehicleManager.hpp"
using namespace std;

VehicleManager::VehicleManager()
{

}

VehicleManager::VehicleManager(string jsonFileName)
{
  ifstream jsonFile(jsonFileName.c_str());

  Json::Reader reader;
  Json::Value vehicles;

  ifstream json(jsonFileName.c_str(), ifstream::binary);

  bool parseSuccess = reader.parse(json,vehicles,false);

  if(parseSuccess)
  {
    Json::Value::Members mbr = vehicles.getMemberNames();

    for (vector<string>::const_iterator i = mbr.begin(); i != mbr.end(); i++)
    {
      Json::Value jsonVehicle = vehicles[*i];
      string vhcStr = "vehicle";

      if (vhcStr.compare(*i) == 0)
      {
        string placeholder = jsonVehicle.asString();
      }
      else
      {
        string type = jsonVehicle["Type"].asString();
        int length = jsonVehicle["Length"].asInt();
        int width = jsonVehicle["Width"].asInt();
        string origin = jsonVehicle["Origin"].asString();
        string destination = jsonVehicle["Destination"].asString();
        string dateNtime = jsonVehicle["DateNTime"].asString();
        int id = jsonVehicle["id"].asInt();

        Json::Value jsonSeatMap = jsonVehicle["SeatMap"];
        vector< vector<int> > seatMap;

        for (int i = 0; i < length; i++)
        {
          vector<int> row;

          for (int j = 0; i < width; j++)
          {
            row.push_back(jsonSeatMap[i][j].asInt());
          }

          seatMap.push_back(row);
        }

        Vehicle vehicle(type, length, width, origin, destination, dateNtime, id, seatMap);
        add(vehicle);
      }
    }
  }
}

bool VehicleManager::add(Vehicle newVehicle)
{
  if (newVehicle.getId() <= vehicles.back().getId())
  {
    return false;
  }

  vehicles.push_back(newVehicle);
  return (vehicles.back().getId() == newVehicle.getId());
}

bool VehicleManager::remove(Vehicle toRemove)
{
  for (int i = 0; i < vehicles.size(); i++)
  {
    if (vehicles.at(i).getId() == toRemove.getId())
    {
      vehicles.erase(vehicles.begin() + i);
      return true;
    }
  }

  return false;
}

Vehicle VehicleManager::get(int id)
{
  for (int i = 0; i < vehicles.size(); i++)
  {
    if (vehicles.at(i).getId() == id)
    {
      return vehicles.at(i);
    }
  }
}

void VehicleManager::toJson(string jsonFileName)
{
  Json::Value jsonLib;

  for (int i = 0; i < vehicles.size(); i++)
  {
    Json::Value jsonVehicle;
    Vehicle vehicle  = vehicles.at(i);

    jsonVehicle["Type"] = vehicle.getType();
    jsonVehicle["Length"] = vehicle.getLength();
    jsonVehicle["Width"] = vehicle.getWidth();
    jsonVehicle["Origin"] = vehicle.getOrigin();
    jsonVehicle["Destination"] = vehicle.getDestination();
    jsonVehicle["DateNTime"] = vehicle.getDateNTime();
    jsonVehicle["id"] = vehicle.getId();

    Json::Value seatMap;

    for (int i = 0; i < vehicle.getLength(); i++)
    {
      Json::Value row;
      for (int j = 0; j < vehicle.getWidth(); j++)
      {
        row.append(vehicle.getGuest(i, j));
      }
      seatMap.append(row);
    }
    jsonVehicle["SeatMap"]  = seatMap;
  }

  Json::StyledStreamWriter ssw(" ");
  ofstream jsonOutFile(jsonFileName.c_str(), ofstream::binary);
  ssw.write(jsonOutFile, jsonLib);
}

int VehicleManager::getId()
{
  return (vehicles.back().getId() + 1);
}