package org.visico.utilitydss.server.processsim; import java.util.concurrent.TimeUnit; import desmoj.core.simulator.Model; import desmoj.core.simulator.SimProcess; import desmoj.core.simulator.TimeInstant; import desmoj.core.simulator.TimeSpan; public class Breaking extends ParentProcess { /** * @author Simon * Constructor of the breaking class * * Used to create a new breaking operation in a section of a sewer line to be replaced * * @param owner the model this process belongs to * @param name this section's name * @param showInTrace flag to indicate if this process shall produce output * for the trace */ public Breaking(Model owner, ParentProcess parent, String name, boolean showInTrace, int Old_pavement, double Total_Area, double Section_Area, double remove_pavement) { super(owner, name, showInTrace, Old_pavement, Old_pavement, Old_pavement, Old_pavement, remove_pavement, Old_pavement, Old_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, name, name, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement, remove_pavement); myModel = (UtilitySimulation)owner; oldPavement = Old_pavement; total_area = Total_Area; section_area = Section_Area; Remove_Pavement = remove_pavement; Parent = parent; } /** * Describes this section's life cycle. * */ public void lifeCycle() { removePavement(oldPavement); Parent.activate(); } void removePavement(int oldPavement) { TimeInstant start = myModel.presentTime(); switch(oldPavement){ case 1: // asphalt pavement removal per section // Break asphalt per section myModel.breakers.provide(1); start = myModel.presentTime(); hold (new TimeSpan((myModel.getBreakingTime() * (section_area/Remove_Pavement)), TimeUnit.HOURS)); ActivityMessage msg_1 = new ActivityMessage(myModel, Parent, start, "Break Section ", myModel.presentTime(), 0) ; sendMessage(msg_1); sendTraceNote("Activity: " + Parent + " Breaking Start: " + start.toString() + " End: " + myModel.presentTime().toString()); myModel.breakers.takeBack(1); myModel.breaking(); if (UtilitySimulation.getBreakCounter() == myModel.getNUM_SEC()){ myModel.breakers.stopUse(); System.out.println("resource breakers stopped at simulation time " + myModel.presentTime()); } break; case 2: // brick pavement removal per section myModel.crews.provide(1); myModel.excavators.provide(1); start = myModel.presentTime(); hold (new TimeSpan((myModel.getBreakingTime() * (section_area/Remove_Pavement)), TimeUnit.HOURS)); ActivityMessage msg_2 = new ActivityMessage(myModel, Parent, start, "Remove Stones Section ", myModel.presentTime(), 0); sendMessage(msg_2); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); sendTraceNote("Activity: " + Parent + " Breaking Start: " + start.toString() + " End: " + myModel.presentTime().toString()); System.out.println("stones removed at simulation time " + myModel.presentTime()); break; case 3: // Breaking ashpalt pavement all sections at once. if (Parent.getIdentNumber() == (1)){ myModel.breakers.provide(1); start = myModel.presentTime(); hold (new TimeSpan((myModel.getBreakingTime() * (total_area/Remove_Pavement)), TimeUnit.HOURS)); ActivityMessage msg_3 = new ActivityMessage(myModel, Parent, start, "Break all ", myModel.presentTime(), 0) ; sendMessage(msg_3); sendTraceNote("Activity: " + Parent + " Breaking Start: " + start.toString() + " End: " + myModel.presentTime().toString()); myModel.breakers.takeBack(1); myModel.breakers.stopUse(); System.out.println("resource breakers stopped at simulation time " + myModel.presentTime()); } else{ // Breaking happens once for all sections // so all following sections have no breaking activities System.out.println(Parent + " No breaking activities, all in first " + myModel.presentTime()); } break; default: // no pavement removal System.out.println("No breaking activities performed because there was no pavement" + myModel.presentTime()); break; }} private UtilitySimulation myModel; private int oldPavement; private double section_area; private double total_area; private double Remove_Pavement; private ParentProcess Parent; }