1
2
3
4
5
6
7
8
9
10
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 }