package husacct.define.presentation.jpanel; import husacct.ServiceProvider; import husacct.common.help.presentation.HelpableJPanel; import husacct.common.locale.ILocaleService; import husacct.common.services.IServiceListener; import husacct.define.presentation.jdialog.AppliedRuleJDialog; import husacct.define.presentation.tables.JTableAppliedRule; import husacct.define.presentation.tables.JTableTableModel; import husacct.define.presentation.utils.DataHelper; import husacct.define.presentation.utils.UiDialogs; import husacct.define.task.DefinitionController; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Observable; import java.util.Observer; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.table.TableModel; public class AppliedRulesJPanel extends HelpableJPanel implements ActionListener, Observer, IServiceListener { private static final long serialVersionUID = -2052083182258803790L; private JButton addRuleButton; private JMenuItem addRuleItem = new JMenuItem(); private JScrollPane appliedRulesPane; private JTableAppliedRule appliedRulesTable; private JButton editRuleButton; private JMenuItem editRuleItem = new JMenuItem(); private JPopupMenu popupMenu = new JPopupMenu(); private JButton removeRuleButton; private JMenuItem removeRuleItem = new JMenuItem(); private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService(); public AppliedRulesJPanel() { super(); } /** * Handling ActionPerformed */ @Override public void actionPerformed(ActionEvent action) { if (action.getSource() == addRuleButton || action.getSource() == addRuleItem) { addRule(); } else if (action.getSource() == editRuleButton || action.getSource() == editRuleItem) { editRule(); } else if (action.getSource() == removeRuleButton || action.getSource() == removeRuleItem) { removeRules(); } } private JScrollPane addAppliedRulesTable() { appliedRulesPane = new JScrollPane(); appliedRulesTable = new JTableAppliedRule(); appliedRulesTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { createPopup(event); setButtonEnableState(); if (event.getClickCount() == 2) { editRule(); } } @Override public void mouseEntered(MouseEvent event) { createPopup(event); setButtonEnableState(); } @Override public void mousePressed(MouseEvent event) { createPopup(event); setButtonEnableState(); } }); appliedRulesPane.setViewportView(appliedRulesTable); return appliedRulesPane; } protected JPanel addButtonPanel() { JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(createButtonPanelLayout()); buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 2)); buttonPanel.setPreferredSize(new java.awt.Dimension(90, 156)); addRuleButton = new JButton(); buttonPanel.add(addRuleButton, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); addRuleButton.addActionListener(this); editRuleButton = new JButton(); buttonPanel.add(editRuleButton, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); editRuleButton.addActionListener(this); removeRuleButton = new JButton(); buttonPanel.add(removeRuleButton, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); removeRuleButton.addActionListener(this); setButtonTexts(); return buttonPanel; } private void addRule() { long moduleId = DefinitionController.getInstance().getSelectedModuleId(); if (moduleId != -1) { AppliedRuleJDialog appliedRuleFrame = new AppliedRuleJDialog(moduleId, -1L); ServiceProvider.getInstance().getControlService().centerDialog(appliedRuleFrame); appliedRuleFrame.setVisible(true); } else { // TODO Test popup JOptionPane.showMessageDialog(this, ServiceProvider.getInstance().getLocaleService() .getTranslatedString("ModuleSelectionError"), ServiceProvider.getInstance().getLocaleService() .getTranslatedString("WrongSelectionTitle"), JOptionPane.ERROR_MESSAGE); } } private GridBagLayout createButtonPanelLayout() { GridBagLayout buttonPanelLayout = new GridBagLayout(); buttonPanelLayout.rowWeights = new double[] { 0.0, 0.0, 0.1 }; buttonPanelLayout.rowHeights = new int[] { 0, 11, 7 }; buttonPanelLayout.columnWeights = new double[] { 0.1 }; buttonPanelLayout.columnWidths = new int[] { 7 }; return buttonPanelLayout; } private void createPopup(MouseEvent event) { if (SwingUtilities.isRightMouseButton(event)) { int row = appliedRulesTable.rowAtPoint(event.getPoint()); int column = appliedRulesTable.columnAtPoint(event.getPoint()); if (!appliedRulesTable.isRowSelected(row)) { appliedRulesTable.changeSelection(row, column, false, false); } popupMenu.show(event.getComponent(), event.getX(), event.getY()); } } private void createPopupMenu() { addRuleItem = new JMenuItem(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("Add")); addRuleItem.addActionListener(this); editRuleItem = new JMenuItem(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("Edit")); editRuleItem.addActionListener(this); removeRuleItem = new JMenuItem(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("Remove")); removeRuleItem.addActionListener(this); popupMenu.add(addRuleItem); popupMenu.add(editRuleItem); popupMenu.add(removeRuleItem); } private void disableButtons() { addRuleButton.setEnabled(false); addRuleItem.setEnabled(false); editRuleButton.setEnabled(false); editRuleItem.setEnabled(false); removeRuleButton.setEnabled(false); removeRuleItem.setEnabled(false); } private void editRule() { long moduleId = DefinitionController.getInstance().getSelectedModuleId(); long selectedAppliedRuleId = getSelectedAppliedRuleId(); if (selectedAppliedRuleId != -1) { AppliedRuleJDialog appliedRuleFrame = new AppliedRuleJDialog(moduleId, selectedAppliedRuleId); ServiceProvider.getInstance().getControlService().centerDialog(appliedRuleFrame); appliedRuleFrame.setVisible(true); } else { JOptionPane.showMessageDialog(this, ServiceProvider.getInstance().getLocaleService().getTranslatedString("RuleSelectionError"), ServiceProvider.getInstance().getLocaleService().getTranslatedString("WrongSelectionTitle"), JOptionPane.ERROR_MESSAGE); } } private void enableAddDisableEditRemoveButtons() { addRuleButton.setEnabled(true); addRuleItem.setEnabled(true); editRuleButton.setEnabled(false); editRuleItem.setEnabled(false); removeRuleButton.setEnabled(false); removeRuleItem.setEnabled(false); } private void enableButtons() { addRuleButton.setEnabled(true); addRuleItem.setEnabled(true); editRuleButton.setEnabled(true); editRuleItem.setEnabled(true); removeRuleButton.setEnabled(true); removeRuleItem.setEnabled(true); } public TableModel getModel() { return appliedRulesTable.getModel(); } private long getSelectedAppliedRuleId() { long selectedAppliedRuleId = -1; try { Object o = appliedRulesTable.getValueAt(getSelectedRow(), appliedRulesTable.getRuleTypeColumnIndex()); if (o instanceof DataHelper) { DataHelper datahelper = (DataHelper) o; selectedAppliedRuleId = datahelper.getId(); } } catch (Exception e) { } return selectedAppliedRuleId; } public int getSelectedRow() { return appliedRulesTable.getSelectedRow(); } /** * Creating Gui */ public void initGui() { DefinitionController.getInstance().addObserver(this); BorderLayout appliedRulesPanelLayout = new BorderLayout(); setLayout(appliedRulesPanelLayout); setBorder(BorderFactory.createTitledBorder(ServiceProvider .getInstance().getLocaleService().getTranslatedString("Rules"))); this.add(addAppliedRulesTable(), BorderLayout.CENTER); this.add(addButtonPanel(), BorderLayout.EAST); createPopupMenu(); setButtonEnableState(); ServiceProvider.getInstance().getLocaleService().addServiceListener(this); } private void removeRules() { if (getSelectedRow() != -1) { List<Long> selectedRules = new ArrayList<Long>(); for (int selectedRow : appliedRulesTable.getSelectedRows()) { Object o = appliedRulesTable.getValueAt(selectedRow, 0); if (o instanceof DataHelper) { DataHelper datahelper = (DataHelper) o; selectedRules.add(datahelper.getId()); } } DefinitionController.getInstance().removeRules(selectedRules); } } private void setButtonEnableState() { if (DefinitionController.getInstance().getSelectedModuleId() == -1) { disableButtons(); } else if (appliedRulesTable.getSelectedRowCount() == 0 || getSelectedRow() == -1) { enableAddDisableEditRemoveButtons(); } else { enableButtons(); } } private void setButtonTexts() { addRuleButton.setText(ServiceProvider.getInstance().getLocaleService() .getTranslatedString("Add")); editRuleButton.setText(ServiceProvider.getInstance().getLocaleService() .getTranslatedString("Edit")); removeRuleButton.setText(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("Remove")); } @Override public void update() { setButtonTexts(); setBorder(BorderFactory.createTitledBorder(ServiceProvider .getInstance().getLocaleService().getTranslatedString("Rules"))); appliedRulesTable.changeColumnHeaders(); } /** * Observer */ @Override public void update(Observable o, Object arg) { updateAppliedRuleTable(); setButtonEnableState(); } public void updateAppliedRuleTable() { try { JTableTableModel atm = (JTableTableModel) appliedRulesTable.getModel(); atm.getDataVector().removeAllElements(); long moduleId = DefinitionController.getInstance().getSelectedModuleId(); if (moduleId != -1) { // Get all appliedRuleIds from the service ArrayList<Long> appliedRulesIds = DefinitionController.getInstance().getAppliedRuleIdsBySelectedModule(); if (appliedRulesIds != null) { for (long appliedRuleId : appliedRulesIds) { HashMap<String, Object> ruleDetails = DefinitionController.getInstance().getRuleDetailsByAppliedRuleId(appliedRuleId); String ruleTypeKey = (String) ruleDetails.get("ruleTypeKey"); // SetDataHelper to help retrieve the applied Rule id through the ruleTypeKey DataHelper datahelperRuleType = new DataHelper(); datahelperRuleType.setId(appliedRuleId); datahelperRuleType.setValue(localeService.getTranslatedString(ruleTypeKey)); String moduleToName; if ((ruleTypeKey.equals("IsNotAllowedToUse")) || (ruleTypeKey.equals("IsOnlyAllowedToUse")) || (ruleTypeKey.equals("IsTheOnlyModuleAllowedToUse")) || (ruleTypeKey.equals("InheritanceConvention")) || (ruleTypeKey.equals("MustUse")) || (ruleTypeKey.equals("IsAllowedToUse"))){ moduleToName = (String) ruleDetails.get("moduleToName"); } else { moduleToName = ""; //Do not show the module to. Logically there is no module to, but technically module to is the same as module from. } boolean appliedRuleIsEnabled = (Boolean) ruleDetails.get("enabled"); String enabled = "Off"; if (appliedRuleIsEnabled) { enabled = "On"; } int numberofexceptions = (Integer) ruleDetails.get("numberofexceptions"); Object rowdata[] = { datahelperRuleType, moduleToName, enabled, numberofexceptions }; atm.addRow(rowdata); } } } atm.fireTableDataChanged(); } catch (Exception e) { UiDialogs.errorDialog(this, e.getMessage()); } } }