// @@ Finder implementation
//////////////////////////////////////////////////
public List findModelObjectInModel(ModelObject mo, Model model)
{
DataTypeItem item = (DataTypeItem) mo;
List foundModelObjects = new ArrayList();
// Search all nodesockets for the datatype
Iterator processes = model.getItems(ItemTypes.PROCESS);
while (processes.hasNext())
{
ProcessItem process = (ProcessItem) processes.next();
Iterator nodes = process.getNodes();
while (nodes.hasNext())
{
Node node = (Node) nodes.next();
List modelObjects = findInNode(node, item);
if (modelObjects.size() != 0)
foundModelObjects.addAll(modelObjects);
}
}
// Search all Activity items
Iterator activityItems = model.getItems(ItemTypes.ACTIVITY);
while (activityItems.hasNext())
{
ActivityItem activity = (ActivityItem) activityItems.next();
Iterator sockets = activity.getSockets();
while (sockets.hasNext())
{
ActivitySocket activitySocket = (ActivitySocket) sockets.next();
foundModelObjects.addAll(findInActivitySocket(activitySocket, item));
}
}
// Now search the datatypes itself, e.g. complex data types
Iterator dataTypes = model.getItems(ItemTypes.TYPE);
while (dataTypes.hasNext())
{
DataTypeItem dt = (DataTypeItem) dataTypes.next();
if (dt instanceof ComplexTypeItem)
{
foundModelObjects.addAll(findInComplexDataType((ComplexTypeItem) dt, item));
}
}