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 Paving extends ParentProcess
{
/**
* @author Simon
* Constructor of the paving class
*
* Used to create a new paving 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 Paving(Model owner, ParentProcess parent, String name, boolean showInTrace, int New_pavement, double Total_Area,
double Section_Area, double paving_time, double rock_layer, double paving_preparation)
{
super(owner, name, showInTrace, New_pavement, New_pavement, New_pavement, New_pavement, paving_time, New_pavement, New_pavement, paving_time, paving_time, paving_time, paving_time, paving_time, name, name, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time, paving_time);
myModel = (UtilitySimulation)owner;
newPavement = New_pavement;
total_area = Total_Area;
section_area = Section_Area;
Paving_Time = paving_time;
Parent = parent;
Rock_layer = rock_layer;
Paving_preparation = paving_preparation;
}
/**
* Describes this section's life cycle.
*
*/
public void lifeCycle() {
pave(newPavement);
Parent.activate();
}
void pave(int newPavement)
{
TimeInstant start = myModel.presentTime();
switch (newPavement){
case 1:
// paving all per section
// asphalt paving
myModel.pavecrews.provide(1);
start = myModel.presentTime();
hold (new TimeSpan((myModel.getPaveTime() * (section_area/Paving_Time)), TimeUnit.HOURS));
ActivityMessage msg_1 = new ActivityMessage(myModel, Parent, start, "Pave ", myModel.presentTime(), 0) ;
sendMessage(msg_1);
sendTraceNote("Activity: " + Parent + " Asphalt Paving: " + start.toString() +
" End: " + myModel.presentTime().toString());
myModel.pavecrews.takeBack(1);
myModel.pave();
if (UtilitySimulation.getPaveCounter() == myModel.getNUM_SEC()) {
myModel.pavecrews.stopUse();
myModel.stonepavecrews.stopUse();
myModel.getExperiment().stop();
System.out.println("resource pavecrews stopped at simulation time " + myModel.presentTime());
}
break;
case 2:
// brick pavement per section
// brick paving
myModel.stonepavecrews.provide(1);
start = myModel.presentTime();
hold (new TimeSpan((myModel.getPaveTime() * (section_area/Paving_Time)), TimeUnit.HOURS));
ActivityMessage msg_2 = new ActivityMessage(myModel, Parent, start, "Stone Pave ", myModel.presentTime(), 0) ;
sendMessage(msg_2);
sendTraceNote("Activity: " + Parent + " Stone Paving: " + start.toString() +
" End: " + myModel.presentTime().toString());
myModel.stonepavecrews.takeBack(1);
myModel.pave();
System.out.println(UtilitySimulation.getPaveCounter());
if (UtilitySimulation.getPaveCounter() == myModel.getNUM_SEC()) {
myModel.stonepavecrews.stopUse();
myModel.pavecrews.stopUse();
myModel.getExperiment().stop();
System.out.println("resource pavecrews stopped at simulation time " + myModel.presentTime());
}
break;
case 3:
// roll/prepare surface - broken rock for asphalt paving
if (UtilitySimulation.getBackfillCounter() == myModel.getNUM_SEC()){
myModel.trucks.provide(1);
start = myModel.presentTime();
hold (new TimeSpan((myModel.getSurfacePrepareTime() * ((total_area * Rock_layer )/Paving_preparation)), TimeUnit.HOURS));
ActivityMessage msg_3 = new ActivityMessage(myModel, Parent, start, "Roll all", myModel.presentTime(), 0) ;
sendMessage(msg_3);
sendTraceNote("Activity: " + getName() + " Broken rock all: " + start.toString() +
" End: " + myModel.presentTime().toString());
myModel.trucks.takeBack(1);
myModel.rollers.stopUse();
System.out.println("resource rollers stopped at simulation time " + myModel.presentTime());
}
// asphalt pavement all sections at once
if (UtilitySimulation.getBackfillCounter() == myModel.getNUM_SEC()){
myModel.pavecrews.provide(1);
start = myModel.presentTime();
hold (new TimeSpan((myModel.getPaveTime() * (total_area/Paving_Time)), TimeUnit.HOURS));
ActivityMessage msg_4 = new ActivityMessage(myModel, Parent, start, "Pave all ", myModel.presentTime(), 0) ;
sendMessage(msg_4);
sendTraceNote("Activity: " + Parent + " Asphalt Paving: " + start.toString() +
" End: " + myModel.presentTime().toString());
myModel.pavecrews.takeBack(1);
myModel.pavecrews.stopUse();
myModel.stonepavecrews.stopUse();
myModel.getExperiment().stop();
System.out.println("resource pavecrews stopped at simulation time " + myModel.presentTime());
}
else{
// After last section paving of entire work starts.
// so all preceding sections have no paving activities
System.out.println(Parent + " No paving activities, all in last " + myModel.presentTime());
}
break;
default:
// no paving activities
myModel.pave();
System.out.println("No paving activities performed " + myModel.presentTime());
System.out.println(Parent + " completed");
if (UtilitySimulation.getPaveCounter() == (myModel.getNUM_SEC())) {
myModel.stonepavecrews.stopUse();
myModel.pavecrews.stopUse();
myModel.getExperiment().stop();
System.out.println("resource pavecrews stopped at simulation time " + myModel.presentTime());
}
break;
}
}
private UtilitySimulation myModel;
private int newPavement;
private double section_area;
private double total_area;
private double Paving_Time;
private ParentProcess Parent;
private double Rock_layer;
private double Paving_preparation;
}