16
16
*/
17
17
package io .github .ningyu .jmeter .plugin .dubbo .gui ;
18
18
19
+ import com .alibaba .dubbo .common .URL ;
20
+
19
21
import io .github .ningyu .jmeter .plugin .dubbo .sample .DubboSample ;
20
22
import io .github .ningyu .jmeter .plugin .dubbo .sample .MethodArgument ;
23
+ import io .github .ningyu .jmeter .plugin .dubbo .sample .ProviderService ;
24
+ import org .apache .commons .lang3 .StringUtils ;
25
+ import org .apache .jmeter .gui .util .HorizontalPanel ;
26
+ import org .apache .jmeter .gui .util .VerticalPanel ;
27
+ import org .apache .jmeter .samplers .gui .AbstractSamplerGui ;
28
+ import org .apache .jmeter .testelement .TestElement ;
29
+ import org .apache .jorphan .logging .LoggingManager ;
30
+ import org .apache .log .Logger ;
21
31
22
- import java .awt .BorderLayout ;
23
- import java .awt .Container ;
32
+ import javax .swing .*;
33
+ import javax .swing .table .DefaultTableModel ;
34
+ import java .awt .*;
24
35
import java .awt .event .ActionEvent ;
25
36
import java .awt .event .ActionListener ;
37
+ import java .awt .event .ItemEvent ;
38
+ import java .awt .event .ItemListener ;
39
+ import java .beans .PropertyChangeEvent ;
40
+ import java .beans .PropertyChangeListener ;
26
41
import java .util .ArrayList ;
27
42
import java .util .Iterator ;
28
43
import java .util .List ;
44
+ import java .util .Map ;
29
45
import java .util .Vector ;
30
46
31
- import javax .swing .BorderFactory ;
32
- import javax .swing .ImageIcon ;
33
- import javax .swing .JButton ;
34
- import javax .swing .JComboBox ;
35
- import javax .swing .JLabel ;
36
- import javax .swing .JPanel ;
37
- import javax .swing .JScrollPane ;
38
- import javax .swing .JTable ;
39
- import javax .swing .JTextField ;
40
- import javax .swing .SwingConstants ;
41
- import javax .swing .table .DefaultTableModel ;
42
-
43
- import org .apache .jmeter .gui .util .HorizontalPanel ;
44
- import org .apache .jmeter .gui .util .VerticalPanel ;
45
- import org .apache .jmeter .samplers .gui .AbstractSamplerGui ;
46
- import org .apache .jmeter .testelement .TestElement ;
47
- import org .apache .jorphan .logging .LoggingManager ;
48
- import org .apache .log .Logger ;
49
-
50
47
/**
51
48
* DubboSampleGui </br>
52
49
* invoke sequence**clearGui()->createTestElement()->modifyTestElement()->configure()**
@@ -58,7 +55,7 @@ public class DubboSampleGui extends AbstractSamplerGui {
58
55
/**
59
56
*/
60
57
private static final long serialVersionUID = -3248204995359935007L ;
61
-
58
+
62
59
private JComboBox <String > registryProtocolText ;
63
60
private JComboBox <String > rpcProtocolText ;
64
61
private JTextField addressText ;
@@ -76,7 +73,8 @@ public class DubboSampleGui extends AbstractSamplerGui {
76
73
private String [] columnNames = {"paramType" , "paramValue" };
77
74
private String [] tmpRow = {"" , "" };
78
75
private int textColumns = 2 ;
79
-
76
+ private JAutoCompleteComboBox <String > interfaceList ;
77
+ private JAutoCompleteComboBox <String > methodList ;
80
78
81
79
public DubboSampleGui () {
82
80
super ();
@@ -117,7 +115,51 @@ private void init() {
117
115
ah .add (addressText );
118
116
ah .add (addressHelpLable );
119
117
registrySettings .add (ah );
120
-
118
+ //Selection Interface
119
+ JPanel sh = new HorizontalPanel ();
120
+ JButton jButton = new JButton ("Get Provider List" );
121
+ interfaceList = new JAutoCompleteComboBox <String >(new DefaultComboBoxModel <String >(new String []{}), new ItemListener () {
122
+ @ Override
123
+ public void itemStateChanged (ItemEvent e ) {
124
+ if (e .getStateChange () == ItemEvent .SELECTED ) {
125
+ doChange (e .getItem ().toString ());
126
+ }
127
+ }
128
+ });
129
+ interfaceList .addPropertyChangeListener ("model" , new PropertyChangeListener () {
130
+ @ Override
131
+ public void propertyChange (PropertyChangeEvent evt ) {
132
+ doChange (interfaceList .getSelectedItem ().toString ());
133
+ }
134
+ });
135
+ jButton .addActionListener (new ActionListener () {
136
+ @ Override
137
+ public void actionPerformed (ActionEvent e ) {
138
+ doConfirm (e , interfaceList );
139
+ }
140
+ });
141
+ sh .add (jButton );
142
+ sh .add (new JLabel ("Interfaces:" , SwingConstants .RIGHT ));
143
+ sh .add (interfaceList );
144
+ sh .add (new JLabel ("Methods:" , SwingConstants .RIGHT ));
145
+ methodList = new JAutoCompleteComboBox <String >(new DefaultComboBoxModel <String >(new String []{}), new ItemListener () {
146
+ @ Override
147
+ public void itemStateChanged (ItemEvent e ) {
148
+ if (e .getStateChange () == ItemEvent .SELECTED ) {
149
+ methodText .setText (e .getItem ().toString ());
150
+ }
151
+ }
152
+ });
153
+ methodList .addPropertyChangeListener ("model" , new PropertyChangeListener () {
154
+ @ Override
155
+ public void propertyChange (PropertyChangeEvent evt ) {
156
+ methodText .setText (methodList .getSelectedItem ().toString ());
157
+ }
158
+ });
159
+ sh .add (methodList );
160
+ registrySettings .add (sh );
161
+
162
+
121
163
//RPC Protocol Settings
122
164
JPanel protocolSettings = new VerticalPanel ();
123
165
protocolSettings .setBorder (BorderFactory .createTitledBorder ("RPC Protocol Settings" ));
@@ -391,6 +433,50 @@ public void clearGui() {
391
433
model .setDataVector (null , columnNames );
392
434
}
393
435
436
+ private void doChange (String key ) {
437
+ ProviderService providerService = ProviderService .get (addressText .getText ());
438
+ Map <String , URL > provider = providerService .findByService (key );
439
+ if (provider != null && !provider .isEmpty ()) {
440
+ URL url = new ArrayList <URL >(provider .values ()).get (0 );
441
+ String group = url .getParameter (com .alibaba .dubbo .common .Constants .GROUP_KEY );
442
+ String version = url .getParameter (com .alibaba .dubbo .common .Constants .VERSION_KEY );
443
+ String timeout = url .getParameter (com .alibaba .dubbo .common .Constants .TIMEOUT_KEY );
444
+ String protocol = url .getProtocol () + "://" ;
445
+ String interfaceName = url .getServiceInterface ();
446
+ String method = url .getParameter (com .alibaba .dubbo .common .Constants .METHODS_KEY );
447
+ groupText .setText (group );
448
+ versionText .setText (version );
449
+ timeoutText .setText (timeout );
450
+ rpcProtocolText .setSelectedItem (protocol );
451
+ interfaceText .setText (interfaceName );
452
+ //set method
453
+ String [] items = method .split ("," );
454
+ methodList .setModel (new DefaultComboBoxModel <String >(items ));
455
+ }
456
+ }
457
+
458
+ private void doConfirm (ActionEvent event , JAutoCompleteComboBox <String > interfaceList ) {
459
+ String protocol = registryProtocolText .getSelectedItem ().toString ();
460
+ String address = addressText .getText ();
461
+ if (StringUtils .isBlank (address )) {
462
+ JOptionPane .showMessageDialog (this .getParent (), "Address can't be empty!" , "error" , JOptionPane .ERROR_MESSAGE );
463
+ return ;
464
+ }
465
+ int result = JOptionPane .showConfirmDialog (this .getParent (), "Obtaining all the providers lists may cause jmeter to stop responding for a few seconds. Do you want to continue?" , "warn" , JOptionPane .YES_NO_CANCEL_OPTION );
466
+ if (result == JOptionPane .YES_OPTION ) {
467
+ List <String > list = new ArrayList <String >();
468
+ try {
469
+ list = ProviderService .get (address ).getProviders (protocol , address );
470
+ JOptionPane .showMessageDialog (this .getParent (), "Get provider list to finish! Check if the log has errors." , "info" , JOptionPane .INFORMATION_MESSAGE );
471
+ } catch (Exception e ) {
472
+ JOptionPane .showMessageDialog (this .getParent (), e .getMessage (), "error" , JOptionPane .ERROR_MESSAGE );
473
+ return ;
474
+ }
475
+ String [] items = list .toArray (new String []{});
476
+ interfaceList .setModel (new DefaultComboBoxModel <String >(items ));
477
+ }
478
+ }
479
+
394
480
}
395
481
396
482
0 commit comments