package org.wiztools.restclient.ui.reqbody; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JScrollPane; import org.wiztools.restclient.bean.*; import org.wiztools.restclient.ui.FontableEditor; import org.wiztools.restclient.ui.RESTUserInterface; import org.wiztools.restclient.ui.RESTView; import org.wiztools.restclient.ui.ScrollableComponent; /** * * @author subwiz */ public class ReqBodyPanelImpl extends JPanel implements ReqBodyPanel, FontableEditor, ScrollableComponent { @Inject RESTView view; @Inject RESTUserInterface rest_ui; @Inject private ReqBodyPanelNone jp_body_none; @Inject private ReqBodyPanelString jp_body_string; @Inject private ReqBodyPanelFile jp_body_file; @Inject private ReqBodyPanelByteArray jp_body_byte_array; @Inject private ReqBodyPanelUrlStream jp_body_url_stream; @Inject private ReqBodyPanelMultipart jp_body_multipart; private final JScrollPane jsp = new JScrollPane(); private final List<ReqBodyPanel> allPanels = new ArrayList<ReqBodyPanel>(); private static final String NONE_BODY = "None"; private static final String STRING_BODY = "String body"; private static final String FILE_BODY = "File body"; private static final String BYTE_ARRAY_BODY = "Byte-array body"; private static final String URL_STREAM_BODY = "URL Stream body"; private static final String MULTIPART_BODY = "Multipart body"; private static final String[] comboValues = new String[]{ NONE_BODY, STRING_BODY, FILE_BODY, BYTE_ARRAY_BODY, URL_STREAM_BODY, MULTIPART_BODY }; private final JComboBox<String> jcb_body_type = new JComboBox<String>(comboValues); private JPanel getPanelFromSelection() { if(jcb_body_type.getSelectedItem().equals(NONE_BODY)) { return jp_body_none; } else if(jcb_body_type.getSelectedItem().equals(STRING_BODY)) { return jp_body_string; } else if(jcb_body_type.getSelectedItem().equals(FILE_BODY)) { return jp_body_file; } else if(jcb_body_type.getSelectedItem().equals(BYTE_ARRAY_BODY)) { return jp_body_byte_array; } else if(jcb_body_type.getSelectedItem().equals(URL_STREAM_BODY)) { return jp_body_url_stream; } else if(jcb_body_type.getSelectedItem().equals(MULTIPART_BODY)) { return jp_body_multipart; } else { throw new RuntimeException("Will NEVER reach here!"); } } @Override public void setEntity(ReqEntity entity) { if(entity instanceof ReqEntityString) { jcb_body_type.setSelectedItem(STRING_BODY); jp_body_string.setEntity(entity); } else if(entity instanceof ReqEntityFile) { jcb_body_type.setSelectedItem(FILE_BODY); jp_body_file.setEntity(entity); } else if(entity instanceof ReqEntityByteArray) { jcb_body_type.setSelectedItem(BYTE_ARRAY_BODY); jp_body_byte_array.setEntity(entity); } else if(entity instanceof ReqEntityUrlStream) { jcb_body_type.setSelectedItem(URL_STREAM_BODY); jp_body_url_stream.setEntity(entity); } else if(entity instanceof ReqEntityMultipart) { jcb_body_type.setSelectedItem(MULTIPART_BODY); jp_body_multipart.setEntity(entity); } else { jcb_body_type.setSelectedItem(NONE_BODY); } } @Override public ReqEntity getEntity() { ReqBodyPanel panel = (ReqBodyPanel) getPanelFromSelection(); return panel.getEntity(); } @Override public void enableBody() { jcb_body_type.setEnabled(true); // ((ReqBodyPanel) getPanelFromSelection()).enableBody(); for(ReqBodyPanel panel: allPanels) { panel.enableBody(); } } @Override public void disableBody() { jcb_body_type.setEnabled(false); // ((ReqBodyPanel) getPanelFromSelection()).disableBody(); for(ReqBodyPanel panel: allPanels) { panel.disableBody(); } } @Override public void clear() { jcb_body_type.setSelectedItem(NONE_BODY); for(ReqBodyPanel panel: allPanels) { panel.clear(); } } @PostConstruct protected void init() { // Populate allPanels: allPanels.add(jp_body_string); allPanels.add(jp_body_file); allPanels.add(jp_body_byte_array); allPanels.add(jp_body_url_stream); allPanels.add(jp_body_multipart); // Create UI: jsp.setViewportView(jp_body_none); setLayout(new BorderLayout()); add(jcb_body_type, BorderLayout.NORTH); add(jsp, BorderLayout.CENTER); jcb_body_type.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { JPanel jp = getPanelFromSelection(); jsp.setViewportView(jp); jp.requestFocus(); } }); } @Override public void setEditorFont(Font font) { jp_body_string.setEditorFont(font); } @Override public Font getEditorFont() { return jp_body_string.getEditorFont(); } @Override public void setScrollSpeed(int scrollSpeed) { jsp.getVerticalScrollBar().setUnitIncrement(scrollSpeed); } @Override public Component getComponent() { return this; } }