1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.components;
14
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
18
19 import javax.swing.AbstractListModel;
20 import javax.swing.ComboBoxModel;
21
22 import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStep;
23 import com.eviware.soapui.model.support.TestPropertyListenerAdapter;
24
25 public class TestStepPropertyComboBoxModel extends AbstractListModel implements ComboBoxModel
26 {
27 private WsdlTestStep testStep;
28 private List<String> names;
29 private String selectedName;
30 private InternalTestPropertyListener testStepListener = new InternalTestPropertyListener();
31
32 public TestStepPropertyComboBoxModel( WsdlTestStep testStep )
33 {
34 this.testStep = testStep;
35
36 names = new ArrayList<String>();
37
38 if( testStep != null )
39 {
40 names.addAll( Arrays.asList( testStep.getPropertyNames() ));
41 testStep.addTestPropertyListener( testStepListener );
42 }
43 }
44
45 public void release()
46 {
47 if( testStep != null )
48 testStep.removeTestPropertyListener( testStepListener );
49 }
50
51 public WsdlTestStep getTestStep()
52 {
53 return testStep;
54 }
55
56 public void setTestStep( WsdlTestStep testStep )
57 {
58 if( this.testStep != null )
59 {
60 this.testStep.removeTestPropertyListener( testStepListener );
61 }
62
63 int sz = names.size();
64 if( sz > 0 )
65 {
66 names.clear();
67 fireIntervalRemoved( this, 0, sz-1 );
68 }
69
70 this.testStep = testStep;
71 if( testStep != null )
72 {
73 testStep.addTestPropertyListener( testStepListener );
74 names.addAll( Arrays.asList( testStep.getPropertyNames() ));
75 if( !names.isEmpty())
76 {
77 fireIntervalAdded( this, 0, names.size()-1 );
78 }
79 }
80
81 setSelectedItem( null );
82 }
83
84 public Object getElementAt( int index )
85 {
86 return names.get( index );
87 }
88
89 public int getSize()
90 {
91 return names.size();
92 }
93
94 private final class InternalTestPropertyListener extends TestPropertyListenerAdapter
95 {
96 @Override
97 public void propertyAdded( String name )
98 {
99 names.add( name );
100 fireIntervalAdded( TestStepPropertyComboBoxModel.this, names.size()-1, names.size()-1 );
101 }
102
103 @Override
104 public void propertyRemoved( String name )
105 {
106 int ix = names.indexOf( name );
107 if( ix >= 0 )
108 {
109 names.remove( ix );
110 fireIntervalRemoved( TestStepPropertyComboBoxModel.this, ix, ix );
111
112 if( name.equals( selectedName ))
113 setSelectedItem( null );
114 }
115 }
116
117 @Override
118 public void propertyRenamed( String oldName, String newName )
119 {
120 int ix = names.indexOf( oldName );
121 fireContentsChanged( TestStepPropertyComboBoxModel.this, ix, ix );
122
123 if( oldName.equals( selectedName ))
124 setSelectedItem( newName );
125 }
126
127 @Override
128 public void propertyMoved(String name, int oldIndex, int newIndex)
129 {
130 fireContentsChanged(TestStepPropertyComboBoxModel.this, 0, getSize()-1);
131 }
132
133 }
134
135 public Object getSelectedItem()
136 {
137 return selectedName;
138 }
139
140 public void setSelectedItem( Object anItem )
141 {
142 if( anItem == null && selectedName == null )
143 return;
144
145 if( anItem != null && selectedName != null && anItem.equals( selectedName))
146 return;
147
148 selectedName = anItem == null ? null : anItem.toString();
149
150 fireContentsChanged( this, -1, -1 );
151 }
152 }