/*
* soapUI, copyright (C) 2004-2007 eviware.com
*
* soapUI is free software; you can redistribute it and/or modify it under the
* terms of version 2.1 of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* soapUI 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 Lesser General Public License for more details at gnu.org.
*/
package com.eviware.soapui.model.tree.nodes;
import java.util.ArrayList;
import java.util.List;
import com.eviware.soapui.model.mock.MockOperation;
import com.eviware.soapui.model.mock.MockResponse;
import com.eviware.soapui.model.mock.MockService;
import com.eviware.soapui.model.mock.MockServiceListener;
import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
import com.eviware.soapui.model.tree.SoapUITreeModel;
import com.eviware.soapui.model.tree.SoapUITreeNode;
import com.eviware.soapui.settings.UISettings;
/**
* SoapUITreeNode for MockService implementations
*
* @author Ole.Matzura
*/
public class MockServiceTreeNode extends AbstractModelItemTreeNode<MockService>
{
private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
private List<MockOperationTreeNode> mockOperationNodes = new ArrayList<MockOperationTreeNode>();
private InternalMockServiceListener mockServiceListener;
public MockServiceTreeNode(MockService mockService, SoapUITreeModel treeModel )
{
super( mockService, mockService.getProject(), treeModel );
mockServiceListener = new InternalMockServiceListener();
mockService.addMockServiceListener( mockServiceListener );
for( int c = 0; c < mockService.getMockOperationCount(); c++ )
{
MockOperation mockOperation = mockService.getMockOperationAt( c );
mockOperation.addPropertyChangeListener( MockService.NAME_PROPERTY, propertyChangeListener );
mockOperationNodes.add( new MockOperationTreeNode( mockOperation, getTreeModel() ));
}
initOrdering( mockOperationNodes, UISettings.ORDER_MOCKOPERATION );
getTreeModel().mapModelItems( mockOperationNodes );
}
public void release()
{
super.release();
getModelItem().removeMockServiceListener( mockServiceListener );
for( MockOperationTreeNode treeNode : mockOperationNodes )
{
treeNode.getModelItem().removePropertyChangeListener( propertyChangeListener );
treeNode.release();
}
}
public MockService getMockService()
{
return (MockService) getModelItem();
}
public int getChildCount()
{
return mockOperationNodes.size();
}
public int getIndexOfChild(Object child)
{
return mockOperationNodes.indexOf( child );
}
public SoapUITreeNode getChildNode(int index)
{
return mockOperationNodes.get( index );
}
private final class InternalMockServiceListener implements MockServiceListener
{
public void mockOperationAdded( MockOperation mockOperation )
{
MockOperationTreeNode mockOperationTreeNode = new MockOperationTreeNode( mockOperation, getTreeModel() );
mockOperationNodes.add( mockOperationTreeNode);
mockOperation.addPropertyChangeListener( propertyChangeListener );
getTreeModel().notifyNodeInserted( mockOperationTreeNode );
}
public void mockOperationRemoved( MockOperation mockOperation )
{
SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockOperation );
if( mockOperationNodes.contains( treeNode ))
{
getTreeModel().notifyNodeRemoved( treeNode );
mockOperation.removePropertyChangeListener( propertyChangeListener );
mockOperationNodes.remove( treeNode );
}
else throw new RuntimeException( "Removing unkown mockOperation" );
}
public void mockResponseAdded( MockResponse mockResponse )
{
MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
if( operationTreeNode != null )
operationTreeNode.mockResponseAdded( mockResponse );
else
throw new RuntimeException( "Adding mockResponse to unknwown MockOperation" );
}
public void mockResponseRemoved( MockResponse mockResponse )
{
MockOperationTreeNode operationTreeNode = (MockOperationTreeNode) getTreeModel().getTreeNode( mockResponse.getMockOperation() );
if( operationTreeNode != null )
operationTreeNode.mockResponseRemoved( mockResponse );
else
throw new RuntimeException( "Removing mockResponse from unknown MockOperation" );
}
}
}
|