Java tutorial
/** * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.mozilla.org/MPL/ * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the * specific language governing rights and limitations under the License. * * The Original Code is "" Description: * "" * * The Initial Developer of the Original Code is University Health Network. Copyright (C) * 2001. All Rights Reserved. * * Contributor(s): ______________________________________. * * Alternatively, the contents of this file may be used under the terms of the * GNU General Public License (the "GPL"), in which case the provisions of the GPL are * applicable instead of those above. If you wish to allow use of your version of this * file only under the terms of the GPL and not to allow others to use your version * of this file under the MPL, indicate your decision by deleting the provisions above * and replace them with the notice and other provisions required by the GPL License. * If you do not delete the provisions above, a recipient may use your version of * this file under either the MPL or the GPL. */ package ca.uhn.hl7v2.testpanel.ui.conn; import static org.apache.commons.lang.StringUtils.*; import java.awt.CardLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.ButtonGroup; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.border.EtchedBorder; import javax.swing.event.DocumentEvent; import org.apache.commons.lang.StringUtils; import ca.uhn.hl7v2.testpanel.api.WorkingStatusBean; import ca.uhn.hl7v2.testpanel.controller.Controller; import ca.uhn.hl7v2.testpanel.controller.Prefs; import ca.uhn.hl7v2.testpanel.model.conn.AbstractConnection; import ca.uhn.hl7v2.testpanel.model.conn.AbstractConnection.StatusEnum; import ca.uhn.hl7v2.testpanel.model.conn.OutboundConnection; import ca.uhn.hl7v2.testpanel.model.conn.TransportStyleEnum; import ca.uhn.hl7v2.testpanel.ui.IDestroyable; import ca.uhn.hl7v2.testpanel.util.SimpleDocumentListener; import ca.uhn.hl7v2.testpanel.xsd.Hl7V2EncodingTypeEnum; public class Hl7ConnectionPanel extends JPanel implements IDestroyable { private static final Color ERROR_BG = new Color(1.0f, 0.8f, 0.8f); private static final String HOH_SIGNATURE_KEY_USE_ANY_AVAILABLE = "Use any available"; private static final ImageIcon ICON_INFO_OK = new ImageIcon( Hl7ConnectionPanel.class.getResource("/ca/uhn/hl7v2/testpanel/images/info_ok.png")); private static final ImageIcon ICON_INFO_WARNING = new ImageIcon( Hl7ConnectionPanel.class.getResource("/ca/uhn/hl7v2/testpanel/images/info_warning.png")); private static final ImageIcon ICON_INFO_WORKING = new ImageIcon( Hl7ConnectionPanel.class.getResource("/ca/uhn/hl7v2/testpanel/images/info_working.png")); private static final String IFACE_TYPE_CARD_HOH = "hohCard"; private static final String IFACE_TYPE_CARD_MLLP = "name_1344598061103376000"; private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(Hl7ConnectionPanel.class); private final ButtonGroup charsetButtonGroup = new ButtonGroup(); private final ButtonGroup encodingButtonGroup = new ButtonGroup(); private JPanel hohAuthPanel; private JCheckBox myCaptureByteStreamCheckbox; private JComboBox myCharsetCombo; private JRadioButton myCharsetDetectRadio; private JRadioButton myCharsetSelectRadio; private AbstractConnection myConnection; private JTextField myDualIncomingTextBox; private JTextField myDualOutgoingTextBox; private JRadioButton myDualPortRadio; private JRadioButton myEr7Radio; private JRadioButton myHl7OverHttpRadioButton; private JCheckBox myHohAuthEnabledCheckbox; private JTextField myHohAuthPasswordTextbox; private JTextField myHohAuthUsernameTextbox; private JPanel myHoHCard; private JTextField myHohSecurityKeyPwTextBox; private JButton myHohSecurityKeystoreChooseBtn; private JTextField myHohSecurityKeystoreTextbox; private JLabel myHohSecurityProfileKeystoreStatus; private PropertyChangeListener myHohSecurityProfileKeystoreStatusListener; private JCheckBox myHohSignatureEnabled; private JComboBox myHohSignatureKeyAliasCombo; private JTextField myHohSignatureKeyPass; private JButton myHohSignatureKeystoreChooseButton; private JTextField myHohSignatureKeystorePasswordTextbox; private JTextField myHohSignatureKeystoreTextbox; private JLabel myHohSignatureStatusLabel; private JCheckBox myHohTlsCheckbox; private JTextField myHoHUrlTextField; private boolean myHohUrlTextFieldUpdating; private JTextField myHostBox; private JPanel myInterfaceTypeCardPanel; private JLabel mylabel; private JLabel mylabel_1; private JLabel mylabel_10; private JLabel mylabel_11; private JLabel mylabel_12; // private JPanel securityProfilePanel; private JLabel mylabel_13; private JLabel mylabel_2; private JLabel mylabel_3; private JLabel mylabel_4; private JLabel mylabel_5; private JLabel mylabel_6; private JLabel mylabel_7; private JLabel mylabel_8; private JLabel mylabel_9; private JPanel myMllpCard; private JPanel mypanel; private JPanel mypanel_1; private JPanel mypanel_2; private JPanel mypanel_3; private final ButtonGroup myPortButtonGroup = new ButtonGroup(); private JRadioButton mySinglePortRadio; private JTextField mySinglePortTextBox; private PropertyChangeListener myStatusLinePropertyChangeListener; private PropertyChangeListener myStatusPropertyChangeListener; private JCheckBox myTlsCheckbox; private boolean myUpdatingHohSignatureKeyAliasCombo; private JRadioButton myXmlRadio; private JPanel tlsKeystorePanel; private KeystoreStatusListener myHohSignatureStatusListener; private PropertyChangeListener myHohSignerAvailableAliasesListener; /** * Create the panel. */ public Hl7ConnectionPanel(Controller theController) { setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[] { 150, 0 }; gridBagLayout.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }; gridBagLayout.columnWeights = new double[] { 0.0, 1.0 }; gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE }; setLayout(gridBagLayout); mySinglePortRadio = new JRadioButton("Single Port MLLP"); mySinglePortRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updatePortsModel(); updatePortsUi(); } }); myPortButtonGroup.add(mySinglePortRadio); GridBagConstraints gbc_SinglePortRadio = new GridBagConstraints(); gbc_SinglePortRadio.anchor = GridBagConstraints.WEST; gbc_SinglePortRadio.insets = new Insets(0, 0, 5, 5); gbc_SinglePortRadio.gridx = 0; gbc_SinglePortRadio.gridy = 0; add(mySinglePortRadio, gbc_SinglePortRadio); JPanel panel_4 = new JPanel(); panel_4.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_panel_4 = new GridBagConstraints(); gbc_panel_4.fill = GridBagConstraints.BOTH; gbc_panel_4.insets = new Insets(0, 0, 5, 0); gbc_panel_4.gridx = 1; gbc_panel_4.gridy = 0; add(panel_4, gbc_panel_4); GridBagLayout gbl_panel_4 = new GridBagLayout(); gbl_panel_4.columnWidths = new int[] { 0, 0, 0 }; gbl_panel_4.rowHeights = new int[] { 0, 0 }; gbl_panel_4.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; gbl_panel_4.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; panel_4.setLayout(gbl_panel_4); mySinglePortTextBox = new JTextField(); mySinglePortTextBox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { String text = mySinglePortTextBox.getText(); text = text.replaceAll("[^0-9]+", ""); if (!StringUtils.equals(mySinglePortTextBox.getText(), text)) { final String newVal = text; SwingUtilities.invokeLater(new Runnable() { public void run() { mySinglePortTextBox.setText(newVal); } }); } if (mySinglePortRadio.isSelected()) { if (text.length() > 0) { myConnection.setIncomingOrSinglePort(Integer.parseInt(text)); } else { myConnection.setIncomingOrSinglePort(-1); } } } }); mylabel = new JLabel("Port"); mylabel.setHorizontalAlignment(SwingConstants.CENTER); mylabel.setPreferredSize(new Dimension(60, 16)); mylabel.setMinimumSize(new Dimension(60, 16)); mylabel.setMaximumSize(new Dimension(60, 16)); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.anchor = GridBagConstraints.EAST; gbc_label.insets = new Insets(0, 0, 0, 5); gbc_label.gridx = 0; gbc_label.gridy = 0; panel_4.add(mylabel, gbc_label); GridBagConstraints gbc_SinglePortTextBox = new GridBagConstraints(); gbc_SinglePortTextBox.insets = new Insets(0, 5, 0, 0); gbc_SinglePortTextBox.anchor = GridBagConstraints.WEST; gbc_SinglePortTextBox.gridx = 1; gbc_SinglePortTextBox.gridy = 0; panel_4.add(mySinglePortTextBox, gbc_SinglePortTextBox); mySinglePortTextBox.setMinimumSize(new Dimension(100, 28)); mySinglePortTextBox.setMaximumSize(new Dimension(100, 2147483647)); mySinglePortTextBox.setColumns(10); myDualPortRadio = new JRadioButton("Dual Port MLLP"); myDualPortRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updatePortsModel(); updatePortsUi(); } }); myPortButtonGroup.add(myDualPortRadio); GridBagConstraints gbc_DualPortRadio = new GridBagConstraints(); gbc_DualPortRadio.anchor = GridBagConstraints.WEST; gbc_DualPortRadio.insets = new Insets(0, 0, 5, 5); gbc_DualPortRadio.gridx = 0; gbc_DualPortRadio.gridy = 1; add(myDualPortRadio, gbc_DualPortRadio); JPanel panel = new JPanel(); panel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_BottomPanel = new GridBagConstraints(); gbc_BottomPanel.insets = new Insets(0, 0, 5, 0); gbc_BottomPanel.fill = GridBagConstraints.BOTH; gbc_BottomPanel.gridx = 1; gbc_BottomPanel.gridy = 1; add(panel, gbc_BottomPanel); GridBagLayout gbl_panel = new GridBagLayout(); gbl_panel.columnWidths = new int[] { 0, 0, 0, 0, 0, 0 }; gbl_panel.rowHeights = new int[] { 0, 0 }; gbl_panel.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_panel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; panel.setLayout(gbl_panel); JLabel lblInbound = new JLabel("Inbound"); lblInbound.setHorizontalAlignment(SwingConstants.CENTER); lblInbound.setPreferredSize(new Dimension(60, 16)); lblInbound.setMinimumSize(new Dimension(60, 16)); lblInbound.setMaximumSize(new Dimension(60, 16)); GridBagConstraints gbc_lblInbound = new GridBagConstraints(); gbc_lblInbound.insets = new Insets(0, 5, 0, 5); gbc_lblInbound.anchor = GridBagConstraints.EAST; gbc_lblInbound.gridx = 0; gbc_lblInbound.gridy = 0; panel.add(lblInbound, gbc_lblInbound); myDualIncomingTextBox = new JTextField(); myDualIncomingTextBox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { String text = myDualIncomingTextBox.getText(); text = text.replaceAll("[^0-9]+", ""); if (!StringUtils.equals(myDualIncomingTextBox.getText(), text)) { final String newVal = text; SwingUtilities.invokeLater(new Runnable() { public void run() { myDualIncomingTextBox.setText(newVal); } }); } if (myDualPortRadio.isSelected()) { if (text.length() > 0) { myConnection.setIncomingOrSinglePort(Integer.parseInt(text)); } else { myConnection.setIncomingOrSinglePort(-1); } } } }); myDualIncomingTextBox.setMaximumSize(new Dimension(100, 2147483647)); myDualIncomingTextBox.setMinimumSize(new Dimension(100, 28)); GridBagConstraints gbc_DualIncomingTextBox = new GridBagConstraints(); gbc_DualIncomingTextBox.anchor = GridBagConstraints.WEST; gbc_DualIncomingTextBox.insets = new Insets(0, 0, 0, 5); gbc_DualIncomingTextBox.gridx = 1; gbc_DualIncomingTextBox.gridy = 0; panel.add(myDualIncomingTextBox, gbc_DualIncomingTextBox); myDualIncomingTextBox.setColumns(10); JLabel lblOutbound = new JLabel("Outbound"); GridBagConstraints gbc_lblOutbound = new GridBagConstraints(); gbc_lblOutbound.anchor = GridBagConstraints.EAST; gbc_lblOutbound.insets = new Insets(0, 0, 0, 5); gbc_lblOutbound.gridx = 2; gbc_lblOutbound.gridy = 0; panel.add(lblOutbound, gbc_lblOutbound); myDualOutgoingTextBox = new JTextField(); myDualOutgoingTextBox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { String text = myDualOutgoingTextBox.getText(); text = text.replaceAll("[^0-9]+", ""); if (!StringUtils.equals(myDualOutgoingTextBox.getText(), text)) { final String newVal = text; SwingUtilities.invokeLater(new Runnable() { public void run() { myDualOutgoingTextBox.setText(newVal); } }); } if (myDualPortRadio.isSelected()) { if (text.length() > 0) { myConnection.setOutgoingPort(Integer.parseInt(text)); } else { myConnection.setOutgoingPort(-1); } } } }); myDualOutgoingTextBox.setMinimumSize(new Dimension(100, 28)); myDualOutgoingTextBox.setMaximumSize(new Dimension(100, 2147483647)); GridBagConstraints gbc_DualOutgoingTextBox = new GridBagConstraints(); gbc_DualOutgoingTextBox.insets = new Insets(0, 0, 0, 5); gbc_DualOutgoingTextBox.anchor = GridBagConstraints.WEST; gbc_DualOutgoingTextBox.gridx = 3; gbc_DualOutgoingTextBox.gridy = 0; panel.add(myDualOutgoingTextBox, gbc_DualOutgoingTextBox); myDualOutgoingTextBox.setColumns(10); myHl7OverHttpRadioButton = new JRadioButton("HL7 over HTTP"); myHl7OverHttpRadioButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updatePortsModel(); updatePortsUi(); } }); myPortButtonGroup.add(myHl7OverHttpRadioButton); GridBagConstraints gbc_Hl7OverHttpRadioButton = new GridBagConstraints(); gbc_Hl7OverHttpRadioButton.anchor = GridBagConstraints.WEST; gbc_Hl7OverHttpRadioButton.insets = new Insets(0, 0, 5, 5); gbc_Hl7OverHttpRadioButton.gridx = 0; gbc_Hl7OverHttpRadioButton.gridy = 2; add(myHl7OverHttpRadioButton, gbc_Hl7OverHttpRadioButton); mypanel = new JPanel(); mypanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_panel = new GridBagConstraints(); gbc_panel.insets = new Insets(0, 0, 5, 0); gbc_panel.fill = GridBagConstraints.BOTH; gbc_panel.gridx = 1; gbc_panel.gridy = 2; add(mypanel, gbc_panel); GridBagLayout gbl_panel2 = new GridBagLayout(); gbl_panel2.columnWidths = new int[] { 0, 0 }; gbl_panel2.rowHeights = new int[] { 0, 0 }; gbl_panel2.columnWeights = new double[] { 0.0, 1.0 }; gbl_panel2.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; mypanel.setLayout(gbl_panel2); mylabel_1 = new JLabel("URL"); mylabel_1.setHorizontalAlignment(SwingConstants.CENTER); mylabel_1.setPreferredSize(new Dimension(60, 16)); mylabel_1.setMinimumSize(new Dimension(60, 16)); mylabel_1.setMaximumSize(new Dimension(60, 16)); GridBagConstraints gbc_label_1 = new GridBagConstraints(); gbc_label_1.anchor = GridBagConstraints.EAST; gbc_label_1.insets = new Insets(0, 0, 0, 5); gbc_label_1.gridx = 0; gbc_label_1.gridy = 0; mypanel.add(mylabel_1, gbc_label_1); myHoHUrlTextField = new JTextField(); myHoHUrlTextField.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { if (myHohUrlTextFieldUpdating) { return; } String value = myHoHUrlTextField.getText(); try { URL url = new URL(value); boolean tls; if (url.getProtocol().equals("http")) { tls = false; } else if (url.getProtocol().equals("https")) { tls = true; } else { ourLog.info("Unknown protocol: {}", url.getProtocol()); myHoHUrlTextField.setBackground(ERROR_BG); return; } myConnection.setTls(tls); myConnection.setHost(url.getHost()); myConnection .setIncomingOrSinglePort(url.getPort() != -1 ? url.getPort() : url.getDefaultPort()); myConnection.setHttpUriPath(url.getPath()); myHohUrlTextFieldUpdating = true; updatePortsUi(); myHohUrlTextFieldUpdating = false; myTlsCheckbox.setSelected(tls); myHohTlsCheckbox.setSelected(tls); myHoHUrlTextField.setBackground(Color.white); } catch (MalformedURLException e) { myHoHUrlTextField.setBackground(ERROR_BG); } } }); GridBagConstraints gbc_HohUsernameTextbox = new GridBagConstraints(); gbc_HohUsernameTextbox.fill = GridBagConstraints.HORIZONTAL; gbc_HohUsernameTextbox.gridx = 1; gbc_HohUsernameTextbox.gridy = 0; mypanel.add(myHoHUrlTextField, gbc_HohUsernameTextbox); myHoHUrlTextField.setColumns(10); JLabel lblEncoding = new JLabel("Encoding"); GridBagConstraints gbc_lblEncoding = new GridBagConstraints(); gbc_lblEncoding.insets = new Insets(0, 0, 5, 5); gbc_lblEncoding.gridx = 0; gbc_lblEncoding.gridy = 3; add(lblEncoding, gbc_lblEncoding); JPanel encodingPanel = new JPanel(); GridBagConstraints gbc_encodingPanel = new GridBagConstraints(); gbc_encodingPanel.fill = GridBagConstraints.HORIZONTAL; gbc_encodingPanel.insets = new Insets(0, 0, 5, 0); gbc_encodingPanel.gridx = 1; gbc_encodingPanel.gridy = 3; add(encodingPanel, gbc_encodingPanel); encodingPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagLayout gbl_encodingPanel = new GridBagLayout(); gbl_encodingPanel.columnWidths = new int[] { 144, 58, 0 }; gbl_encodingPanel.rowHeights = new int[] { 23, 0 }; gbl_encodingPanel.columnWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE }; gbl_encodingPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; encodingPanel.setLayout(gbl_encodingPanel); myXmlRadio = new JRadioButton("XML"); myXmlRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent theE) { updateEncodingModel(); } }); myEr7Radio = new JRadioButton("ER7 (Pipe and hat)"); myEr7Radio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateEncodingModel(); } }); encodingButtonGroup.add(myEr7Radio); GridBagConstraints gbc_Er7Radio = new GridBagConstraints(); gbc_Er7Radio.anchor = GridBagConstraints.NORTHWEST; gbc_Er7Radio.insets = new Insets(0, 0, 0, 5); gbc_Er7Radio.gridx = 0; gbc_Er7Radio.gridy = 0; encodingPanel.add(myEr7Radio, gbc_Er7Radio); encodingButtonGroup.add(myXmlRadio); GridBagConstraints gbc_XmlRadio = new GridBagConstraints(); gbc_XmlRadio.anchor = GridBagConstraints.NORTHWEST; gbc_XmlRadio.gridx = 1; gbc_XmlRadio.gridy = 0; encodingPanel.add(myXmlRadio, gbc_XmlRadio); JLabel lblCharset = new JLabel("Charset"); GridBagConstraints gbc_lblCharset = new GridBagConstraints(); gbc_lblCharset.insets = new Insets(0, 0, 5, 5); gbc_lblCharset.gridx = 0; gbc_lblCharset.gridy = 4; add(lblCharset, gbc_lblCharset); JPanel panel_2 = new JPanel(); GridBagConstraints gbc_panel_2 = new GridBagConstraints(); gbc_panel_2.fill = GridBagConstraints.HORIZONTAL; gbc_panel_2.insets = new Insets(0, 0, 5, 0); gbc_panel_2.gridx = 1; gbc_panel_2.gridy = 4; add(panel_2, gbc_panel_2); panel_2.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagLayout gbl_panel_2 = new GridBagLayout(); gbl_panel_2.columnWidths = new int[] { 28, 198, 0, 0 }; gbl_panel_2.rowHeights = new int[] { 27, 0 }; gbl_panel_2.columnWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_panel_2.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; panel_2.setLayout(gbl_panel_2); myCharsetSelectRadio = new JRadioButton(""); myCharsetSelectRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateCharsetModel(); } }); charsetButtonGroup.add(myCharsetSelectRadio); GridBagConstraints gbc_CharsetSelectRadio = new GridBagConstraints(); gbc_CharsetSelectRadio.anchor = GridBagConstraints.WEST; gbc_CharsetSelectRadio.insets = new Insets(0, 0, 0, 5); gbc_CharsetSelectRadio.gridx = 0; gbc_CharsetSelectRadio.gridy = 0; panel_2.add(myCharsetSelectRadio, gbc_CharsetSelectRadio); myCharsetCombo = new JComboBox(); myCharsetCombo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateCharsetModel(); } }); GridBagConstraints gbc_CharsetCombo = new GridBagConstraints(); gbc_CharsetCombo.anchor = GridBagConstraints.NORTHWEST; gbc_CharsetCombo.insets = new Insets(0, 0, 0, 5); gbc_CharsetCombo.gridx = 1; gbc_CharsetCombo.gridy = 0; panel_2.add(myCharsetCombo, gbc_CharsetCombo); myCharsetDetectRadio = new JRadioButton("Detect in Message (MSH-18)"); myCharsetDetectRadio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateCharsetModel(); } }); charsetButtonGroup.add(myCharsetDetectRadio); GridBagConstraints gbc_CharsetDetectRadio = new GridBagConstraints(); gbc_CharsetDetectRadio.anchor = GridBagConstraints.NORTH; gbc_CharsetDetectRadio.gridwidth = 2; gbc_CharsetDetectRadio.gridx = 2; gbc_CharsetDetectRadio.gridy = 0; panel_2.add(myCharsetDetectRadio, gbc_CharsetDetectRadio); mylabel_5 = new JLabel("Debug"); GridBagConstraints gbc_label_5 = new GridBagConstraints(); gbc_label_5.insets = new Insets(0, 0, 5, 5); gbc_label_5.gridx = 0; gbc_label_5.gridy = 5; add(mylabel_5, gbc_label_5); mypanel_2 = new JPanel(); mypanel_2.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_panel_75 = new GridBagConstraints(); gbc_panel_75.insets = new Insets(0, 0, 5, 0); gbc_panel_75.fill = GridBagConstraints.BOTH; gbc_panel_75.gridx = 1; gbc_panel_75.gridy = 5; add(mypanel_2, gbc_panel_75); GridBagLayout gbl_panel_74 = new GridBagLayout(); gbl_panel_74.columnWidths = new int[] { 0, 0 }; gbl_panel_74.rowHeights = new int[] { 0, 0 }; gbl_panel_74.columnWeights = new double[] { 0.0, Double.MIN_VALUE }; gbl_panel_74.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; mypanel_2.setLayout(gbl_panel_74); myCaptureByteStreamCheckbox = new JCheckBox("Capture Bytes"); GridBagConstraints gbc_CaptureByteStreamCheckbox = new GridBagConstraints(); gbc_CaptureByteStreamCheckbox.gridx = 0; gbc_CaptureByteStreamCheckbox.gridy = 0; mypanel_2.add(myCaptureByteStreamCheckbox, gbc_CaptureByteStreamCheckbox); myCaptureByteStreamCheckbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { myConnection.setCaptureBytes(myCaptureByteStreamCheckbox.isSelected()); } }); myCaptureByteStreamCheckbox.setToolTipText("Check this box to capture the transport level communication"); myInterfaceTypeCardPanel = new JPanel(); myInterfaceTypeCardPanel.setBorder(null); GridBagConstraints gbc_InterfaceTypeCardPanel = new GridBagConstraints(); gbc_InterfaceTypeCardPanel.gridwidth = 2; gbc_InterfaceTypeCardPanel.fill = GridBagConstraints.BOTH; gbc_InterfaceTypeCardPanel.gridx = 0; gbc_InterfaceTypeCardPanel.gridy = 6; add(myInterfaceTypeCardPanel, gbc_InterfaceTypeCardPanel); myInterfaceTypeCardPanel.setLayout(new CardLayout(0, 0)); myMllpCard = new JPanel(); myMllpCard.setBorder(null); myInterfaceTypeCardPanel.add(myMllpCard, IFACE_TYPE_CARD_MLLP); GridBagLayout gbl_MllpCard = new GridBagLayout(); gbl_MllpCard.columnWidths = new int[] { 150, 0, 0 }; gbl_MllpCard.rowHeights = new int[] { 0, 0, 0, 0 }; gbl_MllpCard.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; gbl_MllpCard.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; myMllpCard.setLayout(gbl_MllpCard); JLabel lblHost = new JLabel("Host"); GridBagConstraints gbc_lblHost = new GridBagConstraints(); gbc_lblHost.insets = new Insets(0, 0, 5, 5); gbc_lblHost.gridx = 0; gbc_lblHost.gridy = 0; myMllpCard.add(lblHost, gbc_lblHost); mypanel_1 = new JPanel(); mypanel_1.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_panel_1 = new GridBagConstraints(); gbc_panel_1.insets = new Insets(0, 0, 5, 0); gbc_panel_1.fill = GridBagConstraints.BOTH; gbc_panel_1.gridx = 1; gbc_panel_1.gridy = 0; myMllpCard.add(mypanel_1, gbc_panel_1); GridBagLayout gbl_panel_1 = new GridBagLayout(); gbl_panel_1.columnWidths = new int[] { 134, 0 }; gbl_panel_1.rowHeights = new int[] { 28, 0 }; gbl_panel_1.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; gbl_panel_1.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; mypanel_1.setLayout(gbl_panel_1); myHostBox = new JTextField(); GridBagConstraints gbc_HostBox = new GridBagConstraints(); gbc_HostBox.fill = GridBagConstraints.HORIZONTAL; gbc_HostBox.anchor = GridBagConstraints.NORTH; gbc_HostBox.gridx = 0; gbc_HostBox.gridy = 0; mypanel_1.add(myHostBox, gbc_HostBox); myHostBox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setHost(myHostBox.getText()); } }); myHostBox.setColumns(10); JLabel lblTransport = new JLabel("Transport"); GridBagConstraints gbc_lblTransport = new GridBagConstraints(); gbc_lblTransport.insets = new Insets(0, 0, 5, 5); gbc_lblTransport.gridx = 0; gbc_lblTransport.gridy = 1; myMllpCard.add(lblTransport, gbc_lblTransport); JPanel panel_3 = new JPanel(); GridBagConstraints gbc_hohAuthPanel = new GridBagConstraints(); gbc_hohAuthPanel.fill = GridBagConstraints.HORIZONTAL; gbc_hohAuthPanel.insets = new Insets(0, 0, 5, 0); gbc_hohAuthPanel.gridx = 1; gbc_hohAuthPanel.gridy = 1; myMllpCard.add(panel_3, gbc_hohAuthPanel); panel_3.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagLayout gbl_hohAuthPanel = new GridBagLayout(); gbl_hohAuthPanel.columnWidths = new int[] { 0, 0, 0 }; gbl_hohAuthPanel.rowHeights = new int[] { 0, 0 }; gbl_hohAuthPanel.columnWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE }; gbl_hohAuthPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; panel_3.setLayout(gbl_hohAuthPanel); myTlsCheckbox = new JCheckBox("Use TLS/SSL"); myTlsCheckbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { myHohTlsCheckbox.setSelected(myTlsCheckbox.isSelected()); myConnection.setTls(myTlsCheckbox.isSelected()); } }); GridBagConstraints gbc_TlsCheckbox = new GridBagConstraints(); gbc_TlsCheckbox.insets = new Insets(0, 0, 0, 5); gbc_TlsCheckbox.anchor = GridBagConstraints.WEST; gbc_TlsCheckbox.gridx = 0; gbc_TlsCheckbox.gridy = 0; panel_3.add(myTlsCheckbox, gbc_TlsCheckbox); myHoHCard = new JPanel(); myInterfaceTypeCardPanel.add(myHoHCard, IFACE_TYPE_CARD_HOH); GridBagLayout gbl_HoHCard = new GridBagLayout(); gbl_HoHCard.columnWidths = new int[] { 150, 0, 0 }; gbl_HoHCard.rowHeights = new int[] { 0, 0, 0, 0 }; gbl_HoHCard.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; gbl_HoHCard.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; myHoHCard.setLayout(gbl_HoHCard); mylabel_6 = new JLabel("Authorization"); GridBagConstraints gbc_label_6 = new GridBagConstraints(); gbc_label_6.insets = new Insets(0, 0, 5, 5); gbc_label_6.gridx = 0; gbc_label_6.gridy = 0; myHoHCard.add(mylabel_6, gbc_label_6); hohAuthPanel = new JPanel(); hohAuthPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_hohAuthPanel2 = new GridBagConstraints(); gbc_hohAuthPanel2.insets = new Insets(0, 0, 5, 0); gbc_hohAuthPanel2.fill = GridBagConstraints.BOTH; gbc_hohAuthPanel2.gridx = 1; gbc_hohAuthPanel2.gridy = 0; myHoHCard.add(hohAuthPanel, gbc_hohAuthPanel2); GridBagLayout gbl_hohAuthPanel3 = new GridBagLayout(); gbl_hohAuthPanel3.columnWidths = new int[] { 0, 0, 0, 0, 0, 0, 0 }; gbl_hohAuthPanel3.rowHeights = new int[] { 0, 0 }; gbl_hohAuthPanel3.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE }; gbl_hohAuthPanel3.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; hohAuthPanel.setLayout(gbl_hohAuthPanel3); myHohAuthEnabledCheckbox = new JCheckBox("Enabled"); myHohAuthEnabledCheckbox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent theE) { myConnection.setHohAuthenticationEnabled(myHohAuthEnabledCheckbox.isSelected()); } }); GridBagConstraints gbc_HohAuthEnabledCheckbox = new GridBagConstraints(); gbc_HohAuthEnabledCheckbox.insets = new Insets(0, 0, 0, 5); gbc_HohAuthEnabledCheckbox.gridx = 0; gbc_HohAuthEnabledCheckbox.gridy = 0; hohAuthPanel.add(myHohAuthEnabledCheckbox, gbc_HohAuthEnabledCheckbox); mylabel_7 = new JLabel("Username:"); GridBagConstraints gbc_label_7 = new GridBagConstraints(); gbc_label_7.insets = new Insets(0, 0, 0, 5); gbc_label_7.anchor = GridBagConstraints.EAST; gbc_label_7.gridx = 1; gbc_label_7.gridy = 0; hohAuthPanel.add(mylabel_7, gbc_label_7); myHohAuthUsernameTextbox = new JTextField(); myHohAuthUsernameTextbox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setHohAuthenticationUsername(myHohAuthUsernameTextbox.getText()); } }); myHohAuthUsernameTextbox.setMaximumSize(new Dimension(200, 2147483647)); myHohAuthUsernameTextbox.setMinimumSize(new Dimension(100, 28)); myHohAuthUsernameTextbox.setPreferredSize(new Dimension(100, 28)); GridBagConstraints gbc_HohUsernameTextbox2 = new GridBagConstraints(); gbc_HohUsernameTextbox2.insets = new Insets(0, 0, 0, 5); gbc_HohUsernameTextbox2.fill = GridBagConstraints.HORIZONTAL; gbc_HohUsernameTextbox2.gridx = 2; gbc_HohUsernameTextbox2.gridy = 0; hohAuthPanel.add(myHohAuthUsernameTextbox, gbc_HohUsernameTextbox2); myHohAuthUsernameTextbox.setColumns(10); mylabel_8 = new JLabel("Password:"); GridBagConstraints gbc_label_8 = new GridBagConstraints(); gbc_label_8.insets = new Insets(0, 0, 0, 5); gbc_label_8.anchor = GridBagConstraints.EAST; gbc_label_8.gridx = 3; gbc_label_8.gridy = 0; hohAuthPanel.add(mylabel_8, gbc_label_8); myHohAuthPasswordTextbox = new JTextField(); myHohAuthPasswordTextbox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setHohAuthenticationPassword(myHohAuthPasswordTextbox.getText()); } }); myHohAuthPasswordTextbox.setPreferredSize(new Dimension(100, 28)); myHohAuthPasswordTextbox.setMaximumSize(new Dimension(200, 2147483647)); myHohAuthPasswordTextbox.setMinimumSize(new Dimension(100, 28)); GridBagConstraints gbc_HohSignatureKeystoreTextbox = new GridBagConstraints(); gbc_HohSignatureKeystoreTextbox.insets = new Insets(0, 0, 0, 5); gbc_HohSignatureKeystoreTextbox.fill = GridBagConstraints.HORIZONTAL; gbc_HohSignatureKeystoreTextbox.gridx = 4; gbc_HohSignatureKeystoreTextbox.gridy = 0; hohAuthPanel.add(myHohAuthPasswordTextbox, gbc_HohSignatureKeystoreTextbox); myHohAuthPasswordTextbox.setColumns(10); mylabel_2 = new JLabel("Security Profile"); mylabel_2.setVerticalTextPosition(SwingConstants.TOP); mylabel_2.setVerticalAlignment(SwingConstants.TOP); GridBagConstraints gbc_label_2 = new GridBagConstraints(); gbc_label_2.insets = new Insets(0, 0, 5, 5); gbc_label_2.gridx = 0; gbc_label_2.gridy = 1; myHoHCard.add(mylabel_2, gbc_label_2); // securityProfilePanel = new JPanel(); GridBagConstraints gbc_securityProfilePanel = new GridBagConstraints(); gbc_securityProfilePanel.insets = new Insets(0, 0, 5, 0); gbc_securityProfilePanel.fill = GridBagConstraints.BOTH; gbc_securityProfilePanel.gridx = 1; gbc_securityProfilePanel.gridy = 1; // myHoHCard.add(securityProfilePanel, gbc_securityProfilePanel); // securityProfilePanel.setLayout(new BorderLayout(0, 0)); tlsKeystorePanel = new JPanel(); tlsKeystorePanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); // securityProfilePanel.add(tlsKeystorePanel, BorderLayout.CENTER); myHoHCard.add(tlsKeystorePanel, gbc_securityProfilePanel); GridBagLayout gbl_tlsKeystorePanel = new GridBagLayout(); gbl_tlsKeystorePanel.columnWidths = new int[] { 0, 58, 107, 77, 0, 0 }; gbl_tlsKeystorePanel.rowHeights = new int[] { 28, 16, 0, 0 }; gbl_tlsKeystorePanel.columnWeights = new double[] { 0.0, 0.0, 1.0, 1.0, 0.0, Double.MIN_VALUE }; gbl_tlsKeystorePanel.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; tlsKeystorePanel.setLayout(gbl_tlsKeystorePanel); myHohTlsCheckbox = new JCheckBox("TLS Enabled"); GridBagConstraints gbc_HohTlsCheckbox = new GridBagConstraints(); gbc_HohTlsCheckbox.gridheight = 2; gbc_HohTlsCheckbox.insets = new Insets(0, 0, 5, 5); gbc_HohTlsCheckbox.gridx = 0; gbc_HohTlsCheckbox.gridy = 0; tlsKeystorePanel.add(myHohTlsCheckbox, gbc_HohTlsCheckbox); myHohTlsCheckbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { myConnection.setTls(myHohTlsCheckbox.isSelected()); myTlsCheckbox.setSelected(myHohTlsCheckbox.isSelected()); updatePortsUi(); } }); mylabel_3 = new JLabel("Keystore:"); GridBagConstraints gbc_label_3 = new GridBagConstraints(); gbc_label_3.anchor = GridBagConstraints.WEST; gbc_label_3.fill = GridBagConstraints.VERTICAL; gbc_label_3.insets = new Insets(0, 0, 5, 5); gbc_label_3.gridx = 1; gbc_label_3.gridy = 0; tlsKeystorePanel.add(mylabel_3, gbc_label_3); myHohSecurityKeystoreTextbox = new JTextField(); GridBagConstraints gbc_HohKeystoreTextbox = new GridBagConstraints(); gbc_HohKeystoreTextbox.gridwidth = 2; gbc_HohKeystoreTextbox.anchor = GridBagConstraints.NORTH; gbc_HohKeystoreTextbox.fill = GridBagConstraints.HORIZONTAL; gbc_HohKeystoreTextbox.insets = new Insets(0, 0, 5, 5); gbc_HohKeystoreTextbox.gridx = 2; gbc_HohKeystoreTextbox.gridy = 0; tlsKeystorePanel.add(myHohSecurityKeystoreTextbox, gbc_HohKeystoreTextbox); myHohSecurityKeystoreTextbox.setColumns(10); myHohSecurityKeystoreTextbox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { String text = myHohSecurityKeystoreTextbox.getText(); myHohSecurityKeyPwTextBox.setEnabled(isNotBlank(text)); myConnection.setTlsKeystoreLocation(text); } }); myHohSecurityKeystoreChooseBtn = new JButton("Choose"); myHohSecurityKeystoreChooseBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Hl7ConnectionPanel.chooseKeystore(Hl7ConnectionPanel.this, myHohSecurityKeystoreTextbox); } }); myHohSecurityKeystoreChooseBtn.setIcon( new ImageIcon(Hl7ConnectionPanel.class.getResource("/ca/uhn/hl7v2/testpanel/images/open.png"))); GridBagConstraints gbc_HohSignatureKeystoreChooseButton = new GridBagConstraints(); gbc_HohSignatureKeystoreChooseButton.insets = new Insets(0, 0, 5, 0); gbc_HohSignatureKeystoreChooseButton.gridx = 4; gbc_HohSignatureKeystoreChooseButton.gridy = 0; tlsKeystorePanel.add(myHohSecurityKeystoreChooseBtn, gbc_HohSignatureKeystoreChooseButton); mylabel_4 = new JLabel("Store Pass:"); GridBagConstraints gbc_label_4 = new GridBagConstraints(); gbc_label_4.insets = new Insets(0, 0, 0, 5); gbc_label_4.anchor = GridBagConstraints.EAST; gbc_label_4.gridx = 1; gbc_label_4.gridy = 1; tlsKeystorePanel.add(mylabel_4, gbc_label_4); myHohSecurityKeyPwTextBox = new JTextField(); myHohSecurityKeyPwTextBox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setTlsKeystorePassword(myHohSecurityKeyPwTextBox.getText()); } }); GridBagConstraints gbc_HohSecurityKeyPwTextBox = new GridBagConstraints(); gbc_HohSecurityKeyPwTextBox.insets = new Insets(0, 0, 0, 5); gbc_HohSecurityKeyPwTextBox.fill = GridBagConstraints.HORIZONTAL; gbc_HohSecurityKeyPwTextBox.gridx = 2; gbc_HohSecurityKeyPwTextBox.gridy = 1; tlsKeystorePanel.add(myHohSecurityKeyPwTextBox, gbc_HohSecurityKeyPwTextBox); myHohSecurityKeyPwTextBox.setColumns(10); myHohSecurityProfileKeystoreStatus = new JLabel("Value goes here"); myHohSecurityProfileKeystoreStatus.setHorizontalAlignment(SwingConstants.CENTER); GridBagConstraints gbc_HohSecurityProfileKeystoreStatus = new GridBagConstraints(); gbc_HohSecurityProfileKeystoreStatus.anchor = GridBagConstraints.NORTH; gbc_HohSecurityProfileKeystoreStatus.fill = GridBagConstraints.HORIZONTAL; gbc_HohSecurityProfileKeystoreStatus.gridwidth = 5; gbc_HohSecurityProfileKeystoreStatus.gridx = 0; gbc_HohSecurityProfileKeystoreStatus.gridy = 2; tlsKeystorePanel.add(myHohSecurityProfileKeystoreStatus, gbc_HohSecurityProfileKeystoreStatus); mylabel_9 = new JLabel("Signature Profile"); GridBagConstraints gbc_label_9 = new GridBagConstraints(); gbc_label_9.insets = new Insets(0, 0, 0, 5); gbc_label_9.gridx = 0; gbc_label_9.gridy = 2; myHoHCard.add(mylabel_9, gbc_label_9); mypanel_3 = new JPanel(); mypanel_3.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null)); GridBagConstraints gbc_panel_3 = new GridBagConstraints(); gbc_panel_3.fill = GridBagConstraints.BOTH; gbc_panel_3.gridx = 1; gbc_panel_3.gridy = 2; myHoHCard.add(mypanel_3, gbc_panel_3); GridBagLayout gbl_panel_3 = new GridBagLayout(); gbl_panel_3.columnWidths = new int[] { 0, 0, 0, 0, 0, 0, 50, 0, 0 }; gbl_panel_3.rowHeights = new int[] { 0, 0, 0, 0 }; gbl_panel_3.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_panel_3.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE }; mypanel_3.setLayout(gbl_panel_3); myHohSignatureEnabled = new JCheckBox("Enabled"); myHohSignatureEnabled.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent theE) { myConnection.setHohSignatureEnabled(myHohSignatureEnabled.isSelected()); } }); GridBagConstraints gbc_HohSignatureEnabled = new GridBagConstraints(); gbc_HohSignatureEnabled.insets = new Insets(0, 0, 5, 5); gbc_HohSignatureEnabled.gridx = 0; gbc_HohSignatureEnabled.gridy = 0; mypanel_3.add(myHohSignatureEnabled, gbc_HohSignatureEnabled); mylabel_10 = new JLabel("Keystore:"); GridBagConstraints gbc_label_10 = new GridBagConstraints(); gbc_label_10.anchor = GridBagConstraints.EAST; gbc_label_10.insets = new Insets(0, 0, 5, 5); gbc_label_10.gridx = 1; gbc_label_10.gridy = 0; mypanel_3.add(mylabel_10, gbc_label_10); myHohSignatureKeystoreTextbox = new JTextField(); myHohSignatureKeystoreTextbox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setHohSignatureKeystore(myHohSignatureKeystoreTextbox.getText()); } }); GridBagConstraints gbc_HohSignatureKeystoreTextbox2 = new GridBagConstraints(); gbc_HohSignatureKeystoreTextbox2.gridwidth = 5; gbc_HohSignatureKeystoreTextbox2.insets = new Insets(0, 0, 5, 5); gbc_HohSignatureKeystoreTextbox2.fill = GridBagConstraints.HORIZONTAL; gbc_HohSignatureKeystoreTextbox2.gridx = 2; gbc_HohSignatureKeystoreTextbox2.gridy = 0; mypanel_3.add(myHohSignatureKeystoreTextbox, gbc_HohSignatureKeystoreTextbox2); myHohSignatureKeystoreTextbox.setColumns(10); myHohSignatureKeystoreChooseButton = new JButton("Choose"); myHohSignatureKeystoreChooseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Hl7ConnectionPanel.chooseKeystore(Hl7ConnectionPanel.this, myHohSignatureKeystoreTextbox); } }); myHohSignatureKeystoreChooseButton.setIcon( new ImageIcon(Hl7ConnectionPanel.class.getResource("/ca/uhn/hl7v2/testpanel/images/open.png"))); GridBagConstraints gbc_HohSignatureKeystoreChooseButton2 = new GridBagConstraints(); gbc_HohSignatureKeystoreChooseButton2.insets = new Insets(0, 0, 5, 0); gbc_HohSignatureKeystoreChooseButton2.gridx = 7; gbc_HohSignatureKeystoreChooseButton2.gridy = 0; mypanel_3.add(myHohSignatureKeystoreChooseButton, gbc_HohSignatureKeystoreChooseButton2); mylabel_11 = new JLabel("Store Pass:"); GridBagConstraints gbc_label_11 = new GridBagConstraints(); gbc_label_11.anchor = GridBagConstraints.EAST; gbc_label_11.insets = new Insets(0, 0, 5, 5); gbc_label_11.gridx = 1; gbc_label_11.gridy = 1; mypanel_3.add(mylabel_11, gbc_label_11); myHohSignatureKeystorePasswordTextbox = new JTextField(); myHohSignatureKeystorePasswordTextbox.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setHohSignatureKeystorePassword(myHohSignatureKeystorePasswordTextbox.getText()); } }); myHohSignatureKeystorePasswordTextbox.setPreferredSize(new Dimension(100, 28)); myHohSignatureKeystorePasswordTextbox.setMinimumSize(new Dimension(100, 28)); myHohSignatureKeystorePasswordTextbox.setMaximumSize(new Dimension(200, 2147483647)); GridBagConstraints gbc_HohSignatureKeystorePasswordTextbox = new GridBagConstraints(); gbc_HohSignatureKeystorePasswordTextbox.insets = new Insets(0, 0, 5, 5); gbc_HohSignatureKeystorePasswordTextbox.fill = GridBagConstraints.HORIZONTAL; gbc_HohSignatureKeystorePasswordTextbox.gridx = 2; gbc_HohSignatureKeystorePasswordTextbox.gridy = 1; mypanel_3.add(myHohSignatureKeystorePasswordTextbox, gbc_HohSignatureKeystorePasswordTextbox); myHohSignatureKeystorePasswordTextbox.setColumns(10); mylabel_12 = new JLabel("Key:"); GridBagConstraints gbc_label_12 = new GridBagConstraints(); gbc_label_12.anchor = GridBagConstraints.EAST; gbc_label_12.insets = new Insets(0, 0, 5, 5); gbc_label_12.gridx = 3; gbc_label_12.gridy = 1; mypanel_3.add(mylabel_12, gbc_label_12); myHohSignatureKeyAliasCombo = new JComboBox(); myHohSignatureKeyAliasCombo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent theE) { if (myUpdatingHohSignatureKeyAliasCombo) { return; } String selection = (String) myHohSignatureKeyAliasCombo.getSelectedItem(); if (selection == HOH_SIGNATURE_KEY_USE_ANY_AVAILABLE) { myConnection.setHohSignatureKey(null); } else { myConnection.setHohSignatureKey(selection.replaceAll(" .*", "")); } } }); GridBagConstraints gbc_HohSignatureKeyAliasCombo = new GridBagConstraints(); gbc_HohSignatureKeyAliasCombo.insets = new Insets(0, 0, 5, 5); gbc_HohSignatureKeyAliasCombo.fill = GridBagConstraints.HORIZONTAL; gbc_HohSignatureKeyAliasCombo.gridx = 4; gbc_HohSignatureKeyAliasCombo.gridy = 1; mypanel_3.add(myHohSignatureKeyAliasCombo, gbc_HohSignatureKeyAliasCombo); mylabel_13 = new JLabel("Key Pass:"); GridBagConstraints gbc_label_13 = new GridBagConstraints(); gbc_label_13.anchor = GridBagConstraints.EAST; gbc_label_13.insets = new Insets(0, 0, 5, 5); gbc_label_13.gridx = 5; gbc_label_13.gridy = 1; mypanel_3.add(mylabel_13, gbc_label_13); myHohSignatureKeyPass = new JTextField(); myHohSignatureKeyPass.getDocument().addDocumentListener(new SimpleDocumentListener() { @Override public void update(DocumentEvent theE) { myConnection.setHohSignatureKeyPassword(myHohSignatureKeyPass.getText()); } }); myHohSignatureKeyPass.setMinimumSize(new Dimension(50, 28)); myHohSignatureKeyPass.setMaximumSize(new Dimension(50, 2147483647)); myHohSignatureKeyPass.setPreferredSize(new Dimension(50, 28)); GridBagConstraints gbc_HohSignatureKeyPass = new GridBagConstraints(); gbc_HohSignatureKeyPass.gridwidth = 2; gbc_HohSignatureKeyPass.insets = new Insets(0, 0, 5, 0); gbc_HohSignatureKeyPass.fill = GridBagConstraints.HORIZONTAL; gbc_HohSignatureKeyPass.gridx = 6; gbc_HohSignatureKeyPass.gridy = 1; mypanel_3.add(myHohSignatureKeyPass, gbc_HohSignatureKeyPass); myHohSignatureKeyPass.setColumns(10); myHohSignatureStatusLabel = new JLabel("New label"); myHohSignatureStatusLabel.setHorizontalAlignment(SwingConstants.CENTER); GridBagConstraints gbc_HohSignatureStatusLabel = new GridBagConstraints(); gbc_HohSignatureStatusLabel.fill = GridBagConstraints.HORIZONTAL; gbc_HohSignatureStatusLabel.gridwidth = 8; gbc_HohSignatureStatusLabel.insets = new Insets(0, 0, 0, 5); gbc_HohSignatureStatusLabel.gridx = 0; gbc_HohSignatureStatusLabel.gridy = 2; mypanel_3.add(myHohSignatureStatusLabel, gbc_HohSignatureStatusLabel); init(); } public void destroy() { myConnection.removePropertyChangeListener(OutboundConnection.STATUS_PROPERTY, myStatusPropertyChangeListener); myConnection.removePropertyChangeListener(OutboundConnection.STATUS_LINE_PROPERTY, myStatusLinePropertyChangeListener); myConnection.removePropertyChangeListener(AbstractConnection.TLS_KEYSTORE_STATUS, myHohSecurityProfileKeystoreStatusListener); myConnection.removePropertyChangeListener(AbstractConnection.HOH_SIGNATURE_KEYSTORE_STATUS, myHohSignatureStatusListener); myConnection.removePropertyChangeListener(AbstractConnection.HOH_SIGNER_AVAILABLE_ALIASES_PROPERTY, myHohSignerAvailableAliasesListener); } private void init() { List<String> charSets = new ArrayList<String>(Charset.availableCharsets().keySet()); Collections.sort(charSets); ComboBoxModel charsetModel = new DefaultComboBoxModel(charSets.toArray(new String[0])); myCharsetCombo.setModel(charsetModel); } private boolean isChangesAllowed() { return myConnection.getStatus() == StatusEnum.STOPPED || myConnection.getStatus() == StatusEnum.FAILED; } private String portToString(int thePort) { if (thePort > 0) { return Integer.toString(thePort); } else { return ""; } } private void updateHohSignatureKeyCombo() { myUpdatingHohSignatureKeyAliasCombo = true; try { myHohSignatureKeyAliasCombo.removeAllItems(); List<String> aliases = myConnection.getHohSignatureAvailableAliases(); for (String next : aliases) { myHohSignatureKeyAliasCombo.addItem(next); if (next.equals(myConnection.getHohSignatureKey())) { myHohSignatureKeyAliasCombo.setSelectedIndex(myHohSignatureKeyAliasCombo.getItemCount() - 1); } } } finally { myUpdatingHohSignatureKeyAliasCombo = false; } } public void setConnection(AbstractConnection theConnection) { myConnection = theConnection; myHohSecurityKeyPwTextBox.setText(myConnection.getTlsKeystorePassword()); myHohSecurityKeystoreTextbox.setText(myConnection.getTlsKeystoreLocation()); myHohSecurityProfileKeystoreStatus.setText(""); myHohSignatureEnabled.setSelected(myConnection.isHohSignatureEnabled()); myHohSignatureKeystoreTextbox.setText(myConnection.getHohSignatureKeystore()); myHohSignatureKeystorePasswordTextbox.setText(myConnection.getHohSignatureKeystorePassword()); myHohSignatureKeyPass.setText(myConnection.getHohSignatureKeyPassword()); updateHohSignatureKeyCombo(); myCharsetCombo.setSelectedItem(theConnection.getCharSet()); myTlsCheckbox.setSelected(theConnection.isTls()); myHohTlsCheckbox.setSelected(theConnection.isTls()); myCaptureByteStreamCheckbox.setSelected(theConnection.isCaptureBytes()); myHohAuthEnabledCheckbox.setSelected(myConnection.isHohAuthenticationEnabled()); myHohAuthUsernameTextbox.setText(myConnection.getHohAuthenticationUsername()); myHohAuthPasswordTextbox.setText(myConnection.getHohAuthenticationPassword()); updateCharset(); Hl7V2EncodingTypeEnum encoding = theConnection.getEncoding(); myEr7Radio.setSelected(encoding == Hl7V2EncodingTypeEnum.ER_7); myXmlRadio.setSelected(encoding == Hl7V2EncodingTypeEnum.XML); myHostBox.setText(theConnection.getHost()); updatePortsUi(); myStatusPropertyChangeListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent theEvt) { updateStatus(); } }; myConnection.addPropertyChangeListener(OutboundConnection.STATUS_PROPERTY, myStatusPropertyChangeListener); myStatusLinePropertyChangeListener = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent theEvt) { updateStatus(); } }; myConnection.addPropertyChangeListener(OutboundConnection.STATUS_LINE_PROPERTY, myStatusLinePropertyChangeListener); myHohSecurityProfileKeystoreStatusListener = new KeystoreStatusListener(myHohSecurityProfileKeystoreStatus); myConnection.addPropertyChangeListener(AbstractConnection.TLS_KEYSTORE_STATUS, myHohSecurityProfileKeystoreStatusListener); myHohSignatureStatusListener = new KeystoreStatusListener(myHohSignatureStatusLabel); myConnection.addPropertyChangeListener(AbstractConnection.HOH_SIGNATURE_KEYSTORE_STATUS, myHohSignatureStatusListener); myHohSignerAvailableAliasesListener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent theEvt) { updateHohSignatureKeyCombo(); } }; myConnection.addPropertyChangeListener(AbstractConnection.HOH_SIGNER_AVAILABLE_ALIASES_PROPERTY, myHohSignerAvailableAliasesListener); updateStatus(); } private void updateCharset() { if (myConnection.isDetectCharSetInMessage()) { myCharsetDetectRadio.setSelected(true); myCharsetSelectRadio.setSelected(false); myCharsetCombo.setEnabled(false); } else { myCharsetDetectRadio.setSelected(false); myCharsetSelectRadio.setSelected(true); myCharsetCombo.setEnabled(true); } } private void updateCharsetModel() { if (myCharsetDetectRadio.isSelected()) { myConnection.setDetectCharSetInMessage(true); } else { myConnection.setDetectCharSetInMessage(false); String charSet = (String) myCharsetCombo.getSelectedItem(); myConnection.setCharSet(charSet); Prefs.getInstance().setMostRecentConnectionCharset(charSet); } } private void updateEncodingModel() { if (myEr7Radio.isSelected()) { myConnection.setEncoding(Hl7V2EncodingTypeEnum.ER_7); } else { myConnection.setEncoding(Hl7V2EncodingTypeEnum.XML); } } private void updatePortsModel() { if (mySinglePortRadio.isSelected()) { myConnection.setTransport(TransportStyleEnum.SINGLE_PORT_MLLP); } else if (myDualPortRadio.isSelected()) { myConnection.setTransport(TransportStyleEnum.DUAL_PORT_MLLP); } else { myConnection.setTransport(TransportStyleEnum.HL7_OVER_HTTP); } } private void updatePortsUi() { boolean changesAllowed = isChangesAllowed(); CardLayout cl = (CardLayout) myInterfaceTypeCardPanel.getLayout(); switch (myConnection.getTransport()) { case DUAL_PORT_MLLP: { mySinglePortRadio.setSelected(false); myDualPortRadio.setSelected(true); myHl7OverHttpRadioButton.setSelected(false); myDualIncomingTextBox.setText(portToString(myConnection.getIncomingOrSinglePort())); myDualOutgoingTextBox.setText(portToString(myConnection.getOutgoingPort())); mySinglePortTextBox.setEnabled(false); myDualIncomingTextBox.setEnabled(true && changesAllowed); myDualOutgoingTextBox.setEnabled(true && changesAllowed); myHoHUrlTextField.setEnabled(false); mySinglePortTextBox.repaint(); myDualIncomingTextBox.repaint(); myDualOutgoingTextBox.repaint(); cl.show(myInterfaceTypeCardPanel, Hl7ConnectionPanel.IFACE_TYPE_CARD_MLLP); break; } case SINGLE_PORT_MLLP: { mySinglePortRadio.setSelected(true); myDualPortRadio.setSelected(false); myHl7OverHttpRadioButton.setSelected(false); mySinglePortTextBox.setText(portToString(myConnection.getIncomingOrSinglePort())); mySinglePortTextBox.setEnabled(true && changesAllowed); myDualIncomingTextBox.setEnabled(false); myDualOutgoingTextBox.setEnabled(false); myHoHUrlTextField.setEnabled(false); mySinglePortTextBox.repaint(); myDualIncomingTextBox.repaint(); myDualOutgoingTextBox.repaint(); cl.show(myInterfaceTypeCardPanel, Hl7ConnectionPanel.IFACE_TYPE_CARD_MLLP); break; } case HL7_OVER_HTTP: { mySinglePortTextBox.setEnabled(false); myDualIncomingTextBox.setEnabled(false); myDualOutgoingTextBox.setEnabled(false); mySinglePortRadio.setSelected(false); myDualPortRadio.setSelected(false); myHl7OverHttpRadioButton.setSelected(true); cl.show(myInterfaceTypeCardPanel, Hl7ConnectionPanel.IFACE_TYPE_CARD_HOH); StringBuilder urlBuilder = new StringBuilder(); urlBuilder.append((myConnection.isTls() ? "https://" : "http://")); urlBuilder.append(StringUtils.defaultString(myConnection.getHost(), "localhost")); urlBuilder.append(":").append(myConnection.getIncomingOrSinglePort()); urlBuilder.append(StringUtils.defaultString(myConnection.getHttpUriPath(), "/")); String url = urlBuilder.toString(); if (!myHohUrlTextFieldUpdating) { myHohUrlTextFieldUpdating = true; myHoHUrlTextField.setText(url); myHohUrlTextFieldUpdating = false; } myHoHUrlTextField.setEnabled(true && changesAllowed); break; } } } private void updateStatus() { boolean changesAllowed = isChangesAllowed(); myHostBox.setEnabled(changesAllowed); updatePortsUi(); mySinglePortRadio.setEnabled(changesAllowed); myDualPortRadio.setEnabled(changesAllowed); myHl7OverHttpRadioButton.setEnabled(changesAllowed); myCharsetCombo.setEnabled(changesAllowed); myCharsetDetectRadio.setEnabled(changesAllowed); myCharsetSelectRadio.setEnabled(changesAllowed); myEr7Radio.setEnabled(changesAllowed); myTlsCheckbox.setEnabled(changesAllowed); myHohTlsCheckbox.setEnabled(changesAllowed); myXmlRadio.setEnabled(changesAllowed); myCaptureByteStreamCheckbox.setEnabled(changesAllowed); // TODO: update hoh components enabled status } private static void chooseKeystore(Component theParentController, JTextField theTextbox) { String directory = Prefs.getInstance().getInterfaceHohSecurityKeystoreDirectory(); directory = StringUtils.defaultString(directory, "."); JFileChooser chooser = new JFileChooser(directory); chooser.setDialogType(JFileChooser.OPEN_DIALOG); chooser.setDialogTitle("Select a Java Keystore"); int result = chooser.showOpenDialog(theParentController); if (result == JFileChooser.APPROVE_OPTION) { Prefs.getInstance().setInterfaceHohSecurityKeystoreDirectory(chooser.getSelectedFile().getParent()); theTextbox.setText(chooser.getSelectedFile().getAbsolutePath()); } } private final class KeystoreStatusListener implements PropertyChangeListener { private final JLabel myLabel; public KeystoreStatusListener(JLabel theLabel) { myLabel = theLabel; clear(); } private void clear() { myLabel.setText(""); myLabel.setIcon(null); } @Override public void propertyChange(PropertyChangeEvent theEvt) { JLabel label = myLabel; WorkingStatusBean newValue = (WorkingStatusBean) theEvt.getNewValue(); if (newValue == null || isBlank(newValue.getMessage())) { clear(); } else { label.setText("<html>" + newValue.getMessage() + "</html>"); switch (newValue.getStatus()) { case ERROR: myLabel.setIcon(ICON_INFO_WARNING); break; case WORKING: myLabel.setIcon(ICON_INFO_WORKING); break; case OK: myLabel.setIcon(ICON_INFO_OK); break; } } } } }