Guest User

Untitled

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