1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.components;
14
15 import java.awt.BorderLayout;
16 import java.awt.Dimension;
17 import java.awt.event.ActionEvent;
18 import java.util.HashMap;
19 import java.util.Map;
20
21 import javax.swing.AbstractAction;
22 import javax.swing.BorderFactory;
23 import javax.swing.DefaultComboBoxModel;
24 import javax.swing.ImageIcon;
25 import javax.swing.JComboBox;
26 import javax.swing.JComponent;
27 import javax.swing.JDialog;
28 import javax.swing.JList;
29 import javax.swing.JPanel;
30 import javax.swing.JSeparator;
31
32 import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
33 import com.eviware.soapui.support.UISupport;
34 import com.eviware.soapui.support.action.swing.ActionList;
35 import com.eviware.soapui.support.action.swing.DefaultActionList;
36 import com.jgoodies.forms.layout.FormLayout;
37
38 /***
39 * Utility for creating simple configuration dialogs
40 *
41 * @author Ole.Matzura
42 */
43
44 public class SwingConfigurationDialogImpl implements ConfigurationDialog
45 {
46 private JDialog dialog;
47 private SimpleForm form;
48 private boolean result;
49 private Map<String, String> values;
50 private Map<String, FieldType> fieldTypes = new HashMap<String, FieldType>();
51 private final String title;
52 private Dimension size;
53 private JComponent content;
54 private ActionList actions;
55 private String description;
56 private ImageIcon icon;
57
58 public SwingConfigurationDialogImpl( String title, String helpUrl, String description, ImageIcon icon )
59 {
60 this.title = title;
61 this.description = description;
62 this.icon = icon;
63 form = new SimpleForm( new FormLayout( "10px,left:pref,10px,left:pref,5px" ) );
64
65 actions = new DefaultActionList( "Actions" );
66 if( helpUrl != null )
67 {
68 actions.addAction( new ShowOnlineHelpAction( helpUrl ) );
69 actions.addSeparator();
70 }
71
72 OkAction okAction = new OkAction();
73 actions.addAction( okAction );
74 actions.addAction( new CancelAction() );
75 actions.setDefaultAction( okAction );
76 }
77
78 public boolean show( Map<String, String> values )
79 {
80 if( dialog == null )
81 buildDialog();
82
83 this.values = values;
84
85 result = false;
86
87 form.setValues( values );
88
89 if( size == null )
90 dialog.pack();
91 else
92 dialog.setSize( size );
93
94 UISupport.showDialog( dialog );
95 return result;
96 }
97
98 public Dimension getSize()
99 {
100 return size;
101 }
102
103 public void setSize( Dimension preferredSize )
104 {
105 this.size = preferredSize;
106 }
107
108 public void addTextField( String name, String tooltip )
109 {
110 addTextField( name, tooltip, FieldType.TEXT );
111 }
112
113 public void addTextField( String name, String tooltip, FieldType type )
114 {
115 if( type == FieldType.DIRECTORY )
116 form.append( name, new DirectoryFormComponent( tooltip ) );
117 else
118 form.appendTextField( name, tooltip );
119
120 fieldTypes.put( name, type );
121 }
122
123 public void addCheckBox( String caption, String label, boolean selected )
124 {
125 form.appendCheckBox( caption, label, selected );
126 }
127
128 public void setContent( JComponent content )
129 {
130 this.content = content;
131 }
132
133 private void buildDialog()
134 {
135 dialog = new JDialog( UISupport.getMainFrame(), title, true );
136
137 form.getPanel().setBorder( BorderFactory.createEmptyBorder( 5, 0, 5, 0 ) );
138
139 JPanel panel = new JPanel( new BorderLayout() );
140 JComponent contentPanel = content == null ? form.getPanel() : content;
141 panel.add( contentPanel, BorderLayout.CENTER );
142
143 JButtonBar buttons = UISupport.initDialogActions( actions, dialog );
144 buttons.setBorder( BorderFactory.createEmptyBorder( 3, 5, 3, 5 ) );
145
146 if( content == null )
147 {
148 JPanel p = new JPanel( new BorderLayout() );
149 p.add( new JSeparator(), BorderLayout.NORTH );
150 p.add( buttons, BorderLayout.CENTER );
151
152 panel.add( p, BorderLayout.SOUTH );
153 }
154 else
155 {
156 panel.add( buttons, BorderLayout.SOUTH );
157 }
158
159 if( description != null || icon != null )
160 dialog.getContentPane().add( UISupport.buildDescription( title, description, icon ), BorderLayout.NORTH );
161
162 dialog.getContentPane().add( panel );
163 dialog.pack();
164 }
165
166 private class OkAction extends AbstractAction
167 {
168 public OkAction()
169 {
170 super( "Ok" );
171 }
172
173 public void actionPerformed( ActionEvent e )
174 {
175 result = true;
176
177 form.getValues( values );
178 dialog.setVisible( false );
179 }
180 }
181
182 private class CancelAction extends AbstractAction
183 {
184 public CancelAction()
185 {
186 super( "Cancel" );
187 }
188
189 public void actionPerformed( ActionEvent e )
190 {
191 dialog.setVisible( false );
192 }
193 }
194
195 public void addComboBox( String label, Object[] objects, String tooltip )
196 {
197 form.appendComboBox( label, objects, tooltip );
198 }
199
200 public void setValues( String id, String[] values )
201 {
202 JComponent component = form.getComponent( id );
203 if( component instanceof JComboBox )
204 {
205 ( ( JComboBox )component ).setModel( new DefaultComboBoxModel( values ) );
206 }
207 else if( component instanceof JList )
208 {
209 ( ( JList )component ).setModel( new DefaultComboBoxModel( values ) );
210 }
211 else
212 throw new RuntimeException( "Could not set values on [" + component + "]" );
213 }
214
215 public void addComboBox( String label, String tooltip )
216 {
217 form.appendComboBox( label, new String[] {}, tooltip );
218 }
219
220 public void addComponent( JComponent component )
221 {
222 form.addComponent( component );
223 }
224
225 public void getValues( Map<String, String> values )
226 {
227 form.getValues( values );
228 }
229
230 public ActionList getActions()
231 {
232 return actions;
233 }
234
235 public void hide()
236 {
237 dialog.setVisible( false );
238 }
239 }