View Javadoc

1   /*
2    * @(#) Utilization.java Dec 8, 2003
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  package nl.tudelft.simulation.dsol.formalisms.flow.statistics;
11  
12  import java.rmi.RemoteException;
13  
14  import javax.naming.InitialContext;
15  import javax.naming.NamingException;
16  
17  import nl.tudelft.simulation.dsol.context.ContextUtil;
18  import nl.tudelft.simulation.dsol.formalisms.flow.StationInterface;
19  import nl.tudelft.simulation.dsol.simulators.SimulatorInterface;
20  import nl.tudelft.simulation.event.Event;
21  import nl.tudelft.simulation.event.EventInterface;
22  import nl.tudelft.simulation.jstats.statistics.Persistent;
23  import nl.tudelft.simulation.logger.Logger;
24  
25  /***
26   * A Utilization <br>
27   * (c) copyright 2003 <a href="http://www.simulation.tudelft.nl">Delft
28   * University of Technology </a>, the Netherlands. <br>
29   * See for project information <a
30   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
31   * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
32   * License (GPL) </a>, no warranty <br>
33   * 
34   * @version 1.0 Dec 8, 2003 <br>
35   * @author <a href="http://www.simulation.tudelft.nl/people/jacobs.html">Peter
36   *         Jacobs </a>
37   */
38  public class Utilization extends Persistent
39  {
40  	/*** initialzed the tally */
41  	private boolean initialized = false;
42  
43  	/*** simulator */
44  	private SimulatorInterface simulator = null;
45  
46  	/***
47  	 * constructs a new Utilization
48  	 * 
49  	 * @param description the description of this utilization
50  	 * @param simulator the simulator
51  	 * @param target the target
52  	 * @throws RemoteException on network failure
53  	 */
54  	public Utilization(final String description,
55  			final SimulatorInterface simulator, final StationInterface target)
56  			throws RemoteException
57  	{
58  		super(description);
59  		this.simulator = simulator;
60  		target.addListener(this, StationInterface.RECEIVE_EVENT, false);
61  		target.addListener(this, StationInterface.RELEASE_EVENT, false);
62  		this.simulator
63  				.addListener(this, SimulatorInterface.WARMUP_EVENT, false);
64  		this.simulator.addListener(this,
65  				SimulatorInterface.END_OF_REPLICATION_EVENT, false);
66  		ContextUtil.bindToContext(simulator, this);
67  	}
68  
69  	/***
70  	 * @see nl.tudelft.simulation.event.EventListenerInterface
71  	 *      #notify(nl.tudelft.simulation.event.EventInterface)
72  	 */
73  	public void notify(final EventInterface event)
74  	{
75  		try
76  		{
77  			if (event.getSource().equals(this.simulator))
78  			{
79  				if (event.getType().equals(SimulatorInterface.WARMUP_EVENT))
80  				{
81  					this.initialized = true;
82  					this.simulator.removeListener(this,
83  							SimulatorInterface.WARMUP_EVENT);
84  					super.initialize();
85  					return;
86  				}
87  				if (event.getType().equals(
88  						SimulatorInterface.END_OF_REPLICATION_EVENT))
89  				{
90  					this.simulator.removeListener(this,
91  							SimulatorInterface.END_OF_REPLICATION_EVENT);
92  					this.endOfReplication();
93  					return;
94  				}
95  			} else if (this.initialized)
96  			{
97  				super.notify(event);
98  			}
99  		} catch (RemoteException remoteException)
100 		{
101 			Logger.warning(this, "notify", remoteException);
102 		}
103 	}
104 
105 	/***
106 	 * endOfReplication is invoked to store the final results
107 	 */
108 	protected void endOfReplication()
109 	{
110 		try
111 		{
112 			String[] parts = nl.tudelft.simulation.naming.context.ContextUtil
113 					.resolveKey(this).split("/");
114 			String key = "";
115 			for (int i = 0; i < parts.length; i++)
116 			{
117 				if (i != parts.length - 2)
118 				{
119 					key = key + parts[i] + "/";
120 				}
121 			}
122 			key = key.substring(0, key.length() - 1);
123 			nl.tudelft.simulation.jstats.statistics.Tally tally = null;
124 			try
125 			{
126 				tally = (nl.tudelft.simulation.jstats.statistics.Tally) new InitialContext()
127 						.lookup(key);
128 			} catch (NamingException exception)
129 			{
130 				tally = new nl.tudelft.simulation.jstats.statistics.Tally(
131 						this.description);
132 				new InitialContext().bind(key, tally);
133 				tally.initialize();
134 			}
135 			tally.notify(new Event(null, this, new Double(this.sampleMean)));
136 		} catch (Exception exception)
137 		{
138 			Logger.warning(this, "endOfReplication", exception);
139 		}
140 	}
141 }