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); } }