package husacct.validate.presentation.languageSeverityConfiguration; import husacct.ServiceProvider; import husacct.validate.domain.validation.Severity; import husacct.validate.domain.validation.ruletype.RuleType; import husacct.validate.presentation.DataLanguageHelper; import husacct.validate.presentation.tableModels.ComboBoxTableModel; import husacct.validate.task.TaskServiceImpl; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.List; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.LayoutStyle; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.TableColumnModel; class RuleTypeSeverityPanel extends JPanel { private static final long serialVersionUID = 5947125752371446966L; private final DefaultListModel<DataLanguageHelper> rtsCategoryModel; private final String language; private final HashMap<String, List<RuleType>> ruletypes; private List<Severity> severities; private TaskServiceImpl taskServiceImpl; private ComboBoxTableModel ruletypeModel; private JButton apply, restore, restoreAll; private JList<DataLanguageHelper> category; private JScrollPane categoryScrollpane, ruletypeScrollpane; private JTable ruletypeTable; RuleTypeSeverityPanel(TaskServiceImpl taskServiceImpl, ConfigurationRuleTypeDTO configurationSubPanelDTO) { rtsCategoryModel = new DefaultListModel<DataLanguageHelper>(); this.taskServiceImpl = taskServiceImpl; this.severities = configurationSubPanelDTO.getSeverities(); this.language = configurationSubPanelDTO.getLanguage(); this.ruletypes = configurationSubPanelDTO.getRuletypes(); initComponents(); loadAfterChange(); loadRuleTypeCategories(); } private void initComponents() { categoryScrollpane = new JScrollPane(); category = new JList<DataLanguageHelper>(); ruletypeScrollpane = new JScrollPane(); ruletypeTable = new JTable(); apply = new JButton(); restore = new JButton(); restoreAll = new JButton(); category.setModel(rtsCategoryModel); category.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); categoryScrollpane.setViewportView(category); ruletypeTable.setFillsViewportHeight(true); ruletypeTable.getTableHeader().setReorderingAllowed(false); ruletypeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ruletypeScrollpane.setViewportView(ruletypeTable); restore.setEnabled(false); category.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent evt) { if (evt.getValueIsAdjusting() && category.getSelectedIndex() > -1) { return; } categoryValueChanged(); } }); ruletypeTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { return; } checkRestoreButtonEnabled(); } }); apply.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { if (ruletypeTable.getSelectedRow() > -1) { applyActionPerformed(); } else { ServiceProvider.getInstance().getControlService().showInfoMessage((ServiceProvider.getInstance().getLocaleService().getTranslatedString("RowNotSelected"))); } } }); restore.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { restoreActionPerformed(); } }); restoreAll.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { restoreAllActionPerformed(); } }); createLayout(); } private void createLayout() { GroupLayout ruletypeSeverityLayout = new GroupLayout(this); GroupLayout.ParallelGroup horizontalButtonGroup = ruletypeSeverityLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false); horizontalButtonGroup.addComponent(restore, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); horizontalButtonGroup.addComponent(restoreAll, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); horizontalButtonGroup.addComponent(apply, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); GroupLayout.SequentialGroup horizontalPaneGroup = ruletypeSeverityLayout.createSequentialGroup(); horizontalPaneGroup.addComponent(categoryScrollpane); horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED); horizontalPaneGroup.addComponent(ruletypeScrollpane); horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED); horizontalPaneGroup.addGroup(horizontalButtonGroup); horizontalPaneGroup.addContainerGap(); ruletypeSeverityLayout.setHorizontalGroup(horizontalPaneGroup); GroupLayout.SequentialGroup verticalButtonGroup = ruletypeSeverityLayout.createSequentialGroup(); verticalButtonGroup.addContainerGap(); verticalButtonGroup.addComponent(restore); verticalButtonGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); verticalButtonGroup.addComponent(restoreAll); verticalButtonGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); verticalButtonGroup.addComponent(apply); verticalButtonGroup.addContainerGap(); GroupLayout.ParallelGroup verticalPaneGroup = ruletypeSeverityLayout.createParallelGroup(GroupLayout.Alignment.TRAILING); verticalPaneGroup.addComponent(categoryScrollpane); verticalPaneGroup.addComponent(ruletypeScrollpane); verticalPaneGroup.addGroup(verticalButtonGroup); ruletypeSeverityLayout.setVerticalGroup(verticalPaneGroup); setLayout(ruletypeSeverityLayout); } final void loadAfterChange() { setText(); loadModel(); } private void setText() { category.setBorder(BorderFactory.createTitledBorder(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Category"))); apply.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Apply")); restore.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("RestoreToDefault")); restoreAll.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("RestoreAllToDefault")); } void setSeverities(List<Severity> severities) { this.severities = severities; } void loadModel() { String[] ruletypeColumnNames = {ServiceProvider.getInstance().getLocaleService().getTranslatedString("Ruletype"), ServiceProvider.getInstance().getLocaleService().getTranslatedString("Severity")}; ruletypeModel = new ComboBoxTableModel(ruletypeColumnNames, 0, severities); ruletypeModel.setTypes(new Class[] {DataLanguageHelper.class, Severity.class}); ruletypeModel.setCanEdit(new Boolean[] {false, true}); ruletypeTable.setModel(ruletypeModel); TableColumnModel tcm = ruletypeTable.getColumnModel(); tcm.getColumn(1).setCellEditor(ruletypeModel.getEditor()); } private void restoreActionPerformed() { taskServiceImpl.restoreKeyToDefaultSeverity(language, ((DataLanguageHelper) ruletypeModel.getValueAt(ruletypeTable.getSelectedRow(), 0)).key); categoryValueChanged(); } private void restoreAllActionPerformed() { taskServiceImpl.restoreAllKeysToDefaultSeverities(language); categoryValueChanged(); } private void applyActionPerformed() { checkRestoreButtonEnabled(); updateRuletypeSeverities(); } private void categoryValueChanged() { if (category.getSelectedValue() != null) { loadRuleTypes(category.getSelectedValue().key); } } private void loadRuleTypeCategories() { rtsCategoryModel.clear(); for (String categoryString : ruletypes.keySet()) { rtsCategoryModel.addElement(new DataLanguageHelper(categoryString)); } if (!rtsCategoryModel.isEmpty()) { category.setSelectedIndex(0); } } private void loadRuleTypes(String category) { ruletypeModel.clear(); List<RuleType> rules = ruletypes.get(category); for (RuleType ruletype : rules) { Severity severity; try { severity = taskServiceImpl.getSeverityFromKey(language, ruletype.getKey()); } catch (Exception e) { severity = taskServiceImpl.getAllSeverities().get(0); } if (!ruletype.getKey().contains("Exception")) { ruletypeModel.addRow(new Object[] {new DataLanguageHelper(ruletype.getKey()), severity}); } } ruletypeModel.checkValuesAreValid(); } private void updateRuletypeSeverities() { HashMap<String, Severity> map = new HashMap<String, Severity>(); for (int i = 0; i < ruletypeModel.getRowCount(); i++) { String key = ((DataLanguageHelper) ruletypeModel.getValueAt(i, 0)).key; map.put(key, (Severity) ruletypeModel.getValueAt(i, 1)); } taskServiceImpl.updateSeverityPerType(map, language); } private void checkRestoreButtonEnabled() { if (ruletypeTable.getSelectedRow() > -1) { restore.setEnabled(true); } else { restore.setEnabled(false); } } public void clearSelection() { ruletypeTable.getSelectionModel().clearSelection(); category.getSelectionModel().clearSelection(); } public void selectFirstIndexOfCategory() { category.setSelectedIndex(0); } }