package dell_system;
|
|
import targets.Company;
|
import targets.Department;
|
import javax.swing.*;
|
import javax.swing.border.EmptyBorder;
|
import javax.swing.table.*;
|
import java.awt.*;
|
import java.sql.SQLException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.List;
|
import java.util.ResourceBundle;
|
|
public class DepartmentManagementPanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
private JTable departmentTable;
|
private DefaultTableModel tableModel;
|
private List<Department> allDepartments;
|
private List<Company> allCompanies;
|
private ResourceBundle messages;
|
private JTextField searchField;
|
|
@SuppressWarnings("serial")
|
public DepartmentManagementPanel(ResourceBundle messages) {
|
this.messages = messages;
|
setLayout(new BorderLayout());
|
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
|
// ¶¥²¿Ãæ°å
|
JPanel topPanel = new JPanel(new BorderLayout(5, 5));
|
topPanel.setBorder(BorderFactory.createTitledBorder(getMessage("QKOP")));
|
|
// ËÑË÷Ãæ°å
|
JPanel searchInputPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
|
JLabel searchLabel = new JLabel(getMessage("DEPARTMENT_NAME") + ":");
|
searchField = new JTextField(20);
|
JButton searchButton = new JButton(getMessage("SEARCH"));
|
JButton resetButton = new JButton(getMessage("RESET"));
|
|
searchInputPanel.add(searchLabel);
|
searchInputPanel.add(searchField);
|
searchInputPanel.add(searchButton);
|
searchInputPanel.add(resetButton);
|
|
// ²Ù×÷°´Å¥Ãæ°å
|
JPanel actionPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0));
|
JButton addButton = new JButton(getMessage("ADD"));
|
JButton editButton = new JButton(getMessage("EDIT"));
|
JButton deleteButton = new JButton(getMessage("DELETE"));
|
JButton refreshButton = new JButton(getMessage("REFRESH"));
|
|
actionPanel.add(addButton);
|
actionPanel.add(editButton);
|
actionPanel.add(deleteButton);
|
actionPanel.add(refreshButton);
|
|
topPanel.add(searchInputPanel, BorderLayout.CENTER);
|
topPanel.add(actionPanel, BorderLayout.EAST);
|
|
// ´´½¨±í¸ñÁÐÃû
|
String[] columnNames = {
|
getMessage("INDEX"),
|
getMessage("DEPARTMENT_NAME"),
|
getMessage("BELONGING_COMPANY"),
|
getMessage("VIEW_PERMISSION"),
|
getMessage("ADD_PERMISSION"),
|
getMessage("EDIT_PERMISSION"),
|
getMessage("DELETE_PERMISSION"),
|
getMessage("ADDED_DATE")
|
};
|
|
// ´´½¨±í¸ñÄ£ÐÍ
|
tableModel = new DefaultTableModel(columnNames, 0) {
|
@Override
|
public boolean isCellEditable(int row, int column) {
|
return false;
|
}
|
};
|
|
// ´´½¨±í¸ñ
|
departmentTable = new JTable(tableModel);
|
departmentTable.setAutoCreateRowSorter(true);
|
departmentTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
// ÉèÖÃÁпí
|
TableColumnModel columnModel = departmentTable.getColumnModel();
|
columnModel.getColumn(0).setPreferredWidth(50); // ÐòºÅ
|
columnModel.getColumn(1).setPreferredWidth(150); // ²¿ÃÅÃû³Æ
|
columnModel.getColumn(2).setPreferredWidth(150); // ËùÊô¹«Ë¾
|
columnModel.getColumn(3).setPreferredWidth(80); // ²é¿´È¨ÏÞ
|
columnModel.getColumn(4).setPreferredWidth(80); // Ôö¼ÓȨÏÞ
|
columnModel.getColumn(5).setPreferredWidth(80); // ÐÞ¸ÄȨÏÞ
|
columnModel.getColumn(6).setPreferredWidth(80); // ɾ³ýȨÏÞ
|
columnModel.getColumn(7).setPreferredWidth(150); // Ìí¼ÓÈÕÆÚ
|
|
// ÉèÖñíÍ·Ñùʽ
|
JTableHeader header = departmentTable.getTableHeader();
|
header.setBackground(Color.GRAY);
|
header.setForeground(Color.WHITE);
|
header.setFont(header.getFont().deriveFont(Font.BOLD));
|
|
// ´´½¨±íÍ·äÖȾÆ÷
|
DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer() {
|
{
|
setHorizontalAlignment(SwingConstants.LEFT);
|
setBackground(Color.GRAY);
|
setForeground(Color.WHITE);
|
setFont(getFont().deriveFont(Font.BOLD));
|
}
|
};
|
|
// Ó¦ÓñíÍ·äÖȾÆ÷
|
for (int i = 0; i < departmentTable.getColumnCount(); i++) {
|
departmentTable.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer);
|
}
|
|
JScrollPane scrollPane = new JScrollPane(departmentTable);
|
scrollPane.setPreferredSize(new Dimension(1000, 400));
|
|
// Ìí¼Ó×é¼þ
|
add(topPanel, BorderLayout.NORTH);
|
add(scrollPane, BorderLayout.CENTER);
|
|
// ¼ÓÔØÊý¾Ý
|
loadDepartmentData();
|
loadCompanyData();
|
|
// Ìí¼Óʼþ¼àÌýÆ÷
|
addButton.addActionListener(e -> addNewDepartment());
|
editButton.addActionListener(e -> editSelectedDepartment());
|
deleteButton.addActionListener(e -> deleteSelectedDepartments());
|
refreshButton.addActionListener(e -> {
|
loadDepartmentData();
|
loadCompanyData();
|
});
|
searchButton.addActionListener(e -> searchDepartments());
|
resetButton.addActionListener(e -> resetSearch());
|
}
|
|
private void loadDepartmentData() {
|
try {
|
allDepartments = Dell_department.getAllDepartments();
|
updateTable(allDepartments);
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(this, getMessage("DATA_LOAD_ERROR") + ": " + ex.getMessage(),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
}
|
}
|
|
private void loadCompanyData() {
|
try {
|
allCompanies = Dell_company.getAllCompanies();
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(this, getMessage("DATA_LOAD_ERROR") + ": " + ex.getMessage(),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
}
|
}
|
|
// ËÑË÷²¿ÃÅ
|
private void searchDepartments() {
|
String keyword = searchField.getText().trim();
|
if (keyword.isEmpty()) {
|
updateTable(allDepartments);
|
return;
|
}
|
|
List<Department> filtered = new ArrayList<>();
|
for (Department dept : allDepartments) {
|
if (dept.getDepartmentName().toLowerCase().contains(keyword.toLowerCase())) {
|
filtered.add(dept);
|
}
|
}
|
|
if (filtered.isEmpty()) {
|
JOptionPane.showMessageDialog(this, getMessage("SEARCH_NO_DEPARTMENTS"),
|
getMessage("INFO"), JOptionPane.INFORMATION_MESSAGE);
|
}
|
|
updateTable(filtered);
|
}
|
|
// ÖØÖÃËÑË÷
|
private void resetSearch() {
|
searchField.setText("");
|
updateTable(allDepartments);
|
}
|
|
private void updateTable(List<Department> departments) {
|
tableModel.setRowCount(0);
|
|
int index = 1;
|
for (Department dept : departments) {
|
tableModel.addRow(new Object[]{
|
index++,
|
dept.getDepartmentName(),
|
dept.getCompany(),
|
dept.getViewPermission().equals("1") ? getMessage("HAS_PERMISSION") : getMessage("NO_PERMISSION"),
|
dept.getAddPermission().equals("1") ? getMessage("HAS_PERMISSION") : getMessage("NO_PERMISSION"),
|
dept.getEditPermission().equals("1") ? getMessage("HAS_PERMISSION") : getMessage("NO_PERMISSION"),
|
dept.getDeletePermission().equals("1") ? getMessage("HAS_PERMISSION") : getMessage("NO_PERMISSION"),
|
dept.getAddedDate()
|
});
|
}
|
}
|
|
private void addNewDepartment() {
|
DepartmentEditDialog dialog = new DepartmentEditDialog(
|
(Frame) SwingUtilities.getWindowAncestor(this),
|
messages,
|
true,
|
null,
|
allCompanies
|
);
|
dialog.setVisible(true);
|
|
if (dialog.isConfirmed()) {
|
Department newDept = dialog.getDepartment();
|
|
// ÑéÖ¤ÊäÈë
|
if (validateInput(newDept)) {
|
// ¼ì²é²¿ÃÅÃû³ÆÊÇ·ñΨһ
|
if (isDepartmentNameExists(newDept.getDepartmentName())) {
|
JOptionPane.showMessageDialog(this, getMessage("DEPARTMENT_NAME_EXISTS"),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
// ±£´æµ½Êý¾Ý¿â
|
if (saveDepartmentToDatabase(newDept)) {
|
// ¸üÐÂÄÚ´æÊý¾Ý
|
allDepartments.add(newDept);
|
updateTable(allDepartments);
|
}
|
}
|
}
|
}
|
|
private void editSelectedDepartment() {
|
int selectedRow = departmentTable.getSelectedRow();
|
if (selectedRow == -1) {
|
JOptionPane.showMessageDialog(this, getMessage("SELECT_DEPARTMENT_TO_EDIT"),
|
getMessage("WARNING"), JOptionPane.WARNING_MESSAGE);
|
return;
|
}
|
|
// »ñȡѡÖеIJ¿ÃÅ
|
int modelRow = departmentTable.convertRowIndexToModel(selectedRow);
|
String deptName = (String) tableModel.getValueAt(modelRow, 1);
|
Department dept = findDepartmentByName(deptName);
|
|
if (dept == null) {
|
JOptionPane.showMessageDialog(this, getMessage("DEPARTMENT_NOT_FOUND"),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
DepartmentEditDialog dialog = new DepartmentEditDialog(
|
(Frame) SwingUtilities.getWindowAncestor(this),
|
messages,
|
false,
|
dept,
|
allCompanies
|
);
|
dialog.setVisible(true);
|
|
if (dialog.isConfirmed()) {
|
Department updatedDept = dialog.getDepartment();
|
|
// ÑéÖ¤ÊäÈë
|
if (validateInput(updatedDept)) {
|
// ¸üв¿ÃÅÐÅÏ¢
|
dept.setDepartmentName(updatedDept.getDepartmentName());
|
dept.setCompany(updatedDept.getCompany());
|
dept.setViewPermission(updatedDept.getViewPermission());
|
dept.setAddPermission(updatedDept.getAddPermission());
|
dept.setEditPermission(updatedDept.getEditPermission());
|
dept.setDeletePermission(updatedDept.getDeletePermission());
|
|
// ¸üÐÂÊý¾Ý¿â
|
if (updateDepartmentInDatabase(dept)) {
|
// ¸üбí¸ñ
|
updateTable(allDepartments);
|
}
|
}
|
}
|
}
|
|
private void deleteSelectedDepartments() {
|
int[] selectedRows = departmentTable.getSelectedRows();
|
if (selectedRows.length == 0) {
|
JOptionPane.showMessageDialog(this, getMessage("SELECT_DEPARTMENT_TO_DELETE"),
|
getMessage("WARNING"), JOptionPane.WARNING_MESSAGE);
|
return;
|
}
|
|
int confirm = JOptionPane.showConfirmDialog(this,
|
getMessage("CONFIRM_DELETE") + " " + selectedRows.length + " " + getMessage("DEPARTMENTS") + "?",
|
getMessage("CONFIRM"), JOptionPane.YES_NO_OPTION);
|
|
if (confirm == JOptionPane.YES_OPTION) {
|
Arrays.sort(selectedRows);
|
for (int i = selectedRows.length - 1; i >= 0; i--) {
|
int viewRow = selectedRows[i];
|
int modelRow = departmentTable.convertRowIndexToModel(viewRow);
|
|
String deptName = (String) tableModel.getValueAt(modelRow, 1);
|
Department dept = findDepartmentByName(deptName);
|
|
if (dept != null) {
|
// ´ÓÊý¾Ý¿âɾ³ý
|
if (deleteDepartmentFromDatabase(dept)) {
|
// ´ÓÄÚ´æÊý¾Ýɾ³ý
|
allDepartments.remove(dept);
|
}
|
}
|
}
|
|
// ˢбí¸ñ
|
updateTable(allDepartments);
|
}
|
}
|
|
private boolean validateInput(Department dept) {
|
// ²¿ÃÅÃû³Æ²»ÄÜΪ¿Õ
|
if (dept.getDepartmentName() == null || dept.getDepartmentName().trim().isEmpty()) {
|
JOptionPane.showMessageDialog(this, getMessage("DEPARTMENT_NAME_REQUIRED"),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return false;
|
}
|
|
// ²¿ÃÅÃû³Æ³¤¶ÈÑéÖ¤ (2-30×Ö·û)
|
String name = dept.getDepartmentName().trim();
|
if (name.length() < 2 || name.length() > 30) {
|
JOptionPane.showMessageDialog(this, getMessage("DEPARTMENT_NAME_LENGTH"),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return false;
|
}
|
|
return true;
|
}
|
|
private boolean isDepartmentNameExists(String deptName) {
|
for (Department dept : allDepartments) {
|
if (dept.getDepartmentName().equals(deptName)) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
private Department findDepartmentByName(String deptName) {
|
for (Department dept : allDepartments) {
|
if (dept.getDepartmentName().equals(deptName)) {
|
return dept;
|
}
|
}
|
return null;
|
}
|
|
private boolean saveDepartmentToDatabase(Department dept) {
|
try {
|
Dell_department.insertDepartment(dept);
|
JOptionPane.showMessageDialog(this, getMessage("SAVE_SUCCESS"),
|
getMessage("SUCCESS"), JOptionPane.INFORMATION_MESSAGE);
|
return true;
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(this, getMessage("SAVE_FAILED") + ": " + ex.getMessage(),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return false;
|
}
|
}
|
|
private boolean updateDepartmentInDatabase(Department dept) {
|
try {
|
// ×¢Ò⣺ÕâÀïÐèҪʵÏÖupdateDepartment·½·¨
|
// Dell_department.updateDepartment(dept);
|
JOptionPane.showMessageDialog(this, getMessage("UPDATE_SUCCESS"),
|
getMessage("SUCCESS"), JOptionPane.INFORMATION_MESSAGE);
|
return true;
|
} catch (Exception ex) {
|
JOptionPane.showMessageDialog(this, getMessage("UPDATE_FAILED") + ": " + ex.getMessage(),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return false;
|
}
|
}
|
|
private boolean deleteDepartmentFromDatabase(Department dept) {
|
try {
|
Dell_department.deleteDepartment(dept.getId());
|
JOptionPane.showMessageDialog(this, getMessage("DELETE_SUCCESS"),
|
getMessage("SUCCESS"), JOptionPane.INFORMATION_MESSAGE);
|
return true;
|
} catch (SQLException ex) {
|
JOptionPane.showMessageDialog(this, getMessage("DELETE_FAILED") + ": " + ex.getMessage(),
|
getMessage("ERROR"), JOptionPane.ERROR_MESSAGE);
|
return false;
|
}
|
}
|
|
private String getMessage(String key) {
|
try {
|
return messages.getString(key);
|
} catch (Exception e) {
|
return "[" + key + "]";
|
}
|
}
|
|
// ²¿Ãű༶Ի°¿ò
|
class DepartmentEditDialog extends JDialog {
|
private static final long serialVersionUID = 1L;
|
private JTextField nameField;
|
private JComboBox<String> companyCombo;
|
private ButtonGroup viewPermissionGroup;
|
private ButtonGroup addPermissionGroup;
|
private ButtonGroup editPermissionGroup;
|
private ButtonGroup deletePermissionGroup;
|
private JTextField dateField;
|
private boolean confirmed = false;
|
private Department department;
|
|
public DepartmentEditDialog(Frame parent, ResourceBundle messages,
|
boolean isAddDialog, Department existingDept,
|
List<Company> companies) {
|
super(parent, isAddDialog ? getMessage("ADD_DEPARTMENT") : getMessage("EDIT_DEPARTMENT"), true);
|
setLayout(new BorderLayout());
|
setSize(500, 300);
|
setLocationRelativeTo(parent);
|
|
JPanel formPanel = new JPanel(new GridLayout(7, 2, 5, 5));
|
formPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
|
|
// ²¿ÃÅÃû³Æ
|
JLabel nameLabel = new JLabel(getMessage("DEPARTMENT_NAME") + ": *");
|
nameField = new JTextField();
|
formPanel.add(nameLabel);
|
formPanel.add(nameField);
|
|
// ËùÊô¹«Ë¾
|
JLabel companyLabel = new JLabel(getMessage("BELONGING_COMPANY") + ": *");
|
companyCombo = new JComboBox<>();
|
for (Company company : companies) {
|
companyCombo.addItem(company.getCompanyName());
|
}
|
formPanel.add(companyLabel);
|
formPanel.add(companyCombo);
|
|
// ²é¿´È¨ÏÞ
|
JLabel viewLabel = new JLabel(getMessage("VIEW_PERMISSION") + ":");
|
viewPermissionGroup = new ButtonGroup();
|
JRadioButton viewYes = new JRadioButton(getMessage("HAS_PERMISSION"));
|
viewYes.setSelected(true);
|
JRadioButton viewNo = new JRadioButton(getMessage("NO_PERMISSION"));
|
viewPermissionGroup.add(viewYes);
|
viewPermissionGroup.add(viewNo);
|
JPanel viewPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
viewPanel.add(viewYes);
|
viewPanel.add(viewNo);
|
formPanel.add(viewLabel);
|
formPanel.add(viewPanel);
|
|
// Ôö¼ÓȨÏÞ
|
JLabel addLabel = new JLabel(getMessage("ADD_PERMISSION") + ":");
|
addPermissionGroup = new ButtonGroup();
|
JRadioButton addYes = new JRadioButton(getMessage("HAS_PERMISSION"));
|
JRadioButton addNo = new JRadioButton(getMessage("NO_PERMISSION"));
|
addNo.setSelected(true);
|
addPermissionGroup.add(addYes);
|
addPermissionGroup.add(addNo);
|
JPanel addPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
addPanel.add(addYes);
|
addPanel.add(addNo);
|
formPanel.add(addLabel);
|
formPanel.add(addPanel);
|
|
// ÐÞ¸ÄȨÏÞ
|
JLabel editLabel = new JLabel(getMessage("EDIT_PERMISSION") + ":");
|
editPermissionGroup = new ButtonGroup();
|
JRadioButton editYes = new JRadioButton(getMessage("HAS_PERMISSION"));
|
JRadioButton editNo = new JRadioButton(getMessage("NO_PERMISSION"));
|
editNo.setSelected(true);
|
editPermissionGroup.add(editYes);
|
editPermissionGroup.add(editNo);
|
JPanel editPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
editPanel.add(editYes);
|
editPanel.add(editNo);
|
formPanel.add(editLabel);
|
formPanel.add(editPanel);
|
|
// ɾ³ýȨÏÞ
|
JLabel deleteLabel = new JLabel(getMessage("DELETE_PERMISSION") + ":");
|
deletePermissionGroup = new ButtonGroup();
|
JRadioButton deleteYes = new JRadioButton(getMessage("HAS_PERMISSION"));
|
JRadioButton deleteNo = new JRadioButton(getMessage("NO_PERMISSION"));
|
deleteNo.setSelected(true);
|
deletePermissionGroup.add(deleteYes);
|
deletePermissionGroup.add(deleteNo);
|
JPanel deletePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
deletePanel.add(deleteYes);
|
deletePanel.add(deleteNo);
|
formPanel.add(deleteLabel);
|
formPanel.add(deletePanel);
|
|
// Ìí¼ÓÈÕÆÚ
|
JLabel dateLabel = new JLabel(getMessage("ADDED_DATE") + ":");
|
dateField = new JTextField();
|
dateField.setEditable(false);
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
dateField.setText(sdf.format(new Date()));
|
formPanel.add(dateLabel);
|
formPanel.add(dateField);
|
|
// Èç¹ûÊDZ༶Ի°¿ò£¬Ìî³äÏÖÓÐÊý¾Ý
|
if (!isAddDialog && existingDept != null) {
|
nameField.setText(existingDept.getDepartmentName());
|
companyCombo.setSelectedItem(existingDept.getCompany());
|
|
// ÉèÖÃȨÏÞÑ¡Ïî
|
setPermissionSelection(viewPermissionGroup, existingDept.getViewPermission());
|
setPermissionSelection(addPermissionGroup, existingDept.getAddPermission());
|
setPermissionSelection(editPermissionGroup, existingDept.getEditPermission());
|
setPermissionSelection(deletePermissionGroup, existingDept.getDeletePermission());
|
|
dateField.setText(existingDept.getAddedDate());
|
}
|
|
add(formPanel, BorderLayout.CENTER);
|
|
// °´Å¥Ãæ°å
|
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
|
JButton okButton = new JButton(getMessage("OK"));
|
JButton cancelButton = new JButton(getMessage("CANCEL"));
|
|
okButton.addActionListener(e -> {
|
confirmed = true;
|
department = createDepartmentFromInput();
|
dispose();
|
});
|
|
cancelButton.addActionListener(e -> dispose());
|
|
buttonPanel.add(okButton);
|
buttonPanel.add(cancelButton);
|
add(buttonPanel, BorderLayout.SOUTH);
|
}
|
|
private void setPermissionSelection(ButtonGroup group, String permission) {
|
for (AbstractButton button : Collections.list(group.getElements())) {
|
String buttonText = button.getText();
|
boolean isMatch =
|
("1".equals(permission) && buttonText.equals(getMessage("HAS_PERMISSION"))) ||
|
("0".equals(permission) && buttonText.equals(getMessage("NO_PERMISSION")));
|
|
if (isMatch) {
|
button.setSelected(true);
|
break;
|
}
|
}
|
}
|
|
private Department createDepartmentFromInput() {
|
Department dept = new Department();
|
dept.setDepartmentName(nameField.getText());
|
dept.setCompany((String) companyCombo.getSelectedItem());
|
dept.setViewPermission(getPermissionValue(viewPermissionGroup));
|
dept.setAddPermission(getPermissionValue(addPermissionGroup));
|
dept.setEditPermission(getPermissionValue(editPermissionGroup));
|
dept.setDeletePermission(getPermissionValue(deletePermissionGroup));
|
dept.setAddedDate(dateField.getText());
|
return dept;
|
}
|
|
private String getPermissionValue(ButtonGroup group) {
|
for (AbstractButton button : Collections.list(group.getElements())) {
|
if (button.isSelected()) {
|
return button.getText().equals(getMessage("HAS_PERMISSION")) ? "1" : "0";
|
}
|
}
|
return "0";
|
}
|
|
public Department getDepartment() {
|
return department;
|
}
|
|
public boolean isConfirmed() {
|
return confirmed;
|
}
|
}
|
}
|