Guest User

Untitled

a guest
Dec 14th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. package bgu.spl.mics.application;
  2.  
  3. import bgu.spl.mics.application.Events.BookOrderEvent;
  4. import bgu.spl.mics.application.passiveObjects.*;
  5. import bgu.spl.mics.application.services.*;
  6. import com.google.gson.*;
  7.  
  8. import java.io.File;
  9. import java.io.InputStream;
  10. import java.io.InputStreamReader;
  11. import java.io.Reader;
  12. import java.util.LinkedList;
  13.  
  14. /**
  15. * This is the Main class of the application. You should parse the input file,
  16. * create the different instances of the objects, and run the system.
  17. * In the end, you should output serialized objects.
  18. */
  19. public class BookStoreRunner {
  20. public static void main(String[] args) {
  21. Gson gson = new Gson();
  22. JsonParser parser = new JsonParser();
  23. File JsonFile = new File(args[0]);
  24. InputStream inputStream = BookStoreRunner.class.getClassLoader().getResourceAsStream(JsonFile.getName());
  25. Reader reader = new InputStreamReader(inputStream);
  26. JsonElement rootElement = parser.parse(reader);
  27. JsonObject rootObject = rootElement.getAsJsonObject();
  28.  
  29. //-------------------------- initialInventory --------------------------
  30.  
  31. JsonArray initialInventoryArray = rootObject.getAsJsonArray("initialInventory");
  32. BookInventoryInfo[] bookInventoryInfo = gson.fromJson(initialInventoryArray, BookInventoryInfo[].class);
  33. Inventory.getInstance().load(bookInventoryInfo);
  34. /*loaded bookInventoryInfo*/
  35.  
  36. //-------------------------- initialResources --------------------------
  37.  
  38. JsonArray initialResources = rootObject.getAsJsonArray("initialResources");
  39. JsonObject jsonObject = initialResources.get(0).getAsJsonObject();
  40. JsonArray jsonArray = jsonObject.getAsJsonArray("vehicles");
  41. DeliveryVehicle[] deliveryVehicles = gson.fromJson(jsonArray, DeliveryVehicle[].class);
  42. ResourcesHolder.getInstance().load(deliveryVehicles);
  43. /*loaded deliveryVehicles*/
  44.  
  45. //-------------------------- Services Object --------------------------
  46. JsonObject jsonServicesObj = rootObject.getAsJsonObject("services");
  47.  
  48. //-------------------------- inventory service --------------------------
  49. JsonPrimitive jsonPrimitive = jsonServicesObj.getAsJsonPrimitive("inventoryService");
  50. int inventoryNumber = jsonPrimitive.getAsInt();
  51. Thread[] inventoryServices = new Thread[inventoryNumber];
  52. for (int i = 0; i < inventoryServices.length; i++) {
  53. String name = "inventoryService " + i;
  54. InventoryService toAdd = new InventoryService(name);
  55. inventoryServices[i] = new Thread(toAdd);
  56. }
  57.  
  58. //--------------------- selling ---------------------
  59. JsonPrimitive sellingNum = jsonServicesObj.getAsJsonPrimitive("selling");
  60. int sellingNumber = sellingNum.getAsInt();
  61. Thread[] sellingServices = new Thread[sellingNumber];
  62. for (int i = 0; i< sellingNumber; i++) {
  63. String name = "sellingService " + i;
  64. SellingService toAdd = new SellingService(name);
  65. sellingServices[i] = new Thread(toAdd);
  66. }
  67.  
  68. //--------------------- time ---------------------
  69. JsonObject jsonTimeObject = jsonServicesObj.getAsJsonObject("time");
  70. time time = gson.fromJson(jsonTimeObject, time.class);
  71. TimeService timeService = new TimeService(time);
  72. Thread timer = new Thread(timeService);
  73.  
  74. //--------------------- logistics ---------------------
  75. JsonPrimitive logistics = jsonServicesObj.getAsJsonPrimitive("logistics");
  76. int logisticsNumber = logistics.getAsInt();
  77. Thread[] logisticsServices = new Thread[logisticsNumber];
  78. for(int i = 0; i < logisticsServices.length; i++) {
  79. String name = "logisticService " + i;
  80. LogisticsService toAdd = new LogisticsService(name);
  81. logisticsServices[i] = new Thread(toAdd);
  82. }
  83.  
  84. //--------------------- resource service ---------------------
  85. JsonPrimitive resourcesService = jsonServicesObj.getAsJsonPrimitive("resourcesService");
  86. int resourceServiceNum = resourcesService.getAsInt();
  87. Thread[] resourcesServices = new Thread[resourceServiceNum];
  88. for (int j = 0; j < resourceServiceNum; j++) {
  89. String name = "resourcesService " + j;
  90. ResourceService toAdd = new ResourceService(name);
  91. resourcesServices[j] = new Thread(toAdd);
  92. }
  93.  
  94. //--------------------- customers ---------------------
  95. JsonArray customers = jsonServicesObj.getAsJsonArray("customers");
  96. Customer[] customersArr = gson.fromJson(customers, Customer[].class);
  97. Thread[] APIServices = new Thread[customersArr.length];
  98. for (int k = 0; k < APIServices.length;k++) {
  99. String name = customersArr[k].getName();
  100. LinkedList<BookOrderEvent> list = new LinkedList<>();
  101. for (orderSchedule order: customersArr[k].getOrderSchedule()) {
  102. BookOrderEvent toAdd = new BookOrderEvent(order.getBookTitle(), customersArr[k], order.getTick());
  103. list.add(toAdd);
  104. }
  105. APIService toAdd = new APIService(name, customersArr[k], list);
  106. APIServices[k] = new Thread(toAdd);
  107. }
  108.  
  109. int numOfServices = APIServices.length + resourceServiceNum + logisticsNumber + sellingNumber + inventoryNumber;
  110.  
  111. //-------------Running APIServices--------------
  112. for (int i = 0; i < APIServices.length; i++) {
  113. APIServices[i].start();
  114. }
  115.  
  116. //------------Running resourcesServices--------
  117. for (int i = 0; i < resourcesServices.length; i++) {
  118. resourcesServices[i].start();
  119. }
  120.  
  121. //------------Running logisticsServices------
  122. for (int i = 0; i < logisticsServices.length; i++) {
  123. logisticsServices[i].start();
  124. }
  125.  
  126. //-------------Running sellingServices-----------
  127. for (int i = 0; i < sellingServices.length; i++) {
  128. sellingServices[i].start();
  129. }
  130.  
  131. //------------Running inventorServices-------
  132. for (int i = 0; i < inventoryServices.length; i++) {
  133. inventoryServices[i].start();
  134. }
  135.  
  136. //-----------Running timeService----------
  137. while (RunningCounter.getInstance().getNumberRunningThreads() < numOfServices);
  138. timer.start();
  139. while(RunningCounter.getInstance().getNumberRunningThreads() > 0);
  140. printBookStore();
  141. System.exit(0);
  142.  
  143. }
  144.  
  145. public static void printBookStore() {
  146. Inventory.getInstance().testPrintInventory();
  147. ResourcesHolder.getInstance().testforResources();
  148. MoneyRegister.getInstance().testPrintReceipts();
  149. }
  150. }
Add Comment
Please, Sign In to add comment