package edu.calpoly.cpe205.fetter; import javax.swing.*; import java.util.*; import java.io.*; import java.lang.reflect.*; import java.lang.*; import java.awt.*; import javax.swing.event.*; import java.awt.event.*; /** * This class stores references to all Test Data Items and Returned Objects. * It also supplies listeners so that the ETAMainModel * can be informed if Test Data Items or Returned Objects are added. */ // Author: Wesley Strickland // Version History: // Nov 20, 2000 - comments/pseudocode added // Nov 30, 2000 - (Mike Hebron) changed class description to use words from // problem domain, added line breaks in method descriptions // Nov 30, 2000 - (Mike Hebron) updated listener descriptions // Jan 17, 2001 - Mike Power added psuedocode for all method calls // Jan 17, 2001 - Mike Power changed ActionListener parameters to // ParameterPoolListener or ReturnedPoolListener // Feb 06, 2001 - (Phillip Hansen) implemented method // removeParameterData(ParameterData) // Feb 8, 2001 - Wes Strickland added comments and moved braces for Stage // Two release public class ObjectPool { /** * Constructs an empty ObjectPool */ public ObjectPool() { //SET parameterListeners to NEW LinkedList //SET returnedListeners to NEW LinkedList //SET parameters to NEW LinkedList //SET returns to New LinkedList parameterListeners = new LinkedList(); //List of parameterListeners returnedListeners = new LinkedList(); //List of returnedListeners parameters = new LinkedList(); //List of parameters returns = new LinkedList(); //List of returned data } /** * Adds to parameter collection and informs all listeners that data * has been added * Post-conditions: data has been added to Collection parameters */ public void addParameterData(ParameterData data) { //CALL add on parameters with data //CALL iterator on parameterListeners returns itr //WHILE CALL hasNext on itr // CALL next on itr returns list // CALL parameterAdded on list with data //ENDWHILE parameters.add(data); Iterator itr = whoListeningTo(data.getValueObject().getClass()).iterator(); while(itr.hasNext()) { ((ParameterDataListener) itr.next()).parameterDataAdded(data); } } /** * Removes from parameter Collection and informs all listeners that data * has been removed * Post-conditions: data has been removed from Collection parameters */ public void removeParameterData(ParameterData data) { //CALL remove on parameters with data //CALL iterator on parameterListeners returns itr //WHILE CALL hasNext on itr // CALL next on itr returns list // CALL parameterRemoved on list with data //ENDWHILE parameters.remove(data); Iterator itr = parameterListeners.iterator(); //Return iterator for next in list while(itr.hasNext()) { ((ParameterDataListener)itr.next()).parameterDataRemoved(data); } } /** * Checks to see if data is in Collection parameters * @return boolean value of (data is in Collection parameters) */ public boolean isParameterData(ParameterData data) { //CALL contains on parameters with data return contain //return contain return true; } /** * Adds to returnedListeners Collection and informs all listeners that data * has been added *

* Post-conditions: data has been added to Collection returnedListeners */ public void addReturnedData(ReturnedData data) { //CALL add on returns with data //CALL iterator on returnedListeners returns itr returns.add(data); Iterator itr = returnedListeners.iterator(); //WHILE CALL hasNext on itr // CALL next on itr returns list // CALL returnedAdded on list with data //ENDWHILE while (itr.hasNext()) { ((ReturnedPoolListener) itr.next()).returnedAdded(data); } } /** * Removes from parameter collection and informs all listeners that data * has been removed *

* Post-conditions: data has been removed from Collection returnedListeners */ public void removeReturnedData(ReturnedData data) { //CALL remove on returns with data //CALL iterator on returnedListeners returns itr returns.remove(data); Iterator itr = returnedListeners.iterator(); //WHILE CALL hasNext on itr // CALL next on itr returns list // CALL returnedRemoved on list with data //ENDWHILE while (itr.hasNext()) { ((ReturnedPoolListener) itr.next()).returnedRemoved(data); } } /** * Checks to see if data is in returnedListeners Collection * @return boolean value of (data is in returnedListeners Collection) */ public boolean isReturnedData(ReturnedData data) { //CALL contains on returns returns cont //return cont return true; } /** * Determines what listenters are instrested in add remove or changes to param
* Pre-conditions:
* Post-conditions:
* * @param param the ParameterData that is being changed */ protected void fireParameterDataChanged(ParameterData param) { //CALL getTypeName on param returns addType //CALL whoListeningTo with addType returns whos //CALL iterator on whos returns itr //WHILE CALL hasNext on itr //CALL next on itr returns next //CALL parameterDataChanged on next with param //ENDWHILE } /** * Adds list to Collection parameterListeners * Calls parameterDataAdded for each parameterData in the ObjectPool * that the ParameterDataListener is listening to. *

* Post-conditions: list has been added to Collection parameterListeners */ public void addParameterListener(ParameterDataListener list) { //CALL add on parameterListeners with list //CALL iterator on parameters returns itr //WHILE CALL hasNext on itr // CALL next on itr returns data // CALL getValueObject on considerData returns obj // CALL getClass on obj returns cla // CALL getTypeName on list returns listType // CALL nameToClass of ETAMainModel with listType returns listClass // IF CALL equals on listType with "" OR CALL isAssignableFrom on listClass with cla // CALL parameterAdded on list with data // ENDIF //ENDWHILE ParameterData considerData = null; Iterator itr = null; parameterListeners.add(list); itr = parameters.iterator(); while(itr.hasNext()) { considerData = (ParameterData)itr.next(); if(list.getTypeName().equals("") || ETAMainModel.nameToClass(list.getTypeName()). isAssignableFrom(considerData.getValueObject().getClass())) { list.parameterDataAdded(considerData); } } } /** * Removes list from Collection parameterListeners *

* Post-conditions: list has been removed from Collection parameterListeners */ public void removeParameterListener(ParameterDataListener list) { //CALL remove on parameterListeners with list } /** * Checks to see if list is in parameterListeners Collection * @return boolean value of (list is in parameterListeners Collection) */ public boolean isParameterListener(ParameterDataListener list) { //CALL contains on parameterListeners with list return true; } /** * Iterates through the list of listeners and determines if they
* are listening to ParameterDatas described by considerTypeName *

* Pre-conditions: listeners is not null
* Post-conditions:
* * @param considerTypeName the name of the class that is being
* added to the pool * @return a Collection of all the listeners assosiated with considerTypeName */ protected Collection whoListeningTo(Class addClass) { Vector lists; // the collection that this function returns Iterator itr; // iterator for member data 'listeners' ParameterDataListener list; // pdl's in itr String typeName; // the type of pd that list is interested in //Class addClass = null; // the Class object of the "considerTypeName" type //CONSTRUCT Vector lists lists = new Vector(); //CALL nameToClass of ETAMainModel with considerTypeName returns addClass //CALL iterator on parameterListeners returns itr //WHILE CALL hasNext on itr //CALL next on itr returns list //CALL getTypeName on list returns typeName //CALL nameToClass of ETAMainModel with typeName returns listClass //IF CALL equals on typeName with "" OR CALL isAssignableFrom on listClass with addClass //CALL add on lists with list //ENDIF //ENDWHILE //RETURN lists //addClass = ETAMainModel.nameToClass(considerTypeName); itr = parameterListeners.iterator(); while(itr.hasNext()) { list = (ParameterDataListener)itr.next(); typeName = list.getTypeName(); if(typeName.equals("") || ETAMainModel.nameToClass(typeName). isAssignableFrom(addClass)) lists.add(list); } //RETURN lists return lists; } /** * Adds list to Collection returnedListeners *

* Post-conditions: list has been added to Collection returnedListeners */ public void addReturnListener(ReturnedPoolListener list) { //CALL add on returnedListeners with list //CALL iterator on returns returns itr //WHILE CALL hasNext on itr // CALL next on itr returns data // CALL returnedAdded on list with data //ENDWHILE returnedListeners.add(list); Iterator itr = returns.iterator(); while (itr.hasNext()) { ReturnedData data = (ReturnedData) itr.next(); list.returnedAdded(data); } } /** * Removes list from Collection returnedListeners *

* Post-conditions: list has been removed from Collection returnedListeners */ public void removeReturnListener(ReturnedPoolListener list) { //CALL remove on returnListeners with list } /** * Checks to see if list is in returnedListeners Collection * @return boolean value of (list is in returnedListeners Collection) */ public boolean isReturnListener(ReturnedPoolListener list) { //CALL contains on returnedListeners with list returns cont //return cont return true; } /** * This is a collection of listeners that want to be informed * when a ParameterData is added or removed */ protected Collection parameterListeners; //See comment above /** * This is a collection of listeners that want to be informed * when a ReturnedData is added or removed */ protected Collection returnedListeners; //See comment above /** * This is a collection of stored references to ParameterData */ protected Collection parameters; //See comment above /** * This is a collection of stored references to ReturnedData */ protected Collection returns; //See comment above /** * Classes that want to be notified when Returned Objects are added or * removed to the Object Pool must implement this interface. */ public interface ReturnedPoolListener { /** * Listener method when ReturnedData is added to the ObjectPool */ public void returnedAdded(ReturnedData added); /** * Listener method when ReturnedData is removed from the ObjectPool */ public void returnedRemoved(ReturnedData removed); } }