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.wsdl.actions.support.ShowOnlineHelpAction;
33 import com.eviware.soapui.support.UISupport;
34 import com.eviware.soapui.support.action.ActionList;
35 import com.eviware.soapui.support.action.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,right: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 actions.addAction( new OkAction() );
73 actions.addAction( new CancelAction() );
74 }
75
76 public boolean show( Map<String,String> values )
77 {
78 if( dialog == null )
79 buildDialog();
80
81 this.values = values;
82
83 result = false;
84
85 form.setValues( values );
86
87 if( size == null )
88 dialog.pack();
89 else
90 dialog.setSize( size );
91
92 UISupport.showDialog( dialog );
93 return result;
94 }
95
96 public Dimension getSize()
97 {
98 return size;
99 }
100
101 public void setSize(Dimension preferredSize)
102 {
103 this.size = preferredSize;
104 }
105
106 public void addTextField( String name, String tooltip )
107 {
108 addTextField( name, tooltip, FieldType.TEXT );
109 }
110
111 public void addTextField( String name, String tooltip, FieldType type )
112 {
113 if( type == FieldType.DIRECTORY )
114 form.append( name, new DirectoryFormComponent( tooltip ) );
115 else
116 form.appendTextField( name, tooltip );
117
118 fieldTypes.put( name, type );
119 }
120
121 public void addCheckBox( String caption, String label, boolean selected )
122 {
123 form.appendCheckBox( caption, label, selected );
124 }
125
126 public void setContent( JComponent content )
127 {
128 this.content = content;
129 }
130
131 private void buildDialog()
132 {
133 dialog = new JDialog( UISupport.getMainFrame(), title, true );
134
135 form.getPanel().setBorder( BorderFactory.createEmptyBorder( 5, 0, 5, 0 ));
136
137 JPanel panel = new JPanel( new BorderLayout() );
138 JComponent contentPanel = content == null ? form.getPanel() : content;
139 panel.add( contentPanel, BorderLayout.CENTER );
140
141 JButtonBar buttons = UISupport.initDialogActions( actions, dialog );
142 buttons.setBorder( BorderFactory.createEmptyBorder( 3, 5, 3, 5 ) );
143
144 if( content == null )
145 {
146 JPanel p = new JPanel( new BorderLayout() );
147 p.add( new JSeparator(), BorderLayout.NORTH );
148 p.add( buttons, BorderLayout.CENTER );
149
150 panel.add( p, BorderLayout.SOUTH );
151 }
152 else
153 {
154 panel.add( buttons, BorderLayout.SOUTH );
155 }
156
157 if( description != null || icon != null )
158 dialog.getContentPane().add( UISupport.buildDescription( title, description, icon ), BorderLayout.NORTH );
159
160 dialog.getContentPane().add( panel );
161 dialog.pack();
162 }
163
164 private class OkAction extends AbstractAction
165 {
166 public OkAction()
167 {
168 super( "Ok" );
169 }
170
171 public void actionPerformed(ActionEvent e)
172 {
173 result = true;
174
175 form.getValues( values );
176 dialog.setVisible( false );
177 }
178 }
179
180 private class CancelAction extends AbstractAction
181 {
182 public CancelAction()
183 {
184 super( "Cancel" );
185 }
186
187 public void actionPerformed(ActionEvent e)
188 {
189 dialog.setVisible( false );
190 }
191 }
192
193 public void addComboBox( String label, Object[] objects, String tooltip)
194 {
195 form.appendComboBox( label, objects, tooltip );
196 }
197
198 public void setValues(String id, String[] values)
199 {
200 JComponent component = form.getComponent( id );
201 if( component instanceof JComboBox )
202 {
203 ((JComboBox)component).setModel( new DefaultComboBoxModel( values ));
204 }
205 else if( component instanceof JList )
206 {
207 ((JList)component).setModel( new DefaultComboBoxModel( values ));
208 }
209 else throw new RuntimeException( "Could not set values on [" + component + "]" );
210 }
211
212 public void addComboBox(String label, String tooltip)
213 {
214 form.appendComboBox( label, new String[] {}, tooltip );
215 }
216
217 public void addComponent(JComponent component)
218 {
219 form.addComponent( component );
220 }
221
222 public void getValues(Map<String, String> values)
223 {
224 form.getValues( values );
225 }
226
227 public ActionList getActions()
228 {
229 return actions;
230 }
231
232 public void hide()
233 {
234 dialog.setVisible( false );
235 }
236 }