View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2007 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 java.util.ArrayList;
16  import java.util.List;
17  
18  import javax.swing.event.TreeModelEvent;
19  
20  import com.eviware.soapui.model.project.Project;
21  import com.eviware.soapui.model.support.WorkspaceListenerAdapter;
22  import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
23  import com.eviware.soapui.model.tree.SoapUITreeModel;
24  import com.eviware.soapui.model.tree.SoapUITreeNode;
25  import com.eviware.soapui.model.workspace.Workspace;
26  import com.eviware.soapui.settings.UISettings;
27  
28  /***
29   * SoapUITreeNode for Workspace implementations
30   * 
31   * @author Ole.Matzura
32   */
33  
34  public class WorkspaceTreeNode extends AbstractModelItemTreeNode<Workspace>
35  {
36  	private InternalWorkspaceListener workspaceListener = new InternalWorkspaceListener();
37  	private List<ProjectTreeNode> projectNodes = new ArrayList<ProjectTreeNode>();
38  	private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
39  
40  	public WorkspaceTreeNode( Workspace workspace, SoapUITreeModel treeModel  )
41     {
42        super( workspace, null, treeModel );
43        
44  		workspace.addWorkspaceListener( workspaceListener );
45  		
46  		for( int c = 0; c < workspace.getProjectCount(); c++ )
47  		{
48  			Project project = workspace.getProjectAt( c );
49  			project.addPropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
50  			projectNodes.add( new ProjectTreeNode( project, this ));
51  		}
52  		
53  		initOrdering( projectNodes, UISettings.ORDER_PROJECTS );
54  		getTreeModel().mapModelItems( projectNodes );
55     }
56     
57     public void release()
58     {
59     	super.release();
60     	getWorkspace().removeWorkspaceListener( workspaceListener );
61     	
62     	for( ProjectTreeNode treeNode : projectNodes )
63     		treeNode.release();
64     }
65  
66     public Workspace getWorkspace()
67     {
68        return (Workspace) getModelItem();
69     }
70  
71     private class InternalWorkspaceListener extends WorkspaceListenerAdapter
72     {
73        public void projectAdded(Project project)
74        {
75        	ProjectTreeNode projectTreeNode = new ProjectTreeNode( project, WorkspaceTreeNode.this );
76  			projectNodes.add( projectTreeNode);
77  			project.addPropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
78  			reorder( false );
79        	getTreeModel().notifyNodeInserted( projectTreeNode );
80        }
81  
82        public void projectRemoved(Project project)
83        {
84        	SoapUITreeNode treeNode = getTreeModel().getTreeNode( project );
85  			if( projectNodes.contains( treeNode))
86        	{
87        		getTreeModel().notifyNodeRemoved( treeNode );
88        		projectNodes.remove( treeNode );
89        		project.removePropertyChangeListener( propertyChangeListener );
90        	}
91  			else throw new RuntimeException( "Removing unkown project" ); 
92        }
93        
94        public void projectChanged( Project project )
95        {
96        	getTreeModel().notifyStructureChanged( new TreeModelEvent( WorkspaceTreeNode.this, 
97                 new Object[] { getTreeModel().getPath( WorkspaceTreeNode.this ) } ));
98        }
99     }
100 }