package org.wiztools.restclient.ui.reqmethod; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import org.wiztools.restclient.bean.HTTPMethod; import org.wiztools.restclient.ui.RESTView; /** * * @author subwiz */ public class ReqMethodPanelImpl extends JPanel implements ReqMethodPanel { @Inject RESTView view; private final JRadioButton jrb_req_get = new JRadioButton("GET"); private final JRadioButton jrb_req_post = new JRadioButton("POST"); private final JRadioButton jrb_req_put = new JRadioButton("PUT"); private final JRadioButton jrb_req_patch = new JRadioButton("PATCH"); private final JRadioButton jrb_req_delete = new JRadioButton("DELETE"); private final JRadioButton jrb_req_head = new JRadioButton("HEAD"); private final JRadioButton jrb_req_options = new JRadioButton("OPTIONS"); private final JRadioButton jrb_req_trace = new JRadioButton("TRACE"); private final JRadioButton jrb_req_custom = new JRadioButton("Custom:"); private final JTextField jtf_custom = new JTextField(10); @Override public boolean doesSelectedMethodSupportEntityBody() { return jrb_req_get.isSelected() || jrb_req_post.isSelected() || jrb_req_put.isSelected() || jrb_req_patch.isSelected() || jrb_req_delete.isSelected() || jrb_req_custom.isSelected(); } @Override public HTTPMethod getSelectedMethod() { if(jrb_req_get.isSelected()){ return HTTPMethod.GET; } else if(jrb_req_head.isSelected()){ return HTTPMethod.HEAD; } else if(jrb_req_post.isSelected()){ return HTTPMethod.POST; } else if(jrb_req_put.isSelected()){ return HTTPMethod.PUT; } else if(jrb_req_patch.isSelected()) { return HTTPMethod.PATCH; } else if(jrb_req_delete.isSelected()){ return HTTPMethod.DELETE; } else if(jrb_req_options.isSelected()){ return HTTPMethod.OPTIONS; } else if(jrb_req_trace.isSelected()){ return HTTPMethod.TRACE; } else if(jrb_req_custom.isSelected()) { return HTTPMethod.get(jtf_custom.getText()); } else { throw new RuntimeException("Will NEVER come here!"); } } @Override public void setSelectedMethod(HTTPMethod method) { switch(method.name()) { case "GET": jrb_req_get.setSelected(true); break; case "HEAD": jrb_req_head.setSelected(true); break; case "POST": jrb_req_post.setSelected(true); break; case "PUT": jrb_req_put.setSelected(true); break; case "PATCH": jrb_req_patch.setSelected(true); break; case "DELETE": jrb_req_delete.setSelected(true); break; case "OPTIONS": jrb_req_options.setSelected(true); break; case "TRACE": jrb_req_trace.setSelected(true); break; default: jrb_req_custom.setSelected(true); jtf_custom.setText(method.name()); jtf_custom.setEnabled(true); } } @PostConstruct protected void init() { jtf_custom.setEnabled(false); ButtonGroup bg = new ButtonGroup(); bg.add(jrb_req_get); bg.add(jrb_req_post); bg.add(jrb_req_put); bg.add(jrb_req_patch); bg.add(jrb_req_delete); bg.add(jrb_req_head); bg.add(jrb_req_options); bg.add(jrb_req_trace); bg.add(jrb_req_custom); // Default selected button jrb_req_get.setSelected(true); // Mnemonic jrb_req_get.setMnemonic('g'); jrb_req_post.setMnemonic('p'); jrb_req_put.setMnemonic('t'); jrb_req_delete.setMnemonic('d'); ActionListener jrbAL = new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(doesSelectedMethodSupportEntityBody()){ view.enableBody(); } else{ view.disableBody(); } if(jrb_req_custom.isSelected()) { jtf_custom.setEnabled(true); jtf_custom.requestFocus(); } else { jtf_custom.setEnabled(false); } } }; jrb_req_get.addActionListener(jrbAL); jrb_req_post.addActionListener(jrbAL); jrb_req_put.addActionListener(jrbAL); jrb_req_patch.addActionListener(jrbAL); jrb_req_delete.addActionListener(jrbAL); jrb_req_head.addActionListener(jrbAL); jrb_req_options.addActionListener(jrbAL); jrb_req_trace.addActionListener(jrbAL); jrb_req_custom.addActionListener(jrbAL); // Placement JPanel jp_method = new JPanel(); jp_method.setBorder(BorderFactory.createTitledBorder("HTTP Method")); jp_method.setLayout(new GridLayout(5, 2)); jp_method.add(jrb_req_get); jp_method.add(jrb_req_post); jp_method.add(jrb_req_put); jp_method.add(jrb_req_patch); jp_method.add(jrb_req_delete); jp_method.add(jrb_req_head); jp_method.add(jrb_req_options); jp_method.add(jrb_req_trace); jp_method.add(jrb_req_custom); jp_method.add(jtf_custom); setLayout(new FlowLayout(FlowLayout.LEFT)); add(jp_method); } @Override public Component getComponent() { return this; } @Override public void clear() { jtf_custom.setText(""); jtf_custom.setEnabled(false); jrb_req_get.setSelected(true); } }