View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.model.tree.nodes;
14  
15  import com.eviware.soapui.model.project.Project;
16  import com.eviware.soapui.model.support.WorkspaceListenerAdapter;
17  import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
18  import com.eviware.soapui.model.tree.SoapUITreeModel;
19  import com.eviware.soapui.model.tree.SoapUITreeNode;
20  import com.eviware.soapui.model.workspace.Workspace;
21  import com.eviware.soapui.settings.UISettings;
22  
23  import javax.swing.event.TreeModelEvent;
24  import java.util.ArrayList;
25  import java.util.List;
26  
27  /***
28   * SoapUITreeNode for Workspace implementations
29   * 
30   * @author Ole.Matzura
31   */
32  
33  public class WorkspaceTreeNode extends AbstractModelItemTreeNode<Workspace>
34  {
35  	private InternalWorkspaceListener workspaceListener = new InternalWorkspaceListener();
36  	private List<ProjectTreeNode> projectNodes = new ArrayList<ProjectTreeNode>();
37  	private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
38  
39  	public WorkspaceTreeNode( Workspace workspace, SoapUITreeModel treeModel  )
40     {
41        super( workspace, null, treeModel );
42        
43  		workspace.addWorkspaceListener( workspaceListener );
44  		
45  		for( int c = 0; c < workspace.getProjectCount(); c++ )
46  		{
47  			Project project = workspace.getProjectAt( c );
48  			project.addPropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
49  			projectNodes.add( new ProjectTreeNode( project, this ));
50  		}
51  		
52  		initOrdering( projectNodes, UISettings.ORDER_PROJECTS );
53  		getTreeModel().mapModelItems( projectNodes );
54     }
55     
56     public void release()
57     {
58     	super.release();
59     	getWorkspace().removeWorkspaceListener( workspaceListener );
60     	
61     	for( ProjectTreeNode treeNode : projectNodes )
62     	{
63     		treeNode.getModelItem().removePropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
64     		treeNode.release();
65     	}
66     }
67  
68     public Workspace getWorkspace()
69     {
70        return (Workspace) getModelItem();
71     }
72  
73     private class InternalWorkspaceListener extends WorkspaceListenerAdapter
74     {
75        public void projectAdded(Project project)
76        {
77        	ProjectTreeNode projectTreeNode = new ProjectTreeNode( project, WorkspaceTreeNode.this );
78  			projectNodes.add( projectTreeNode);
79  			project.addPropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
80  			reorder( false );
81        	getTreeModel().notifyNodeInserted( projectTreeNode );
82        }
83  
84        public void projectRemoved(Project project)
85        {
86        	SoapUITreeNode treeNode = getTreeModel().getTreeNode( project );
87  			if( projectNodes.contains( treeNode))
88        	{
89        		getTreeModel().notifyNodeRemoved( treeNode );
90        		projectNodes.remove( treeNode );
91        		project.removePropertyChangeListener( propertyChangeListener );
92        	}
93  			else throw new RuntimeException( "Removing unkown project" ); 
94        }
95        
96        public void projectChanged( Project project )
97        {
98        	getTreeModel().notifyStructureChanged( new TreeModelEvent( WorkspaceTreeNode.this, 
99                 new Object[] { getTreeModel().getPath( WorkspaceTreeNode.this ) } ));
100       }
101    }
102 }