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 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 }