1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.panels.support;
14
15 import java.beans.PropertyChangeEvent;
16 import java.beans.PropertyChangeListener;
17 import java.util.HashSet;
18 import java.util.Iterator;
19 import java.util.Set;
20
21 import javax.swing.ComboBoxModel;
22 import javax.swing.event.ListDataEvent;
23 import javax.swing.event.ListDataListener;
24
25 import com.eviware.soapui.impl.wsdl.WsdlInterface;
26 import com.eviware.soapui.impl.wsdl.WsdlRequest;
27 import com.eviware.soapui.support.UISupport;
28
29 /***
30 * ComboBox model for a request endpoint
31 *
32 * @author Ole.Matzura
33 */
34
35 public class EndpointsComboBoxModel implements ComboBoxModel, PropertyChangeListener
36 {
37 private static final String ADD_NEW_ENDPOINT = "[add new endpoint..]";
38 private static final String EDIT_ENDPOINT = "[edit current..]";
39 private static final String DELETE_ENDPOINT = "[delete current]";
40
41 private Set<ListDataListener> listeners = new HashSet<ListDataListener>();
42 private String[] endpoints;
43 private WsdlRequest request;
44
45 public EndpointsComboBoxModel( WsdlRequest request )
46 {
47 this.request = request;
48 initEndpoints();
49 request.addPropertyChangeListener( this );
50 request.getOperation().getInterface().addPropertyChangeListener( this );
51 }
52
53 public void setSelectedItem(Object anItem)
54 {
55 String endpoint = request.getEndpoint();
56 if( anItem != null && anItem.equals( ADD_NEW_ENDPOINT ))
57 {
58 String value = UISupport.prompt(
59 "Add new endpoint for interface [" + request.getOperation().getInterface().getName() + "]",
60 "Add new endpoint", endpoint );
61
62 if( value != null )
63 {
64 request.getOperation().getInterface().addEndpoint( value );
65 request.setEndpoint( value );
66 }
67 }
68 else if( anItem != null && anItem.equals( EDIT_ENDPOINT ))
69 {
70 String value = UISupport.prompt(
71 "Edit endpoint for interface [" + request.getOperation().getInterface().getName() + "]",
72 "Edit endpoint", endpoint );
73
74 if( value != null )
75 {
76 request.getOperation().getInterface().changeEndpoint( endpoint, value );
77 request.setEndpoint( value );
78 }
79 }
80 else if( anItem != null && anItem.equals( DELETE_ENDPOINT ))
81 {
82 if( UISupport.confirm( "Delete endpoint [" + endpoint + "]", "Delete endpoint"))
83 {
84 request.getOperation().getInterface().removeEndpoint( endpoint );
85 request.setEndpoint( null );
86 }
87 }
88 else
89 {
90 request.setEndpoint( (String)anItem );
91 }
92
93 notifyContentsChanged();
94 }
95
96 public void refresh()
97 {
98 initEndpoints();
99 notifyContentsChanged();
100 }
101
102 private void initEndpoints()
103 {
104 endpoints = request.getOperation().getInterface().getEndpoints();
105 }
106
107 private void notifyContentsChanged()
108 {
109 Iterator<ListDataListener> iterator = listeners.iterator();
110 ListDataEvent e = new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, getSize() );
111 while( iterator.hasNext() )
112 {
113 iterator.next().contentsChanged( e );
114 }
115 }
116
117 public Object getSelectedItem()
118 {
119 String endpoint = request.getEndpoint();
120 return endpoint == null ? "- no endpoint set -" : endpoint;
121 }
122
123 public int getSize()
124 {
125 return endpoints.length + 3;
126 }
127
128 public Object getElementAt(int index)
129 {
130 if( index == endpoints.length )
131 return EndpointsComboBoxModel.EDIT_ENDPOINT;
132 else if( index == endpoints.length+1 )
133 return EndpointsComboBoxModel.ADD_NEW_ENDPOINT;
134 else if( index == endpoints.length+2 )
135 return EndpointsComboBoxModel.DELETE_ENDPOINT;
136 else
137 return endpoints[index];
138 }
139
140 public void addListDataListener(ListDataListener l)
141 {
142 listeners.add( l );
143 }
144
145 public void removeListDataListener(ListDataListener l)
146 {
147 listeners.remove( l );
148 }
149
150 public void propertyChange(PropertyChangeEvent evt)
151 {
152 String propertyName = evt.getPropertyName();
153
154 if( propertyName.equals( WsdlRequest.ENDPOINT_PROPERTY ) )
155 {
156 notifyContentsChanged();
157 }
158 else if( propertyName.equals( WsdlInterface.ENDPOINT_PROPERTY ) )
159 {
160 refresh();
161 }
162 }
163
164 public void release()
165 {
166 request.removePropertyChangeListener( this );
167 request.getOperation().getInterface().removePropertyChangeListener( this );
168 }
169 }