package ua.vntu.amon.gui;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import ua.vntu.amon.provider.zabbix.ZabbixClient;
public class LoginUI extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
ZabbixClient client = new ZabbixClient();
ArrayList<String> host = new ArrayList<>();
public LoginUI() {
setTitle("Login Form");
getContentPane().setLayout(new FlowLayout());
setSize(500, 250);
setResizable(false);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
/* GUI Panels */
JPanel informationPanel = new JPanel(new GridLayout(3, 2));
JPanel buttonPanel = new JPanel(new GridLayout(1, 2));
JPanel errorPanel = new JPanel(new GridLayout(1, 1));
/* Text Font */
Font errorFont = new Font("Verdana", Font.BOLD, 14);
Font simpleFont = new Font("Verdana", Font.PLAIN, 14);
/* Label */
final JLabel serverIpLabel = createLabel("Server Ip Address", "IP.jpg",
simpleFont, true);
final JLabel userNameLabel = createLabel("Login Name",
"login_name.png", simpleFont, true);
final JLabel passwordLabel = createLabel("Password", "password.png",
simpleFont, true);
final JLabel errorLabel = createLabel("", "network-error.png",
errorFont, false);
errorLabel.setForeground(Color.RED);
/* TextField */
final JTextField userNameTextField = new JTextField(20);
userNameTextField.setText("admin");
userNameTextField.setToolTipText("Enter your register user name");
final JPasswordField passwordField = new JPasswordField(20);
passwordField.setText("zabbix");
passwordField.setToolTipText("Enter your password ");
final JTextField serverIpTextField = new JTextField();
serverIpTextField.setText("http://192.168.56.101");
serverIpTextField
.setToolTipText("Enter IP address of Zabbix server, such as 'http://192.168.56.101/api_jsonrpc.php' ");
/* Buttons */
JButton submitButton = createButton("Log In",
"Press to login in network monitoring program", "login.png",
simpleFont, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String name = userNameTextField.getText();
@SuppressWarnings("deprecation")
String password = passwordField.getText();
String url = serverIpTextField.getText();
if ((name.equals("")) || password.equals("")
|| serverIpTextField.equals("")) {
errorLabel.setText("One of the fields is empty !!");
errorLabel.setVisible(true);
} else {
try {
client.setUrl(url);
client.register(name, password);
if (client.getTokenSession() != null) {
// create Gui
new MainUI(name, password, url).setVisible(true);
setVisible(false);
} else {
errorLabel
.setText("Login name or password is incorrect !!");
errorLabel.setVisible(true);
}
} catch (Exception e1) {
// e1.printStackTrace();
errorLabel.setText("HTTP 404 - Not Found ");
errorLabel.setVisible(true);
}
}
}
});
JButton resetButton = createButton("Reset",
"Press to clean all fields", "reset.png", simpleFont,
new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
userNameTextField.setText("");
passwordField.setText("");
errorLabel.setVisible(false);
serverIpTextField.setText("");
}
});
/* Add components to Panels */
informationPanel.add(serverIpLabel);
informationPanel.add(serverIpTextField);
informationPanel.add(userNameLabel);
informationPanel.add(userNameTextField);
informationPanel.add(passwordLabel);
informationPanel.add(passwordField);
buttonPanel.add(submitButton);
buttonPanel.add(resetButton);
errorPanel.add(errorLabel);
getContentPane().add(errorPanel);
getContentPane().add(informationPanel);
getContentPane().add(buttonPanel);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
int value = JOptionPane.showConfirmDialog(null,
"Are you sure you want to close Login Form?", "Close",
JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);
if (value == 0) {
System.exit(0);
} else {
setVisible(true);
}
}
});
setVisible(true);
}
private JButton createButton(String title, String toolTip, String path,
Font font, ActionListener listener) {
JButton button = new JButton(title);
button.setToolTipText(toolTip);
try {
Image img = ImageIO.read(getClass().getResourceAsStream(
"/resources/" + path));
button.setIcon(new ImageIcon(img));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
button.setFont(font);
button.addActionListener(listener);
return button;
}
private JLabel createLabel(String title, String path, Font font,
Boolean visible) {
JLabel label = new JLabel(title);
label.setVisible(visible);
label.setFont(font);
try {
Image img = ImageIO.read(getClass().getResourceAsStream(
"/resources/" + path));
label.setIcon(new ImageIcon(img));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return label;
}
public static void main(String args[]) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new LoginUI();
}
});
}
}