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

Source Code of com.eviware.soapui.model.tree.nodes.InterfaceTreeNode$InternalInterfaceListener

/*
*  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.impl.rest.RestResource;
import com.eviware.soapui.model.iface.Interface;
import com.eviware.soapui.model.iface.InterfaceListener;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.iface.Request;
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.model.tree.TreeNodeFactory;

/**
* SoapUITreeNode for Interface implementations
*
* @author Ole.Matzura
*/

public class InterfaceTreeNode extends AbstractModelItemTreeNode<Interface>
{
  private InternalInterfaceListener interfaceListener;
  private List<SoapUITreeNode> operationNodes = new ArrayList<SoapUITreeNode>();

  public InterfaceTreeNode( Interface iface, SoapUITreeModel treeModel )
  {
    super( iface, iface.getProject(), treeModel );

    interfaceListener = new InternalInterfaceListener();
    iface.addInterfaceListener( interfaceListener );

    for( int c = 0; c < iface.getOperationCount(); c++ )
    {
      operationNodes.add( TreeNodeFactory.createTreeNode( iface.getOperationAt( c ), getTreeModel() ) );
    }

    treeModel.mapModelItems( operationNodes );
  }

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

    getInterface().removeInterfaceListener( interfaceListener );

    for( SoapUITreeNode treeNode : operationNodes )
      treeNode.release();
  }

  public Interface getInterface()
  {
    return ( Interface )getModelItem();
  }

  public int getChildCount()
  {
    return operationNodes.size();
  }

  public int getIndexOfChild( Object child )
  {
    return operationNodes.indexOf( child );
  }

  public SoapUITreeNode getChildNode( int index )
  {
    return operationNodes.get( index );
  }

  private class InternalInterfaceListener implements InterfaceListener
  {
    public void requestAdded( Request request )
    {
      SoapUITreeNode operationTreeNode = getTreeModel().getTreeNode( request.getOperation() );
      if( operationTreeNode != null && operationTreeNode instanceof OperationTreeNode )
        ( ( OperationTreeNode )operationTreeNode ).requestAdded( request );
    }

    public void requestRemoved( Request request )
    {
      SoapUITreeNode operationTreeNode = getTreeModel().getTreeNode( request.getOperation() );
      if( operationTreeNode != null && operationTreeNode instanceof OperationTreeNode )
        ( ( OperationTreeNode )operationTreeNode ).requestRemoved( request );
    }

    public void operationAdded( Operation operation )
    {
      if( operation instanceof RestResource )
      {
        RestResource restResource = ( RestResource )operation;
        if( restResource.getParentResource() != null )
        {
          RestResourceTreeNode treeNode = ( RestResourceTreeNode )getTreeModel().getTreeNode(
              restResource.getParentResource() );
          treeNode.addChildResource( restResource );
          return;
        }
      }

      SoapUITreeNode operationTreeNode = TreeNodeFactory.createTreeNode( operation, getTreeModel() );

      operationNodes.add( operationTreeNode );
      getTreeModel().notifyNodeInserted( operationTreeNode );
    }

    public void operationRemoved( Operation operation )
    {
      SoapUITreeNode treeNode = getTreeModel().getTreeNode( operation );
      if( operationNodes.contains( treeNode ) )
      {
        getTreeModel().notifyNodeRemoved( treeNode );
        operationNodes.remove( treeNode );
      }
      else if( treeNode instanceof RestResourceTreeNode )
      {
        SoapUITreeNode parentNode = treeNode.getParentTreeNode();
        if( parentNode instanceof RestResourceTreeNode )
        {
          ( ( RestResourceTreeNode )parentNode ).removeChildResource( ( RestResourceTreeNode )treeNode );
        }
      }
      else
        throw new RuntimeException( "Removing unknown operation" );
    }

    public void operationUpdated( Operation operation )
    {
    }
  }
}
TOP

Related Classes of com.eviware.soapui.model.tree.nodes.InterfaceTreeNode$InternalInterfaceListener

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.