/** * Copyright (C) 2010 BonitaSoft S.A. * BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2.0 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.simulation; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.GregorianCalendar; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.bonitasoft.simulation.model.Period; import org.bonitasoft.simulation.model.RepartitionType; import org.bonitasoft.simulation.model.TimeUnit; import org.bonitasoft.simulation.model.calendar.SimCalendar; import org.bonitasoft.simulation.model.calendar.SimCalendarPeriod; import org.bonitasoft.simulation.model.calendar.SimCalendarTime; import org.bonitasoft.simulation.model.loadprofile.InjectionPeriod; import org.bonitasoft.simulation.model.loadprofile.LoadProfile; import org.bonitasoft.simulation.model.process.JoinType; import org.bonitasoft.simulation.model.process.NumericRange; import org.bonitasoft.simulation.model.process.ResourceAssignement; import org.bonitasoft.simulation.model.process.SimActivity; import org.bonitasoft.simulation.model.process.SimBooleanData; import org.bonitasoft.simulation.model.process.SimLiteral; import org.bonitasoft.simulation.model.process.SimLiteralsData; import org.bonitasoft.simulation.model.process.SimNumberData; import org.bonitasoft.simulation.model.process.SimProcess; import org.bonitasoft.simulation.model.process.SimTransition; import org.bonitasoft.simulation.model.resource.Resource; /** * @author Romain Bioteau * */ public class SimulationTestUtil { public static final int RD_QUANTITY =5; public static final int MANAGER = 3; public static SimProcess createProcessDefinitionHourScaled() throws Exception { SimProcess proc = new SimProcess("TestSimulationProcess"); SimActivity start = new SimActivity("Start",proc.getName(),true,true); List<Resource> ressources = createResources() ; SimActivity a1 = new SimActivity("Activity1",proc.getName(),4*3600000,0,6*3600000,false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),2*3600000,1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(0),4*3600000,1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),60*60000,0,2*3600000,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),60*60000,1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),60*60000,1)); SimTransition t1 = new SimTransition("t1",a1,false,0.3); SimTransition t2 = new SimTransition("t2",a2,false,0.7); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); proc.addStartElement(start); return proc ; } public static SimProcess createProcessDefinitionMinuteScaled() throws Exception { SimProcess proc = new SimProcess("TestSimulationProcess"); SimActivity start = new SimActivity("Start",proc.getName(),true,true); List<Resource> ressources = createResources() ; SimActivity a1 = new SimActivity("Activity1",proc.getName(),30*60000,0,0,false,false) ;//30MIN a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),15*60000,1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(0),30*60000,1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),15*60000,0,0,false,false) ;//15MIN a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),15*60000,1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),15*60000,1)); SimTransition t1 = new SimTransition("t1",a1,false,0.5); SimTransition t2 = new SimTransition("t2",a2,false,0.5); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); proc.addStartElement(start); return proc ; } public static SimProcess createProcessDefinition() throws Exception { SimProcess proc = new SimProcess("TestSimulationProcess"); SimActivity start = new SimActivity("Start",proc.getName(),true,true); List<Resource> ressources = createResources() ; SimActivity a1 = new SimActivity("Activity1",proc.getName(),4*3600000,0,0,false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),1*3600000,1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(0),4*3600000,1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),60*60000,0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),30*60000,1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),60*60000,1)); SimActivity a3 = new SimActivity("Activity3",proc.getName(),10*60000,0,0,false,false) ; a3.addResourceAssignement(new ResourceAssignement(ressources.get(1),10*60000,1)); SimTransition t1 = new SimTransition("t1",a1,false,0.3); SimTransition t2 = new SimTransition("t2",a2,false,0.7); SimTransition t3 = new SimTransition("t3",a3,false,1.0); SimTransition t4 = new SimTransition("t4",a3,false,1.0); a2.addOutgoingTransition(t3); a1.addOutgoingTransition(t4); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); proc.addStartElement(start); return proc ; } public static SimProcess createProcessDefinitionBasedOnData() throws Exception { SimProcess proc = new SimProcess("TestSimulationProcessWithData"); proc.addData(new SimBooleanData("approved", 0.5)); //$NON-NLS-1$ NumericRange range = new NumericRange(800, 1200, 1.0, null) ; proc.addData(new SimNumberData("amount", Collections.singletonList(range))); //$NON-NLS-1$ SimLiteral l1 = new SimLiteral("high", 0.5); SimLiteral l2 = new SimLiteral("low", 0.5); List<SimLiteral> list = new ArrayList<SimLiteral>(); list.add(l1); list.add(l2); proc.addData(new SimLiteralsData("risk",list)); //$NON-NLS-1$ SimActivity start = new SimActivity("Start",proc.getName(),true,true); List<Resource> ressources = createResources() ; SimActivity a1 = new SimActivity("Activity1",proc.getName(),4*3600000,0,0,false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),2*3600000,1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(0),4*3600000,1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),60*60000,0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),60*60000,1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),60*60000,1)); SimActivity a3 = new SimActivity("Activity3",proc.getName(),60*60000,0,0,false,false) ; a3.addResourceAssignement(new ResourceAssignement(ressources.get(1),60*60000,1)); a3.addResourceAssignement(new ResourceAssignement(ressources.get(0),60*60000,1)); SimActivity a4 = new SimActivity("Activity4",proc.getName(),60*60000,0,0,false,false) ; a4.addResourceAssignement(new ResourceAssignement(ressources.get(1),60*60000,1)); a4.addResourceAssignement(new ResourceAssignement(ressources.get(0),60*60000,1)); SimTransition a1Toa3 = new SimTransition("a1ToA3",a3,true,"risk == \"low\""); SimTransition a2Toa4 = new SimTransition("a2ToA4",a4,true,"approved"); SimTransition t1 = new SimTransition("t1",a1,true,"amount > 1000"); SimTransition t2 = new SimTransition("t2",a2,true,"amount <= 1000"); a1.addOutgoingTransition(a1Toa3); a2.addOutgoingTransition(a2Toa4); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); proc.addStartElement(start); return proc ; } public static LoadProfile createLoadProfileWithMediumDensity() throws Exception { Calendar myInstance = GregorianCalendar.getInstance() ; List<InjectionPeriod> injections = new ArrayList<InjectionPeriod>(); myInstance.set(2010, 6, 1, 0, 0); long p1Start = myInstance.getTimeInMillis() ; myInstance.add(Calendar.MONTH, 50) ; long p1End = myInstance.getTimeInMillis() ; Period period1 = new Period(p1Start, p1End) ; injections.add(new InjectionPeriod(period1,5000,RepartitionType.CONSTANT)); LoadProfile lp = new LoadProfile(createWorkingWeekCalendar(), injections); return lp ; } public static LoadProfile createLoadProfileWithHighDensity() throws Exception { Calendar myInstance = GregorianCalendar.getInstance() ; List<InjectionPeriod> injections = new ArrayList<InjectionPeriod>(); myInstance.set(2010, 6, 1, 0, 0); long p1Start = myInstance.getTimeInMillis() ; myInstance.add(Calendar.MONTH, 10) ; long p1End = myInstance.getTimeInMillis() ; Period period1 = new Period(p1Start, p1End) ; injections.add(new InjectionPeriod(period1,5000,RepartitionType.CONSTANT)); LoadProfile lp = new LoadProfile(createWorkingWeekCalendar(), injections); return lp ; } public static LoadProfile createLoadProfileWithLowDensity() throws Exception { Calendar myInstance = GregorianCalendar.getInstance() ; List<InjectionPeriod> injections = new ArrayList<InjectionPeriod>(); myInstance.set(2010, 6, 1, 0, 0); long p1Start = myInstance.getTimeInMillis() ; myInstance.add(Calendar.MONTH, 30) ; long p1End = myInstance.getTimeInMillis() ; Period period1 = new Period(p1Start, p1End) ; injections.add(new InjectionPeriod(period1,5000,RepartitionType.CONSTANT)); LoadProfile lp = new LoadProfile(createWorkingWeekCalendar(), injections); return lp ; } public static LoadProfile createLoadProfileWithVeryLowDensity() throws Exception { Calendar myInstance = GregorianCalendar.getInstance() ; List<InjectionPeriod> injections = new ArrayList<InjectionPeriod>(); myInstance.set(2010, 6, 1, 0, 0); long p1Start = myInstance.getTimeInMillis() ; myInstance.add(Calendar.DAY_OF_MONTH, 10) ; long p1End = myInstance.getTimeInMillis() ; Period period1 = new Period(p1Start, p1End) ; injections.add(new InjectionPeriod(period1,1,RepartitionType.CONSTANT)); LoadProfile lp = new LoadProfile(createWorkingWeekCalendar(), injections); return lp ; } public static SimProcess createRealProcWithData() throws Exception{ List<Resource> ressources = createRealResources(); SimProcess proc = new SimProcess("RealProcessWithData",SimulationTestUtil.getHoursIntoMilliseconds(100)); List<NumericRange> nr = new ArrayList<NumericRange>(); nr.add(new NumericRange(500, 1500, 0.5, RepartitionType.CONSTANT)); nr.add(new NumericRange(1501,2500, 0.5, RepartitionType.CONSTANT)); proc.addData(new SimNumberData("amount", nr)); List<SimLiteral> literals = new ArrayList<SimLiteral>(); literals.add(new SimLiteral("high",0.6)); literals.add(new SimLiteral("low",0.4)); proc.addData(new SimLiteralsData("risk", literals)) ; SimActivity start = new SimActivity("Start",proc.getName(),false,true); proc.addStartElement(start); SimActivity a1 = new SimActivity("Activity1",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),SimulationTestUtil.getHoursIntoMilliseconds(6),SimulationTestUtil.getHoursIntoMilliseconds(10),false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t1 = new SimTransition("t1",a1,true,"amount > 1500"); SimTransition t2 = new SimTransition("t2",a2,true,"amount <= 1500"); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); SimActivity a3 = new SimActivity("Activity3",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; a3.addData(new SimLiteralsData("risk", "if(amount < 800){return \"high\"}else{return \"low\"}")); a3.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a3.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity waitMessage1 = new SimActivity("Receive Order",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,true) ; //$NON-NLS-1$ SimTransition t3 = new SimTransition("t3",a3,false,1.0); SimTransition t4 = new SimTransition("t4",waitMessage1,false,1.0); a2.addOutgoingTransition(t3); a1.addOutgoingTransition(t4); SimActivity gate1 = new SimActivity("Gate1",proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t5 = new SimTransition("t5",gate1,false,1.0); SimTransition t6 = new SimTransition("t6",gate1,false,1.0); a3.addOutgoingTransition(t5) ; waitMessage1.addOutgoingTransition(t6) ; SimActivity activity5 = new SimActivity("Activity5",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,true,false) ; //$NON-NLS-1$ activity5.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity5.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimTransition t15 = new SimTransition("t15",activity5,false,1.0); gate1.addOutgoingTransition(t15) ; SimActivity activity6 = new SimActivity("Activity6",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(5),0,0,false,false) ; //$NON-NLS-1$ activity6.addResourceAssignement(new ResourceAssignement(ressources.get(2),SimulationTestUtil.getHoursIntoMilliseconds(5),1)); activity6.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(3),1)); // SimTransition t7 = new SimTransition("t7",activity5,false,0.2); SimTransition t8 = new SimTransition("t8",activity6,false,1.0); // activity5.addOutgoingTransition(t7); activity5.addOutgoingTransition(t8) ; SimActivity gate2 = new SimActivity("Gate2",JoinType.XOR,proc.getName(),false) ; //$NON-NLS-1$ SimTransition t9 = new SimTransition("t9",gate2,false,1.0); activity6.addOutgoingTransition(t9) ; SimActivity activity7 = new SimActivity("Activity7",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ activity7.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity wait = new SimActivity("wait",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; //$NON-NLS-1$ SimActivity activity8 = new SimActivity("Activity8",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),0,0,false,false) ; //$NON-NLS-1$ activity8.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(4),3)); SimTransition t10 = new SimTransition("t10",activity7,false,1.0); SimTransition t11 = new SimTransition("t11",wait,false,1.0); SimTransition tWait = new SimTransition("waitToA8",activity8,false,1.0); wait.addOutgoingTransition(tWait); gate2.addOutgoingTransition(t10) ; gate2.addOutgoingTransition(t11) ; SimActivity gate3 = new SimActivity("Gate3",JoinType.AND,proc.getName(),true) ; //$NON-NLS-1$ SimTransition t8Gate3 = new SimTransition("t8Gate3",gate3,false,1.0); SimTransition t7Gate3 = new SimTransition("t7Gate3",gate3,false,1.0); activity8.addOutgoingTransition(t8Gate3); activity7.addOutgoingTransition(t7Gate3); SimActivity wait2 = new SimActivity("Receive Confirmation",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ SimTransition t12 = new SimTransition("t12",wait2,false,1.0); gate3.addOutgoingTransition(t12) ; SimActivity activity9 = new SimActivity("Activity9",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ activity9.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity9.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity activity10 = new SimActivity("Activity10",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; //$NON-NLS-1$ activity10.addResourceAssignement(new ResourceAssignement(ressources.get(2),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t13 = new SimTransition("t13",activity9,false,1.0); SimTransition t14 = new SimTransition("t14",activity10,false,1.0); wait2.addOutgoingTransition(t13) ; wait2.addOutgoingTransition(t14) ; return proc ; } public static SimProcess createRealProc() throws Exception{ List<Resource> ressources = createRealResources(); SimProcess proc = new SimProcess("RealProcess",SimulationTestUtil.getHoursIntoMilliseconds(10)); SimActivity start = new SimActivity("Start",proc.getName(),true,true); start.addResourceAssignement(new ResourceAssignement(ressources.get(1),0,1)) ; proc.addStartElement(start); SimActivity a1 = new SimActivity("Activity1",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),SimulationTestUtil.getHoursIntoMilliseconds(6),SimulationTestUtil.getHoursIntoMilliseconds(10),false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t1 = new SimTransition("t1",a1,false,0.3); SimTransition t2 = new SimTransition("t2",a2,false,0.7); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); SimActivity a3 = new SimActivity("Activity3",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; a3.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a3.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity waitMessage1 = new SimActivity("Receive Order",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,true) ; //$NON-NLS-1$ SimTransition t3 = new SimTransition("t3",a3,false,1.0); SimTransition t4 = new SimTransition("t4",waitMessage1,false,1.0); a2.addOutgoingTransition(t3); a1.addOutgoingTransition(t4); SimActivity gate1 = new SimActivity("Gate1",proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t5 = new SimTransition("t5",gate1,false,1.0); SimTransition t6 = new SimTransition("t6",gate1,false,1.0); a3.addOutgoingTransition(t5) ; waitMessage1.addOutgoingTransition(t6) ; SimActivity activity5 = new SimActivity("Activity5",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,true,false) ; //$NON-NLS-1$ activity5.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity5.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimTransition t15 = new SimTransition("t15",activity5,false,1.0); gate1.addOutgoingTransition(t15) ; SimActivity activity6 = new SimActivity("Activity6",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(5),0,0,false,false) ; //$NON-NLS-1$ activity6.addResourceAssignement(new ResourceAssignement(ressources.get(2),SimulationTestUtil.getHoursIntoMilliseconds(5),1)); activity6.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(3),1)); // SimTransition t7 = new SimTransition("t7",activity5,false,0.2); SimTransition t8 = new SimTransition("t8",activity6,false,1.0); // activity5.addOutgoingTransition(t7); activity5.addOutgoingTransition(t8) ; SimActivity gate2 = new SimActivity("Gate2",JoinType.XOR,proc.getName(),false) ; //$NON-NLS-1$ SimTransition t9 = new SimTransition("t9",gate2,false,1.0); activity6.addOutgoingTransition(t9) ; SimActivity activity7 = new SimActivity("Activity7",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ activity7.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity wait = new SimActivity("wait",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; //$NON-NLS-1$ SimActivity activity8 = new SimActivity("Activity8",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),0,0,false,false) ; //$NON-NLS-1$ activity8.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(4),3)); SimTransition t10 = new SimTransition("t10",activity7,false,1.0); SimTransition t11 = new SimTransition("t11",wait,false,1.0); SimTransition tWait = new SimTransition("waitToA8",activity8,false,1.0); wait.addOutgoingTransition(tWait); gate2.addOutgoingTransition(t10) ; gate2.addOutgoingTransition(t11) ; SimActivity gate3 = new SimActivity("Gate3",JoinType.AND,proc.getName(),true) ; //$NON-NLS-1$ SimTransition t8Gate3 = new SimTransition("t8Gate3",gate3,false,1.0); SimTransition t7Gate3 = new SimTransition("t7Gate3",gate3,false,1.0); activity8.addOutgoingTransition(t8Gate3); activity7.addOutgoingTransition(t7Gate3); SimActivity wait2 = new SimActivity("Receive Confirmation",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ SimTransition t12 = new SimTransition("t12",wait2,false,1.0); gate3.addOutgoingTransition(t12) ; SimActivity activity9 = new SimActivity("Activity9",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ activity9.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity9.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity activity10 = new SimActivity("Activity10",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; //$NON-NLS-1$ activity10.addResourceAssignement(new ResourceAssignement(ressources.get(2),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t13 = new SimTransition("t13",activity9,false,1.0); SimTransition t14 = new SimTransition("t14",activity10,false,1.0); wait2.addOutgoingTransition(t13) ; wait2.addOutgoingTransition(t14) ; return proc ; } public static List<Resource> createRealResources() throws Exception { List<Resource> ressources = new ArrayList<Resource>(); Resource employee = new Resource("R&D Team","Developer",40,40,SimulationTestUtil.createWorkingWeekCalendar(),"$",TimeUnit.HOUR,0,20); Resource saler = new Resource("Sales Team","Saler",30,20,SimulationTestUtil.createWorkingWeekCalendar(),"�",TimeUnit.HOUR,0,25); Resource trucks = new Resource("Truck","Truck",30,20,SimulationTestUtil.createWorkingWeekCalendar(),"$",TimeUnit.DAY,0,40); Resource it = new Resource("IT","IT",30,20,SimulationTestUtil.createWorkingWeekCalendar(),"$",TimeUnit.HOUR,0,15); ressources.add(employee); ressources.add(saler); ressources.add(trucks); ressources.add(it) ; return ressources ; } public static List<Resource> createResources() throws Exception { List<Resource> ressources = new ArrayList<Resource>(); Resource employee = new Resource("R&D Team","Developer",RD_QUANTITY,RD_QUANTITY,createWorkingWeekCalendar(),"$",TimeUnit.HOUR,0,20); Resource managers = new Resource("Manager Team","Manager",MANAGER,MANAGER,createWorkingWeekCalendar(),"$",TimeUnit.HOUR,0,40); ressources.add(employee); ressources.add(managers); return ressources ; } public static SimCalendar createWorkingWeekCalendar() throws Exception { SimCalendar calendar = new SimCalendar(); Set<SimCalendarPeriod> workingDay = new HashSet<SimCalendarPeriod>() ; SimCalendarPeriod morning = new SimCalendarPeriod(new SimCalendarTime(8,0),new SimCalendarTime(12,0)); SimCalendarPeriod afternoon = new SimCalendarPeriod(new SimCalendarTime(13,30),new SimCalendarTime(19,30)); workingDay.add(morning) ; workingDay.add(afternoon) ; calendar.addSimCalendarDay(Calendar.MONDAY, workingDay); calendar.addSimCalendarDay(Calendar.TUESDAY, workingDay); calendar.addSimCalendarDay(Calendar.WEDNESDAY, workingDay); calendar.addSimCalendarDay(Calendar.THURSDAY, workingDay); calendar.addSimCalendarDay(Calendar.FRIDAY, workingDay); calendar.addSimCalendarDay(Calendar.SATURDAY, new TreeSet<SimCalendarPeriod>()); calendar.addSimCalendarDay(Calendar.SUNDAY, new TreeSet<SimCalendarPeriod>()); return calendar; } public static SimCalendar createWorkingAllWeekCalendar() throws Exception { SimCalendar calendar = new SimCalendar(); Set<SimCalendarPeriod> workingDay = new HashSet<SimCalendarPeriod>() ; SimCalendarPeriod morning = new SimCalendarPeriod(new SimCalendarTime(0,0),new SimCalendarTime(0,0)); workingDay.add(morning) ; calendar.addSimCalendarDay(Calendar.MONDAY, workingDay); calendar.addSimCalendarDay(Calendar.TUESDAY, workingDay); calendar.addSimCalendarDay(Calendar.WEDNESDAY, workingDay); calendar.addSimCalendarDay(Calendar.THURSDAY, workingDay); calendar.addSimCalendarDay(Calendar.FRIDAY, workingDay); calendar.addSimCalendarDay(Calendar.SATURDAY,workingDay); calendar.addSimCalendarDay(Calendar.SUNDAY,workingDay); return calendar; } public static LoadProfile createLoadProfileWithVeryHighDensity() throws Exception { Calendar myInstance = GregorianCalendar.getInstance() ; List<InjectionPeriod> injections = new ArrayList<InjectionPeriod>(); myInstance.set(2010, 6, 1, 0, 0); long p1Start = myInstance.getTimeInMillis() ; myInstance.add(Calendar.MONTH, 10) ; long p1End = myInstance.getTimeInMillis() ; Period period1 = new Period(p1Start, p1End) ; injections.add(new InjectionPeriod(period1,5000,RepartitionType.CONSTANT)); LoadProfile lp = new LoadProfile(createWorkingWeekCalendar(), injections); return lp ; } public static long getHoursIntoMilliseconds(int nbHours) { return ((long)nbHours) * 3600 *1000 ; } public static SimProcess createCycleProc() throws Exception { List<Resource> ressources = createRealResources(); SimProcess proc = new SimProcess("CycleProc"); SimActivity start = new SimActivity("Start",proc.getName(),false,true); proc.addStartElement(start); SimActivity a1 = new SimActivity("Activity1",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),SimulationTestUtil.getHoursIntoMilliseconds(6),SimulationTestUtil.getHoursIntoMilliseconds(10),false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t1 = new SimTransition("t1",a1,false,1.0); start.addOutgoingTransition(t1); SimActivity a2 = new SimActivity("Activity2",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t2 = new SimTransition("t2",a2,false,1.0); a1.addOutgoingTransition(t2) ; SimActivity a3 = new SimActivity("Activity3",JoinType.AND,proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; a3.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a3.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimTransition t3 = new SimTransition("t3",a3,false,1.0); SimTransition t6 = new SimTransition("t6",a3,false,1.0); a2.addOutgoingTransition(t3); a1.addOutgoingTransition(t6); SimActivity activity4 = new SimActivity("Activity4",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,true,true) ; //$NON-NLS-1$ activity4.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity4.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimTransition t5 = new SimTransition("t5",activity4,false,1.0); a3.addOutgoingTransition(t5) ; SimActivity end = new SimActivity("End",proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t8 = new SimTransition("t8",end,false,0.2); SimTransition t9 = new SimTransition("t9",a1,false,0.8); activity4.addOutgoingTransition(t9); activity4.addOutgoingTransition(t8) ; return proc ; } public static SimProcess createXorProc() throws Exception { List<Resource> ressources = createRealResources(); SimProcess proc = new SimProcess("CycleProc"); SimActivity start = new SimActivity("Start",proc.getName(),false,true); proc.addStartElement(start); SimActivity a1 = new SimActivity("Activity1",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),SimulationTestUtil.getHoursIntoMilliseconds(6),SimulationTestUtil.getHoursIntoMilliseconds(10),false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t1 = new SimTransition("t1",a1,false,1.0); SimActivity a2 = new SimActivity("Activity2",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(24),1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(24),1)); SimTransition t2 = new SimTransition("t1",a2,false,1.0); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); SimTransition t3 = new SimTransition("t3",a1,false,1.0); a2.addOutgoingTransition(t3); SimActivity end = new SimActivity("End",proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t8 = new SimTransition("t8",end,false,1); a1.addOutgoingTransition(t8); return proc ; } public static SimProcess createANDProc() throws Exception { SimProcess proc = new SimProcess("ANDProc"); SimActivity start = new SimActivity("Start",proc.getName(),false,true); proc.addStartElement(start); SimActivity a1 = new SimActivity("Activity1",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),SimulationTestUtil.getHoursIntoMilliseconds(6),SimulationTestUtil.getHoursIntoMilliseconds(10),false,false) ; SimTransition t1 = new SimTransition("t1",a1,false,1.0); SimActivity a2 = new SimActivity("Activity2",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; SimTransition t2 = new SimTransition("t2",a2,false,1.0); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); SimActivity join = new SimActivity("Join",JoinType.AND,proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t3 = new SimTransition("t3",join,false,1.0); a2.addOutgoingTransition(t3); SimTransition t4 = new SimTransition("t4",join,false,1.0); a1.addOutgoingTransition(t4); SimActivity end = new SimActivity("End",proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t8 = new SimTransition("t8",end,false,1); join.addOutgoingTransition(t8); return proc ; } public static List<Resource> createRealResourcesWithUnlimitedRD() throws Exception { List<Resource> ressources = new ArrayList<Resource>(); Resource employee = new Resource("R&D Team","Developer",-1,40,SimulationTestUtil.createWorkingWeekCalendar(),"$",TimeUnit.HOUR,0,20); Resource saler = new Resource("Sales Team","Saler",30,20,SimulationTestUtil.createWorkingWeekCalendar(),"�",TimeUnit.HOUR,0,25); Resource trucks = new Resource("Truck","Truck",30,20,SimulationTestUtil.createWorkingWeekCalendar(),"$",TimeUnit.DAY,0,40); Resource it = new Resource("IT","IT",30,20,SimulationTestUtil.createWorkingWeekCalendar(),"$",TimeUnit.HOUR,0,15); ressources.add(employee); ressources.add(saler); ressources.add(trucks); ressources.add(it) ; return ressources ; } public static SimProcess createRealProcWithUnlimitedRD() throws Exception { List<Resource> ressources = createRealResourcesWithUnlimitedRD() ; SimProcess proc = new SimProcess("RealProcess",SimulationTestUtil.getHoursIntoMilliseconds(10)); SimActivity start = new SimActivity("Start",proc.getName(),true,true); start.addResourceAssignement(new ResourceAssignement(ressources.get(1),0,1)) ; proc.addStartElement(start); SimActivity a1 = new SimActivity("Activity1",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),SimulationTestUtil.getHoursIntoMilliseconds(6),SimulationTestUtil.getHoursIntoMilliseconds(10),false,false) ; a1.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a1.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimActivity a2 = new SimActivity("Activity2",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; a2.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); a2.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t1 = new SimTransition("t1",a1,false,0.3); SimTransition t2 = new SimTransition("t2",a2,false,0.7); start.addOutgoingTransition(t1); start.addOutgoingTransition(t2); SimActivity a3 = new SimActivity("Activity3",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; a3.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); a3.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity waitMessage1 = new SimActivity("Receive Order",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,true) ; //$NON-NLS-1$ SimTransition t3 = new SimTransition("t3",a3,false,1.0); SimTransition t4 = new SimTransition("t4",waitMessage1,false,1.0); a2.addOutgoingTransition(t3); a1.addOutgoingTransition(t4); SimActivity gate1 = new SimActivity("Gate1",proc.getName(),0,0,0,false,false) ; //$NON-NLS-1$ SimTransition t5 = new SimTransition("t5",gate1,false,1.0); SimTransition t6 = new SimTransition("t6",gate1,false,1.0); a3.addOutgoingTransition(t5) ; waitMessage1.addOutgoingTransition(t6) ; SimActivity activity5 = new SimActivity("Activity5",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,true,false) ; //$NON-NLS-1$ activity5.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity5.addResourceAssignement(new ResourceAssignement(ressources.get(1),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimTransition t15 = new SimTransition("t15",activity5,false,1.0); gate1.addOutgoingTransition(t15) ; SimActivity activity6 = new SimActivity("Activity6",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(5),0,0,false,false) ; //$NON-NLS-1$ activity6.addResourceAssignement(new ResourceAssignement(ressources.get(2),SimulationTestUtil.getHoursIntoMilliseconds(5),1)); activity6.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(3),1)); // SimTransition t7 = new SimTransition("t7",activity5,false,0.2); SimTransition t8 = new SimTransition("t8",activity6,false,1.0); // activity5.addOutgoingTransition(t7); activity5.addOutgoingTransition(t8) ; SimActivity gate2 = new SimActivity("Gate2",JoinType.XOR,proc.getName(),false) ; //$NON-NLS-1$ SimTransition t9 = new SimTransition("t9",gate2,false,1.0); activity6.addOutgoingTransition(t9) ; SimActivity activity7 = new SimActivity("Activity7",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ activity7.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity wait = new SimActivity("wait",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; //$NON-NLS-1$ SimActivity activity8 = new SimActivity("Activity8",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(4),0,0,false,false) ; //$NON-NLS-1$ activity8.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(4),3)); SimTransition t10 = new SimTransition("t10",activity7,false,1.0); SimTransition t11 = new SimTransition("t11",wait,false,1.0); SimTransition tWait = new SimTransition("waitToA8",activity8,false,1.0); wait.addOutgoingTransition(tWait); gate2.addOutgoingTransition(t10) ; gate2.addOutgoingTransition(t11) ; SimActivity gate3 = new SimActivity("Gate3",JoinType.AND,proc.getName(),true) ; //$NON-NLS-1$ SimTransition t8Gate3 = new SimTransition("t8Gate3",gate3,false,1.0); SimTransition t7Gate3 = new SimTransition("t7Gate3",gate3,false,1.0); activity8.addOutgoingTransition(t8Gate3); activity7.addOutgoingTransition(t7Gate3); SimActivity wait2 = new SimActivity("Receive Confirmation",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ SimTransition t12 = new SimTransition("t12",wait2,false,1.0); gate3.addOutgoingTransition(t12) ; SimActivity activity9 = new SimActivity("Activity9",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(1),0,0,false,false) ; //$NON-NLS-1$ activity9.addResourceAssignement(new ResourceAssignement(ressources.get(3),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); activity9.addResourceAssignement(new ResourceAssignement(ressources.get(0),SimulationTestUtil.getHoursIntoMilliseconds(1),1)); SimActivity activity10 = new SimActivity("Activity10",proc.getName(),SimulationTestUtil.getHoursIntoMilliseconds(2),0,0,false,false) ; //$NON-NLS-1$ activity10.addResourceAssignement(new ResourceAssignement(ressources.get(2),SimulationTestUtil.getHoursIntoMilliseconds(2),1)); SimTransition t13 = new SimTransition("t13",activity9,false,1.0); SimTransition t14 = new SimTransition("t14",activity10,false,1.0); wait2.addOutgoingTransition(t13) ; wait2.addOutgoingTransition(t14) ; return proc ; } }