Package com.eviware.soapui.model.tree.nodes

Source Code of com.eviware.soapui.model.tree.nodes.MockServiceTreeNode$InternalMockServiceListener

/*
*  soapUI, copyright (C) 2004-2011 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;
  private PropertiesTreeNode<?> propertiesTreeNode;

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

    propertiesTreeNode = PropertiesTreeNode.createDefaultPropertiesNode( mockService, getTreeModel() );
    getTreeModel().mapModelItem( propertiesTreeNode );
  }

  public void release()
  {
    super.release();

    getModelItem().removeMockServiceListener( mockServiceListener );

    for( MockOperationTreeNode treeNode : mockOperationNodes )
    {
      treeNode.getModelItem().removePropertyChangeListener( propertyChangeListener );
      treeNode.release();
    }

    propertiesTreeNode.release();
  }

  public MockService getMockService()
  {
    return ( MockService )getModelItem();
  }

  public int getChildCount()
  {
    int propMod = getTreeModel().isShowProperties() ? 1 : 0;
    return mockOperationNodes.size() + propMod;
  }

  public int getIndexOfChild( Object child )
  {
    int propMod = getTreeModel().isShowProperties() ? 1 : 0;
    if( propMod == 1 && child == propertiesTreeNode )
      return 0;

    int ix = mockOperationNodes.indexOf( child );
    return ix == -1 ? ix : ix + propMod;
  }

  public SoapUITreeNode getChildNode( int index )
  {
    int propMod = getTreeModel().isShowProperties() ? 1 : 0;
    return index == 0 && propMod == 1 ? propertiesTreeNode : mockOperationNodes.get( index - propMod );
  }

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

Related Classes of com.eviware.soapui.model.tree.nodes.MockServiceTreeNode$InternalMockServiceListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.