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

Source Code of com.eviware.soapui.model.tree.nodes.ProjectTreeNode$InternalProjectListener

/*
*  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.iface.Interface;
import com.eviware.soapui.model.mock.MockService;
import com.eviware.soapui.model.project.Project;
import com.eviware.soapui.model.support.ProjectListenerAdapter;
import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
import com.eviware.soapui.model.tree.SoapUITreeNode;
import com.eviware.soapui.settings.UISettings;

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

public class ProjectTreeNode extends AbstractModelItemTreeNode<Project>
{
  private InternalProjectListener internalProjectListener;
  private List<InterfaceTreeNode> interfaceNodes = new ArrayList<InterfaceTreeNode>();
  private List<TestSuiteTreeNode> testSuiteNodes = new ArrayList<TestSuiteTreeNode>();
  private List<MockServiceTreeNode> mockServiceNodes = new ArrayList<MockServiceTreeNode>();
  private PropertiesTreeNode<?> propertiesTreeNode;

  public ProjectTreeNode( Project project, WorkspaceTreeNode workspaceNode )
  {
    super( project, workspaceNode.getWorkspace(), workspaceNode.getTreeModel() );

    if( !project.isOpen() )
      return;

    internalProjectListener = new InternalProjectListener();
    project.addProjectListener( internalProjectListener );

    for( int c = 0; c < project.getInterfaceCount(); c++ )
    {
      Interface iface = project.getInterfaceAt( c );
      interfaceNodes.add( new InterfaceTreeNode( iface, getTreeModel() ) );
    }

    for( int c = 0; c < project.getTestSuiteCount(); c++ )
    {
      testSuiteNodes.add( new TestSuiteTreeNode( project.getTestSuiteAt( c ), getTreeModel() ) );
    }

    for( int c = 0; c < project.getMockServiceCount(); c++ )
    {
      mockServiceNodes.add( new MockServiceTreeNode( project.getMockServiceAt( c ), getTreeModel() ) );
    }

    initOrdering( interfaceNodes, UISettings.ORDER_SERVICES );

    getTreeModel().mapModelItems( interfaceNodes );
    getTreeModel().mapModelItems( testSuiteNodes );
    getTreeModel().mapModelItems( mockServiceNodes );

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

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

    getProject().removeProjectListener( internalProjectListener );

    for( InterfaceTreeNode treeNode : interfaceNodes )
      treeNode.release();

    for( TestSuiteTreeNode treeNode : testSuiteNodes )
      treeNode.release();

    for( MockServiceTreeNode treeNode : mockServiceNodes )
      treeNode.release();

    if( propertiesTreeNode != null )
      propertiesTreeNode.release();
  }

  public int getChildCount()
  {
    if( propertiesTreeNode == null )
      return 0;

    int propMod = getTreeModel().isShowProperties() ? 1 : 0;

    return interfaceNodes.size() + testSuiteNodes.size() + mockServiceNodes.size() + propMod;
  }

  public int getIndexOfChild( Object child )
  {
    if( propertiesTreeNode == null )
      return -1;

    if( child == propertiesTreeNode )
      return 0;

    int propMod = getTreeModel().isShowProperties() ? 1 : 0;

    int index = interfaceNodes.indexOf( child );
    if( index >= 0 )
      return index + propMod;

    index = testSuiteNodes.indexOf( child );
    if( index >= 0 )
      return index + interfaceNodes.size() + propMod;

    index = mockServiceNodes.indexOf( child );
    if( index >= 0 )
      return index + interfaceNodes.size() + testSuiteNodes.size() + propMod;

    return -1;
  }

  public SoapUITreeNode getChildNode( int index )
  {
    if( propertiesTreeNode == null )
      return null;

    int propMod = getTreeModel().isShowProperties() ? 1 : 0;

    if( propMod == 1 && index == 0 )
      return propertiesTreeNode;
    else if( index < interfaceNodes.size() + propMod )
      return interfaceNodes.get( index - propMod );
    else if( index < testSuiteNodes.size() + interfaceNodes.size() + propMod )
      return testSuiteNodes.get( index - interfaceNodes.size() - propMod );
    else
      return mockServiceNodes.get( index - interfaceNodes.size() - testSuiteNodes.size() - propMod );
  }

  public Project getProject()
  {
    return ( Project )getModelItem();
  }

  private class InternalProjectListener extends ProjectListenerAdapter
  {
    public void interfaceAdded( Interface iface )
    {
      InterfaceTreeNode interfaceTreeNode = new InterfaceTreeNode( iface, getTreeModel() );
      interfaceNodes.add( interfaceTreeNode );
      reorder( false );
      getTreeModel().notifyNodeInserted( interfaceTreeNode );
    }

    public void interfaceRemoved( Interface iface )
    {
      SoapUITreeNode treeNode = getTreeModel().getTreeNode( iface );
      if( interfaceNodes.contains( treeNode ) )
      {
        getTreeModel().notifyNodeRemoved( treeNode );
        interfaceNodes.remove( treeNode );
      }
      else
        throw new RuntimeException( "Removing unkown interface" );
    }

    public void testSuiteAdded( TestSuite testSuite )
    {
      TestSuiteTreeNode testSuiteNode = new TestSuiteTreeNode( testSuite, getTreeModel() );
      testSuiteNodes.add( testSuite.getProject().getIndexOfTestSuite( testSuite ), testSuiteNode );
      getTreeModel().notifyNodeInserted( testSuiteNode );
    }

    public void testSuiteRemoved( TestSuite testSuite )
    {
      SoapUITreeNode treeNode = getTreeModel().getTreeNode( testSuite );
      if( testSuiteNodes.contains( treeNode ) )
      {
        getTreeModel().notifyNodeRemoved( treeNode );
        testSuiteNodes.remove( treeNode );
      }
      else
        throw new RuntimeException( "Removing unkown testSuite" );
    }

    @Override
    public void testSuiteMoved( TestSuite testSuite, int index, int offset )
    {
      testSuiteRemoved( testSuite );
      testSuiteAdded( testSuite );
    }

    public void mockServiceAdded( MockService mockService )
    {
      MockServiceTreeNode mockServiceNode = new MockServiceTreeNode( mockService, getTreeModel() );
      mockServiceNodes.add( mockServiceNode );
      getTreeModel().notifyNodeInserted( mockServiceNode );
    }

    public void mockServiceRemoved( MockService mockService )
    {
      SoapUITreeNode treeNode = getTreeModel().getTreeNode( mockService );
      if( mockServiceNodes.contains( treeNode ) )
      {
        getTreeModel().notifyNodeRemoved( treeNode );
        mockServiceNodes.remove( treeNode );
      }
      else
        throw new RuntimeException( "Removing unkown mockService" );
    }
  }

}
TOP

Related Classes of com.eviware.soapui.model.tree.nodes.ProjectTreeNode$InternalProjectListener

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.