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

Source Code of com.eviware.soapui.model.tree.nodes.RestResourceTreeNode

/*
*  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.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;

import com.eviware.soapui.impl.rest.RestMethod;
import com.eviware.soapui.impl.rest.RestResource;
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 Operation implementations
*
* @author Ole.Matzura
*/

public class RestResourceTreeNode extends AbstractModelItemTreeNode<RestResource> implements PropertyChangeListener
{
  private List<RestResourceTreeNode> resourceNodes = new ArrayList<RestResourceTreeNode>();
  private List<RestMethodTreeNode> methodNodes = new ArrayList<RestMethodTreeNode>();
  private final RestResource restResource;

  private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();

  public RestResourceTreeNode( RestResource restResource, SoapUITreeModel treeModel )
  {
    super( restResource, restResource.getParent(), treeModel );
    this.restResource = restResource;
    treeModel.mapModelItem( this );

    for( int c = 0; c < restResource.getChildResourceCount(); c++ )
    {
      resourceNodes.add( new RestResourceTreeNode( restResource.getChildResourceAt( c ), getTreeModel() ) );
    }
    treeModel.mapModelItems( resourceNodes );

    for( int c = 0; c < restResource.getRestMethodCount(); c++ )
    {
      methodAdded( restResource.getRestMethodAt( c ) );
    }
  }

  @Override
  public SoapUITreeNode getParentTreeNode()
  {
    return restResource.getParentResource() == null ? super.getParentTreeNode() : getTreeModel().getTreeNode(
        restResource.getParentResource() );
  }

  @Override
  public String toString()
  {
    return restResource.getName() + " [" + restResource.getFullPath() + "]";
  }

  @Override
  public int getChildCount()
  {
    return restResource.getRestMethodCount() + restResource.getChildResourceCount();
  }

  @Override
  public SoapUITreeNode getChildNode( int index )
  {
    int childCount = methodNodes.size();
    if( index < childCount )
      return methodNodes.get( index );
    else
      return resourceNodes.get( index - childCount );
  }

  @Override
  public int getIndexOfChild( Object child )
  {
    int result = methodNodes.indexOf( child );
    if( result == -1 )
    {
      result = resourceNodes.indexOf( child );
      if( result >= 0 )
        result += methodNodes.size();
    }

    return result;
  }

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

    for( RestMethodTreeNode treeNode : methodNodes )
    {
      treeNode.getModelItem().removePropertyChangeListener( Request.NAME_PROPERTY, propertyChangeListener );
      treeNode.release();
    }

    for( RestResourceTreeNode resource : resourceNodes )
    {
      resource.release();
    }
  }

  public void addChildResource( RestResource restResource )
  {
    RestResourceTreeNode operationTreeNode = ( RestResourceTreeNode )TreeNodeFactory.createTreeNode( restResource,
        getTreeModel() );

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

  public void removeChildResource( RestResourceTreeNode childResource )
  {
    if( resourceNodes.contains( childResource ) )
    {
      getTreeModel().notifyNodeRemoved( childResource );
      resourceNodes.remove( childResource );
    }
  }

  /*
   * public void requestAdded(Request request) { if (request instanceof
   * RestRequest) { RestMethod method = ((RestRequest)
   * request).getRestMethod(); RestMethodTreeNode node = (RestMethodTreeNode)
   * getTreeModel() .getTreeNode(method); if (methodNodes.contains(node)) {
   * node.requestAdded(request); } } }
   *
   * public void requestRemoved(Request request) { if (request instanceof
   * RestRequest) { RestMethod method = ((RestRequest)
   * request).getRestMethod(); RestMethodTreeNode node = (RestMethodTreeNode)
   * getTreeModel() .getTreeNode(method); if (methodNodes.contains(node)) {
   * node.requestRemoved(request); } } }
   */

  public void methodAdded( RestMethod method )
  {
    RestMethodTreeNode methodTreeNode = new RestMethodTreeNode( method, getTreeModel() );
    methodNodes.add( methodTreeNode );
    reorder( false );
    method.addPropertyChangeListener( Request.NAME_PROPERTY, propertyChangeListener );
    getTreeModel().notifyNodeInserted( methodTreeNode );
  }

  public void methodRemoved( RestMethod method )
  {
    SoapUITreeNode methodTreeNode = getTreeModel().getTreeNode( method );
    if( methodNodes.contains( methodTreeNode ) )
    {
      getTreeModel().notifyNodeRemoved( methodTreeNode );
      methodNodes.remove( methodTreeNode );
      method.removePropertyChangeListener( propertyChangeListener );
    }
    else
      throw new RuntimeException( "Removing unknown method" );
  }

  public void propertyChange( PropertyChangeEvent evt )
  {
    super.propertyChange( evt );
    if( evt.getPropertyName().equals( "childMethods" ) )
    {
      if( evt.getNewValue() != null )
      {
        methodAdded( ( RestMethod )evt.getNewValue() );
      }
      else
      {
        methodRemoved( ( RestMethod )evt.getOldValue() );
      }
    }
  }
}
TOP

Related Classes of com.eviware.soapui.model.tree.nodes.RestResourceTreeNode

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.