You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
9.1 KiB
239 lines
9.1 KiB
package cmpt213.assignment4.packagedeliveries.client.view;
|
|
|
|
|
|
import cmpt213.assignment4.packagedeliveries.client.control.PackageDeliveriesTracker;
|
|
import cmpt213.assignment4.packagedeliveries.client.control.PackageFactory;
|
|
import cmpt213.assignment4.packagedeliveries.client.model.PackageInfo;
|
|
import com.github.lgooddatepicker.components.DateTimePicker;
|
|
import com.github.lgooddatepicker.optionalusertools.DateTimeChangeListener;
|
|
import com.github.lgooddatepicker.zinternaltools.DateTimeChangeEvent;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.time.LocalDateTime;
|
|
|
|
public class Input extends JDialog implements ActionListener, DateTimeChangeListener {
|
|
private final PackageDeliveriesTracker pInstance = PackageDeliveriesTracker.getInstance();
|
|
private final JLabel typeLabel;
|
|
private final JPanel typePanel;
|
|
private final JTextField typeTf;
|
|
private final DateTimePicker dd;
|
|
private final DateTimePicker ed;
|
|
private LocalDateTime deliveryDate, expiryDate;
|
|
private final JTextField nameField;
|
|
private final JTextField noteField;
|
|
private final JTextField priceField;
|
|
private final JTextField weightField;
|
|
private final JTextField dateField;
|
|
private int pType;
|
|
|
|
public Input(Frame main) {
|
|
super(main, "add a package", true);
|
|
JPanel p = new JPanel();
|
|
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
|
|
String[] type = {"book", "perishable", "electronic"};
|
|
|
|
JComboBox<String> packageType = new JComboBox<>(type);
|
|
packageType.setPreferredSize(new Dimension(300, 30));
|
|
packageType.addActionListener(new ActionListener() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
String p = (String) packageType.getSelectedItem();
|
|
switch (p) {
|
|
case "book":
|
|
typeTf.setVisible(true);
|
|
ed.setVisible(false);
|
|
typeLabel.setText("author name");
|
|
pType = 0;
|
|
break;
|
|
case "perishable":
|
|
typeTf.setVisible(false);
|
|
ed.setVisible(true);
|
|
ed.addDateTimeChangeListener(new DateTimeChangeListener() {
|
|
@Override
|
|
public void dateOrTimeChanged(DateTimeChangeEvent dateTimeChangeEvent) {
|
|
expiryDate = ed.getDateTimePermissive();
|
|
}
|
|
});
|
|
typePanel.add(ed);
|
|
typeLabel.setText("expiry date");
|
|
pType = 1;
|
|
break;
|
|
case "electronic":
|
|
typeTf.setVisible(true);
|
|
ed.setVisible(false);
|
|
typeLabel.setText("handling fee");
|
|
pType = 2;
|
|
}
|
|
}
|
|
});
|
|
// Panel for package name
|
|
nameField = new JTextField();
|
|
JPanel name = new JPanel();
|
|
JLabel nameLabel = new JLabel();
|
|
name.setLayout(new BoxLayout(name, BoxLayout.X_AXIS));
|
|
nameLabel.setText("name:");
|
|
nameLabel.setPreferredSize(new Dimension(50, 25));
|
|
name.add(nameLabel);
|
|
name.add(nameField);
|
|
name.setPreferredSize(new Dimension(200, 50));
|
|
|
|
p.add(packageType);
|
|
p.add(name);
|
|
JPanel note = new JPanel();
|
|
JLabel noteLabel = new JLabel();
|
|
noteField = new JTextField();
|
|
note.setLayout(new BoxLayout(note, BoxLayout.X_AXIS));
|
|
noteLabel.setText("note:");
|
|
noteLabel.setPreferredSize(new Dimension(50, 25));
|
|
note.add(noteLabel);
|
|
note.add(noteField);
|
|
note.setPreferredSize(new Dimension(200, 50));
|
|
p.add(note);
|
|
|
|
JPanel price = new JPanel();
|
|
JLabel priceLabel = new JLabel();
|
|
priceField = new JTextField();
|
|
price.setLayout(new BoxLayout(price, BoxLayout.X_AXIS));
|
|
priceLabel.setText("price:");
|
|
priceLabel.setPreferredSize(new Dimension(50, 25));
|
|
price.add(priceLabel);
|
|
price.add(priceField);
|
|
price.setPreferredSize(new Dimension(200, 50));
|
|
p.add(price);
|
|
|
|
JPanel weight = new JPanel();
|
|
JLabel weightLabel = new JLabel();
|
|
weightField = new JTextField();
|
|
weight.setLayout(new BoxLayout(weight, BoxLayout.X_AXIS));
|
|
weightLabel.setText("weight:");
|
|
weightLabel.setPreferredSize(new Dimension(50, 25));
|
|
weight.add(weightLabel);
|
|
weight.add(weightField);
|
|
weight.setPreferredSize(new Dimension(200, 50));
|
|
p.add(weight);
|
|
|
|
JPanel date = new JPanel();
|
|
JLabel dateLabel = new JLabel();
|
|
dateField = new JTextField();
|
|
date.setLayout(new BoxLayout(date, BoxLayout.X_AXIS));
|
|
dateLabel.setText("date:");
|
|
dateLabel.setPreferredSize(new Dimension(50, 25));
|
|
dd = new DateTimePicker();
|
|
dd.addDateTimeChangeListener(this);
|
|
date.add(dateLabel);
|
|
date.add(dd);
|
|
date.setPreferredSize(new Dimension(200, 50));
|
|
p.add(date);
|
|
|
|
typePanel = new JPanel();
|
|
typePanel.setLayout(new BoxLayout(typePanel, BoxLayout.X_AXIS));
|
|
typeLabel = new JLabel();
|
|
typeLabel.setText("author:");
|
|
typeLabel.setPreferredSize(new Dimension(50, 25));
|
|
typeTf = new JTextField();
|
|
typePanel.add(typeLabel);
|
|
typePanel.add(typeTf);
|
|
typePanel.setPreferredSize(new Dimension(200, 50));
|
|
ed = new DateTimePicker();
|
|
p.add(typePanel);
|
|
|
|
JPanel actionButton = new JPanel();
|
|
actionButton.setLayout(new BoxLayout(actionButton, BoxLayout.X_AXIS));
|
|
JButton ok = new JButton("ok");
|
|
JButton cancel = new JButton("cancel");
|
|
ok.addActionListener(this);
|
|
cancel.addActionListener(this);
|
|
actionButton.add(ok);
|
|
actionButton.add(cancel);
|
|
p.add(actionButton);
|
|
// Dialog box dimensions
|
|
getContentPane().setSize(500, 500);
|
|
getContentPane().add(p);
|
|
pack();
|
|
this.setVisible(true);
|
|
}
|
|
|
|
@Override
|
|
public void dateOrTimeChanged(DateTimeChangeEvent dateTimeChangeEvent) {
|
|
deliveryDate = dd.getDateTimePermissive();
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
String actionString = e.getActionCommand();
|
|
switch (actionString) {
|
|
case "ok":
|
|
addPackage();
|
|
break;
|
|
case "cancel":
|
|
this.dispose();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void addPackage() {
|
|
try {
|
|
PackageFactory.PackageType type = PackageFactory.PackageType.Book;
|
|
String pName = nameField.getText();
|
|
String pNote = noteField.getText();
|
|
double pPrice = 0.0;
|
|
pPrice = Double.parseDouble(priceField.getText());
|
|
if (pPrice < 0) {
|
|
JOptionPane.showMessageDialog(this,
|
|
"price cannot be less than 0",
|
|
"error",
|
|
JOptionPane.WARNING_MESSAGE);
|
|
}
|
|
double pWeight = 0.0;
|
|
pWeight = Double.parseDouble(weightField.getText());
|
|
if (pWeight < 0) {
|
|
JOptionPane.showMessageDialog(this,
|
|
"weight cannot be less than 0",
|
|
"error",
|
|
JOptionPane.WARNING_MESSAGE);
|
|
}
|
|
String pAuthor = "";
|
|
double pHandlingFee = 0.0;
|
|
if (pType == 0) {
|
|
pAuthor = typeTf.getText();
|
|
if (pAuthor.equals("")) {
|
|
JOptionPane.showMessageDialog(this,
|
|
"author name can not be empty",
|
|
"error",
|
|
JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
} else if (pType == 1) {
|
|
type = PackageFactory.PackageType.Electronic;
|
|
pHandlingFee = Double.parseDouble(typeTf.getText());
|
|
if (pHandlingFee < 0) {
|
|
JOptionPane.showMessageDialog(this,
|
|
"Handling fee cannot be less than 0",
|
|
"error",
|
|
JOptionPane.WARNING_MESSAGE);
|
|
}
|
|
} else {
|
|
type = PackageFactory.PackageType.Perishable;
|
|
}
|
|
if (pName.equals("")) {
|
|
JOptionPane.showMessageDialog(this,
|
|
"name cannot be empty",
|
|
"error",
|
|
JOptionPane.WARNING_MESSAGE);
|
|
return;
|
|
}
|
|
PackageInfo p = PackageFactory.create(type, pName, pNote, pPrice, pWeight, false, deliveryDate, pAuthor, expiryDate, pHandlingFee);
|
|
pInstance.addPackage(p);
|
|
dispose();
|
|
} catch (Exception e) {
|
|
JOptionPane.showMessageDialog(this,
|
|
"error in input, please check again",
|
|
"error",
|
|
JOptionPane.WARNING_MESSAGE);
|
|
}
|
|
}
|
|
}
|