1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.x.impl.swing;
14
15 import java.awt.BorderLayout;
16 import java.awt.Component;
17 import java.awt.Dimension;
18 import java.awt.event.ActionEvent;
19
20 import javax.swing.AbstractAction;
21 import javax.swing.BorderFactory;
22 import javax.swing.JButton;
23 import javax.swing.JDialog;
24 import javax.swing.JEditorPane;
25 import javax.swing.JOptionPane;
26 import javax.swing.JPanel;
27 import javax.swing.JScrollPane;
28
29 import com.eviware.soapui.support.DefaultHyperlinkListener;
30 import com.eviware.soapui.support.UISupport;
31 import com.eviware.soapui.support.components.ProgressDialog;
32 import com.eviware.x.dialogs.XDialogs;
33 import com.eviware.x.dialogs.XProgressDialog;
34 import com.jgoodies.forms.factories.ButtonBarFactory;
35
36 /***
37 *
38 * @author Lars
39 */
40 public class SwingDialogs implements XDialogs
41 {
42 private Component parent;
43 private JDialog extendedInfoDialog;
44 private Boolean extendedInfoResult;
45
46 public SwingDialogs(Component parent)
47 {
48 this.parent = parent;
49 }
50
51 public void showErrorMessage(String message)
52 {
53 if( parent == null )
54 return;
55
56 JOptionPane.showMessageDialog( parent, message, "Error", JOptionPane.ERROR_MESSAGE );
57 }
58
59 public boolean confirm(String question, String title)
60 {
61 return JOptionPane.showConfirmDialog( parent, question, title, JOptionPane.YES_NO_OPTION ) ==
62 JOptionPane.OK_OPTION;
63 }
64
65 public String prompt(String question, String title, String value)
66 {
67 return (String) JOptionPane.showInputDialog( parent, question, title, JOptionPane.QUESTION_MESSAGE,
68 null, null, value );
69 }
70
71 public String prompt(String question, String title)
72 {
73 return JOptionPane.showInputDialog(parent, question, title, JOptionPane.QUESTION_MESSAGE );
74 }
75
76 public void showInfoMessage( String message )
77 {
78 showInfoMessage( message, "Information" );
79 }
80
81 public void showInfoMessage(String message, String title)
82 {
83 JOptionPane.showMessageDialog( parent, message, title, JOptionPane.INFORMATION_MESSAGE );
84 }
85
86 public Object prompt(String question, String title, Object[] objects)
87 {
88 Object result = JOptionPane.showInputDialog( parent, question, title,
89 JOptionPane.OK_CANCEL_OPTION, null, objects, null );
90 return result;
91 }
92
93 public Object prompt(String question, String title, Object[] objects, String value )
94 {
95 Object result = JOptionPane.showInputDialog( parent, question, title,
96 JOptionPane.OK_CANCEL_OPTION, null, objects, value );
97 return result;
98 }
99
100 public Boolean confirmOrCancel(String question, String title )
101 {
102 int result = JOptionPane.showConfirmDialog( parent, question, title, JOptionPane.YES_NO_CANCEL_OPTION );
103
104 if( result == JOptionPane.CANCEL_OPTION )
105 return null;
106
107 return Boolean.valueOf( result == JOptionPane.YES_OPTION );
108 }
109
110 public XProgressDialog createProgressDialog(String label, int length, String initialValue, boolean canCancel)
111 {
112 return new ProgressDialog( "Progress", label, length, initialValue, canCancel );
113 }
114
115 public void showExtendedInfo( String title, String description, String content, Dimension size )
116 {
117 JPanel buttonBar = ButtonBarFactory.buildRightAlignedBar( new JButton( new OkAction( "OK" )));
118
119 showExtendedInfo( title, description, content, buttonBar, size );
120 }
121
122 private void showExtendedInfo( String title, String description, String content, JPanel buttonBar, Dimension size )
123 {
124 extendedInfoDialog = new JDialog( UISupport.getMainFrame(), title );
125 extendedInfoDialog.setModal( true );
126 JPanel panel = new JPanel( new BorderLayout() );
127
128 if( description != null )
129 {
130 panel.add( UISupport.buildDescription( title, description, null ), BorderLayout.NORTH );
131 }
132
133 JEditorPane editorPane = new JEditorPane( "text/html", content );
134 editorPane.setCaretPosition( 0 );
135 editorPane.setEditable( false );
136 editorPane.addHyperlinkListener( new DefaultHyperlinkListener( editorPane ) );
137
138 JScrollPane scrollPane = new JScrollPane( editorPane);
139 scrollPane.setBorder( BorderFactory.createCompoundBorder(
140 BorderFactory.createEmptyBorder( 5, 5, 5, 5), scrollPane.getBorder() ));
141
142 panel.add( scrollPane);
143 buttonBar.setBorder( BorderFactory.createEmptyBorder( 0, 0, 5, 5 ) );
144 panel.add( buttonBar, BorderLayout.SOUTH );
145
146 extendedInfoDialog.getRootPane().setContentPane( panel);
147 if( size == null )
148 extendedInfoDialog.setSize( 400, 300 );
149 else
150 extendedInfoDialog.setSize( size );
151
152 UISupport.showDialog( extendedInfoDialog );
153 }
154
155 public boolean confirmExtendedInfo( String title, String description, String content, Dimension size )
156 {
157 JPanel buttonBar = ButtonBarFactory.buildRightAlignedBar(
158 new JButton( new OkAction( "OK" )), new JButton( new CancelAction( "Cancel" )));
159
160 showExtendedInfo( title, description, content, buttonBar, size );
161
162 return extendedInfoResult == null ? false : extendedInfoResult;
163 }
164
165 public Boolean confirmOrCancleExtendedInfo( String title, String description, String content, Dimension size )
166 {
167 JPanel buttonBar = ButtonBarFactory.buildRightAlignedBar(
168 new JButton( new OkAction( "Yes" )), new JButton( new NoAction( "No" )),
169 new JButton( new CancelAction( "Cancel" )));
170
171 showExtendedInfo( title, description, content, buttonBar, size );
172
173 return extendedInfoResult;
174 }
175
176 private final class OkAction extends AbstractAction
177 {
178 public OkAction( String name )
179 {
180 super( name );
181 }
182
183 public void actionPerformed( ActionEvent e )
184 {
185 extendedInfoResult = true;
186 extendedInfoDialog.setVisible( false );
187 }
188 }
189
190 private final class NoAction extends AbstractAction
191 {
192 public NoAction( String name )
193 {
194 super( name );
195 }
196
197 public void actionPerformed( ActionEvent e )
198 {
199 extendedInfoResult = false;
200 extendedInfoDialog.setVisible( false );
201 }
202 }
203
204 private final class CancelAction extends AbstractAction
205 {
206 public CancelAction( String name )
207 {
208 super( name );
209 }
210
211 public void actionPerformed( ActionEvent e )
212 {
213 extendedInfoResult = null;
214 extendedInfoDialog.setVisible( false );
215 }
216 }
217
218 public String selectXPath( String title, String info, String xml, String xpath )
219 {
220 return prompt( "Specify XPath expression", "Select XPath", xpath );
221 }
222 }