/**
* Copyright 2014 Comcast Cable Communications Management, LLC
*
* This file is part of CATS.
*
* CATS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CATS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CATS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.comcast.cats;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;
import javax.swing.text.Document;
import com.comcast.cats.SnmpManager;
import com.comcast.cats.info.SetValueTypes;
import com.comcast.cats.info.SnmpServiceConstants;
/**
* The JPanel for Snmp operations.
* @author TATA
*/
public class SnmpForm extends JPanel
{
/**
* Generated Serial version ID.
*/
private static final long serialVersionUID = 6916730305457224422L;
// Version strings set in the ComboBox.
static final String V1 = "V1";
static final String V2 = "V2";
static final String V3 = "V3";
// The action names for get, set and clear actions defined in SnmpFormController class.
static final String GET_ACTION_NAME = "getAction";
static final String SET_ACTION_NAME = "setAction";
static final String CLEAR_ACTION_NAME = "clearAction";
// The buttons for 'Get', 'Set' and 'Clear' operations.
JButton getButton;
JButton setButton;
JButton clearButton;
// The Documents for the TextFields, for adding the DocumentListener.
Document setValueDoc;
Document targetIpDoc;
Document oidDoc;
Document userNameDoc;
Document authPassWordDoc;
Document privacyPassWordDoc;
// Layout used for showing V1, V2 or V3 specific fields.
JPanel optionContainer;
CardLayout cardLayout;
// The textFields for entering inputs.
private JTextField targetIpTextFld;
private JTextField oidTextFld;
private JTextField portTextFld;
private JTextField userNameTextFld;
private JTextField setValueTextFld;
private JTextField wsdlLocation;
private JTextArea resultTextFld;
private JPasswordField communityTextFldV1;
private JPasswordField communityTextFldV2;
private JPasswordField authPassTextFld;
private JPasswordField privPassTextFld;
// ComboBoxes for selecting the Snmp version and set value type.
private JComboBox versionCombo;
private JComboBox setValueTypeCombo;
/**
* The default constructor which makes and add all the required fields in to
* the JPanel.
*/
public SnmpForm()
{
// Creating the SnmpFormController instance.
final SnmpFormController controller = new SnmpFormController(this);
final GridBagConstraints labelConstraints = new GridBagConstraints();
labelConstraints.fill = GridBagConstraints.NONE;
labelConstraints.anchor = GridBagConstraints.WEST;
labelConstraints.gridwidth = 1;
labelConstraints.weightx = 0.2;
labelConstraints.weighty = 0.0;
labelConstraints.insets = new Insets(1, 1, 1, 1);
final GridBagConstraints textFieldConstraints = new GridBagConstraints();
textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
textFieldConstraints.gridwidth = GridBagConstraints.REMAINDER;
textFieldConstraints.weightx = 1.0;
textFieldConstraints.weighty = 0.0;
textFieldConstraints.insets = new Insets(1, 1, 1, 1);
final int inset = 20;
final Dimension formPrefSize = new Dimension(462, 466);
setLayout(new GridBagLayout());
setBorder(BorderFactory.createEmptyBorder(inset, inset, inset, inset));
setPreferredSize(formPrefSize);
/*
* The panel for version selection.
*/
final JPanel versionSelectPanel = new JPanel();
final TitledBorder title = BorderFactory.createTitledBorder("Select Version");
title.setTitleJustification(TitledBorder.CENTER);
versionSelectPanel.setBorder(BorderFactory.createTitledBorder(title));
final String[] versionStrings = {V1, V2, V3};
versionCombo = new JComboBox(versionStrings);
final int prefWidth = 50;
final int prefHeight = 20;
versionCombo.setPreferredSize(new Dimension(prefWidth, prefHeight));
versionCombo.addItemListener(controller);
versionSelectPanel.add(versionCombo);
//**** end *******//
/*
* Panel holding input forms for details common to v1, v2 and v3
*/
final JPanel commonFormPanel = new JPanel();
commonFormPanel.setLayout(new GridBagLayout());
final TitledBorder commonFormBorder = BorderFactory.createTitledBorder("Input Parameters");
commonFormBorder.setTitleJustification(TitledBorder.CENTER);
commonFormPanel.setBorder(BorderFactory.createTitledBorder(commonFormBorder));
final JLabel urlLabel = new JLabel("WSDL Location:", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 0;
commonFormPanel.add(urlLabel, labelConstraints);
wsdlLocation = new JTextField();
wsdlLocation.setText(SnmpServiceConstants.SNMP_SERVICE_WSDL_LOCATION);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 0;
commonFormPanel.add(wsdlLocation, textFieldConstraints);
final JLabel ipLabel = new JLabel("Target IP Address:");
labelConstraints.gridx = 0;
labelConstraints.gridy = 1;
commonFormPanel.add(ipLabel, labelConstraints);
targetIpTextFld = new JTextField();
targetIpDoc = targetIpTextFld.getDocument();
targetIpDoc.addDocumentListener(controller);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 1;
commonFormPanel.add(targetIpTextFld, textFieldConstraints);
final JLabel oidLabel = new JLabel("OID:");
labelConstraints.gridx = 0;
labelConstraints.gridy = 2;
commonFormPanel.add(oidLabel, labelConstraints);
oidTextFld = new JTextField();
oidDoc = oidTextFld.getDocument();
oidDoc.addDocumentListener(controller);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 2;
commonFormPanel.add(oidTextFld, textFieldConstraints);
final JLabel portLabel = new JLabel("Port Number:");
labelConstraints.gridx = 0;
labelConstraints.gridy = 3;
commonFormPanel.add(portLabel, labelConstraints);
portTextFld = new JTextField(Integer.toString(SnmpManager.DEFAULT_PORT_NUMBER));
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 3;
commonFormPanel.add(portTextFld, textFieldConstraints);
final JLabel setLabel = new JLabel("SET Value:", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 4;
commonFormPanel.add(setLabel, labelConstraints);
setValueTextFld = new JTextField();
setValueDoc = setValueTextFld.getDocument();
setValueDoc.addDocumentListener(controller);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 4;
commonFormPanel.add(setValueTextFld, textFieldConstraints);
final JLabel setTypeLabel = new JLabel("SET Value Type:", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 5;
commonFormPanel.add(setTypeLabel, labelConstraints);
setValueTypeCombo = new JComboBox(SetValueTypes.values());
setValueTypeCombo.setSelectedItem(SetValueTypes.STRING);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 5;
commonFormPanel.add(setValueTypeCombo, textFieldConstraints);
//**** end *******//
/*
* Panel holding input forms for specific information of V1, V2 and V3
* Using card layout for simplified optioning
*/
optionContainer = new JPanel();
cardLayout = new CardLayout();
optionContainer.setLayout(cardLayout);
final TitledBorder optionBorder = BorderFactory.createTitledBorder("Authorization");
optionBorder.setTitleJustification(TitledBorder.LEADING);
optionContainer.setBorder(BorderFactory.createTitledBorder(optionBorder));
final JPanel v1Card = new JPanel();
v1Card.setLayout(new GridBagLayout());
final JLabel communityLabelv1 = new JLabel("Community", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 0;
v1Card.add(communityLabelv1, labelConstraints);
communityTextFldV1 = new JPasswordField(SnmpManager.DEFAULT_COMMUNITY_NAME);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 0;
v1Card.add(communityTextFldV1, textFieldConstraints);
final JPanel v2Card = new JPanel();
v2Card.setLayout(new GridBagLayout());
final JLabel communityLabelv2 = new JLabel("Community", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 0;
v2Card.add(communityLabelv2, labelConstraints);
communityTextFldV2 = new JPasswordField(SnmpManager.DEFAULT_COMMUNITY_NAME);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 0;
v2Card.add(communityTextFldV2, textFieldConstraints);
final JPanel v3Card = new JPanel();
v3Card.setLayout(new GridBagLayout());
final JLabel userNameLabel = new JLabel("User Name", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 0;
v3Card.add(userNameLabel, labelConstraints);
userNameTextFld = new JTextField();
userNameDoc = userNameTextFld.getDocument();
userNameDoc.addDocumentListener(controller);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 0;
v3Card.add(userNameTextFld, textFieldConstraints);
final JLabel authPassWordLabel = new JLabel("Auth PassWord", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 1;
v3Card.add(authPassWordLabel, labelConstraints);
authPassTextFld = new JPasswordField();
authPassWordDoc = authPassTextFld.getDocument();
authPassWordDoc.addDocumentListener(controller);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 1;
v3Card.add(authPassTextFld, textFieldConstraints);
final JLabel privacyPassWordLabel = new JLabel("Privacy PassWord", SwingConstants.LEFT);
labelConstraints.gridx = 0;
labelConstraints.gridy = 2;
v3Card.add(privacyPassWordLabel, labelConstraints);
privPassTextFld = new JPasswordField();
privacyPassWordDoc = privPassTextFld.getDocument();
privacyPassWordDoc.addDocumentListener(controller);
textFieldConstraints.gridx = 1;
textFieldConstraints.gridy = 2;
v3Card.add(privPassTextFld, textFieldConstraints);
optionContainer.add(v1Card , V1);
optionContainer.add(v2Card , V2);
optionContainer.add(v3Card , V3);
//**** end *******//
/*
* Panel holding Buttons
*/
int rows = 1;
int cols = 3;
int hgap = 5;
int vgap = 5;
final Dimension buttonPanelPrefSize = new Dimension(150, 55);
final JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(rows, cols, hgap, vgap));
buttonPanel.setBorder(BorderFactory.createTitledBorder("Action"));
buttonPanel.setPreferredSize(buttonPanelPrefSize);
getButton = new JButton();
getButton.setAction(controller.getActionMap().get(GET_ACTION_NAME));
getButton.setEnabled(false);
getButton.setText("Get");
setButton = new JButton();
setButton.setAction(controller.getActionMap().get(SET_ACTION_NAME));
setButton.setEnabled(false);
setButton.setText("Set");
clearButton = new JButton();
clearButton.setAction(controller.getActionMap().get(CLEAR_ACTION_NAME));
clearButton.setText("Clear");
buttonPanel.add(getButton);
buttonPanel.add(setButton);
buttonPanel.add(clearButton);
//**** end *******//
/*
* Shows the SNMP result from the SNMP Devices
*/
rows = 1;
cols = 2;
hgap = 5;
vgap = 5;
final JPanel resultPanel = new JPanel(new GridLayout(rows, cols, hgap, vgap));
resultTextFld = new JTextArea();
resultTextFld.setEditable(false);
resultPanel.add(resultTextFld);
final JScrollPane scrollPane = new JScrollPane(resultTextFld,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
resultPanel.add(scrollPane, BorderLayout.CENTER);
//**** end *******//
final Dimension versionPanelPrefSize = new Dimension(115, 115);
final Dimension panelMaximumSize = new Dimension(475, 100);
final GridBagConstraints formPanelConstraints = new GridBagConstraints();
formPanelConstraints.fill = GridBagConstraints.VERTICAL;
formPanelConstraints.gridx = 0;
formPanelConstraints.gridy = 0;
formPanelConstraints.weightx = 0.0;
versionSelectPanel.setPreferredSize(versionPanelPrefSize);
add(versionSelectPanel, formPanelConstraints);
formPanelConstraints.fill = GridBagConstraints.HORIZONTAL;
formPanelConstraints.weightx = 1;
formPanelConstraints.gridx = 1;
formPanelConstraints.gridy = 0;
add(commonFormPanel, formPanelConstraints);
formPanelConstraints.fill = GridBagConstraints.HORIZONTAL;
formPanelConstraints.weightx = 0.0;
formPanelConstraints.gridwidth = 3;
formPanelConstraints.gridx = 0;
formPanelConstraints.gridy = 1;
optionContainer.setMaximumSize(panelMaximumSize);
add(optionContainer, formPanelConstraints);
formPanelConstraints.fill = GridBagConstraints.HORIZONTAL;
formPanelConstraints.weighty = 0.1;
formPanelConstraints.gridwidth = 3;
formPanelConstraints.gridx = 0;
formPanelConstraints.gridy = 2;
buttonPanel.setMaximumSize(panelMaximumSize);
add(buttonPanel, formPanelConstraints);
formPanelConstraints.fill = GridBagConstraints.BOTH;
formPanelConstraints.weighty = 1.0;
formPanelConstraints.gridx = 0;
formPanelConstraints.gridwidth = 2;
formPanelConstraints.gridy = 3;
add(resultPanel, formPanelConstraints);
}
/**
* The getter method for Target IP TextField.
* @return TargetIP TextField
*/
public JTextField getTargetIpTextFld()
{
return targetIpTextFld;
}
/**
* The getter method for OID TextField.
* @return OID TextField
*/
public JTextField getOidTextFld()
{
return oidTextFld;
}
/**
* The getter method for port number TextField.
* @return PortNumber TextField
*/
public JTextField getPortTextFld()
{
return portTextFld;
}
/**
* The getter method for UserName TextField.
* @return UserName TextField
*/
public JTextField getUserNameTextFld()
{
return userNameTextFld;
}
/**
* The getter method for set value TextField.
* @return Set value TextField
*/
public JTextField getSetValueTextFld()
{
return setValueTextFld;
}
/**
* The getter method for WSDL location TextField.
* @return WSDL Location TextField
*/
public JTextField getWSDLLocationTextFld()
{
return wsdlLocation;
}
/**
* The getter method for Snmp get/set result TextField.
* @return Snmp get/set result TextField
*/
public JTextArea getResultTextFld()
{
return resultTextFld;
}
/**
* The getter method for V1 CommunityName TextField.
* @return V1 CommunityName TextField
*/
public JPasswordField getCommunityTextFldV1()
{
return communityTextFldV1;
}
/**
* The getter method for V2 CommunityName TextField.
* @return V2 CommunityName TextField
*/
public JPasswordField getCommunityTextFldV2()
{
return communityTextFldV2;
}
/**
* The getter method for Authentication Password TextField.
* @return Authentication Password TextField
*/
public JPasswordField getAuthPassTextFld()
{
return authPassTextFld;
}
/**
* The getter method for Privacy Password TextField.
* @return Privacy Password TextField
*/
public JPasswordField getPrivPassTextFld()
{
return privPassTextFld;
}
/**
* The getter method for Snmp Version ComboBox.
* @return Snmp Version ComboBox
*/
public JComboBox getVersionCombo()
{
return versionCombo;
}
/**
* The getter method for Set value type ComboBox.
* @return Set value type ComboBox
*/
public JComboBox getSetValueTypeCombo()
{
return setValueTypeCombo;
}
}