1
2
3
4
5
6
7
8
9
10
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 {
64 treeNode.getModelItem().removePropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
65 treeNode.release();
66 }
67 }
68
69 public Workspace getWorkspace()
70 {
71 return ( Workspace )getModelItem();
72 }
73
74 private class InternalWorkspaceListener extends WorkspaceListenerAdapter
75 {
76 public void projectAdded( Project project )
77 {
78 ProjectTreeNode projectTreeNode = new ProjectTreeNode( project, WorkspaceTreeNode.this );
79 projectNodes.add( projectTreeNode );
80 project.addPropertyChangeListener( Project.NAME_PROPERTY, propertyChangeListener );
81 reorder( false );
82 getTreeModel().notifyNodeInserted( projectTreeNode );
83 }
84
85 public void projectRemoved( Project project )
86 {
87 SoapUITreeNode treeNode = getTreeModel().getTreeNode( project );
88 if( projectNodes.contains( treeNode ) )
89 {
90 getTreeModel().notifyNodeRemoved( treeNode );
91 projectNodes.remove( treeNode );
92 project.removePropertyChangeListener( propertyChangeListener );
93 }
94 else
95 throw new RuntimeException( "Removing unkown project" );
96 }
97
98 public void projectChanged( Project project )
99 {
100 getTreeModel().notifyStructureChanged(
101 new TreeModelEvent( WorkspaceTreeNode.this, new Object[] { getTreeModel().getPath(
102 WorkspaceTreeNode.this ) } ) );
103 }
104 }
105 }