package husacct.validate.presentation.languageSeverityConfiguration; import husacct.ServiceProvider; import husacct.validate.domain.configuration.ActiveRuleType; import husacct.validate.domain.configuration.ActiveViolationType; import husacct.validate.domain.validation.ruletype.RuleType; import husacct.validate.presentation.DataLanguageHelper; 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.DefaultTableModel; import org.apache.log4j.Logger; class ActiveViolationPanel extends JPanel { private static final long serialVersionUID = 3957004303176017057L; private static Logger logger = Logger.getLogger(ActiveViolationPanel.class); private final DefaultListModel<DataLanguageHelper> categoryModel; private final DefaultListModel<DataLanguageHelper> ruletypeModel; private final String language; private final TaskServiceImpl taskServiceImpl; private final HashMap<String, List<RuleType>> ruletypes; private final List<ActiveRuleType> activeRuletypes; private List<ActiveViolationType> activeViolationtypes; private DefaultTableModel violationtypeModel; private JButton apply, deselectAll, selectAll; private JList<DataLanguageHelper> categoryJList, ruletypeJList; private JScrollPane categoryScrollpane, ruletypeScrollpane, violationtypeScrollpane; private JTable violationtypeTable; ActiveViolationPanel(TaskServiceImpl taskServiceImpl, HashMap<String, List<RuleType>> ruletypes, String language) { categoryModel = new DefaultListModel<DataLanguageHelper>(); ruletypeModel = new DefaultListModel<DataLanguageHelper>(); this.taskServiceImpl = taskServiceImpl; this.ruletypes = ruletypes; this.language = language; activeRuletypes = taskServiceImpl.getActiveViolationTypes().get(language); initComponents(); loadAfterChange(); loadRuleTypeCategories(); } private void initComponents() { categoryScrollpane = new JScrollPane(); categoryJList = new JList<DataLanguageHelper>(); categoryJList.setModel(categoryModel); ruletypeScrollpane = new JScrollPane(); violationtypeTable = new JTable(); violationtypeScrollpane = new JScrollPane(); ruletypeJList = new JList<DataLanguageHelper>(); ruletypeJList.setModel(ruletypeModel); selectAll = new JButton(); deselectAll = new JButton(); apply = new JButton(); categoryJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); categoryJList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent evt) { if (categoryJList.getSelectedIndex() > -1 && !evt.getValueIsAdjusting()) { categoryValueChanged(); } } }); categoryScrollpane.setViewportView(categoryJList); violationtypeTable.getTableHeader().setReorderingAllowed(false); violationtypeTable.setFillsViewportHeight(true); violationtypeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ruletypeScrollpane.setViewportView(violationtypeTable); ruletypeJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ruletypeJList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent evt) { if (ruletypeJList.getSelectedIndex() > -1 && !evt.getValueIsAdjusting()) { ruletypeValueChanged(); } } }); violationtypeScrollpane.setViewportView(ruletypeJList); selectAll.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { SelectAllActionPerformed(); } }); deselectAll.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { DeselectAllActionPerformed(); } }); apply.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { ApplyActionPerformed(); } }); createLayout(); apply.setEnabled(false); } private void createLayout() { GroupLayout activeViolationtypeLayout = new GroupLayout(this); GroupLayout.ParallelGroup horizontalButtonGroup = activeViolationtypeLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false); horizontalButtonGroup.addComponent(selectAll, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); horizontalButtonGroup.addComponent(deselectAll, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); horizontalButtonGroup.addComponent(apply, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); GroupLayout.SequentialGroup horizontalPaneGroup = activeViolationtypeLayout.createSequentialGroup(); horizontalPaneGroup.addComponent(categoryScrollpane); horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED); horizontalPaneGroup.addComponent(violationtypeScrollpane); horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED); horizontalPaneGroup.addComponent(ruletypeScrollpane); horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED); horizontalPaneGroup.addGroup(horizontalButtonGroup); activeViolationtypeLayout.setHorizontalGroup(horizontalPaneGroup); GroupLayout.SequentialGroup verticalButtonGroup = activeViolationtypeLayout.createSequentialGroup(); verticalButtonGroup.addContainerGap(); verticalButtonGroup.addComponent(selectAll); verticalButtonGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); verticalButtonGroup.addComponent(deselectAll); verticalButtonGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); verticalButtonGroup.addComponent(apply); verticalButtonGroup.addContainerGap(); GroupLayout.ParallelGroup verticalPaneGroup = activeViolationtypeLayout.createParallelGroup(GroupLayout.Alignment.TRAILING); verticalPaneGroup.addComponent(ruletypeScrollpane); verticalPaneGroup.addGroup(verticalButtonGroup); verticalPaneGroup.addComponent(categoryScrollpane); verticalPaneGroup.addComponent(violationtypeScrollpane); activeViolationtypeLayout.setVerticalGroup(verticalPaneGroup); setLayout(activeViolationtypeLayout); } final void loadAfterChange() { setText(); loadModels(); } private void setText() { categoryJList.setBorder(BorderFactory.createTitledBorder(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Category"))); ruletypeJList.setBorder(BorderFactory.createTitledBorder(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Ruletypes"))); selectAll.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("SelectAll")); deselectAll.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("DeselectAll")); apply.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Apply")); } private void loadModels() { String[] ViolationtypeModelHeaders = {ServiceProvider.getInstance().getLocaleService().getTranslatedString("Violationtype"), ServiceProvider.getInstance().getLocaleService().getTranslatedString("Active")}; violationtypeModel = new DefaultTableModel(ViolationtypeModelHeaders, 0) { private static final long serialVersionUID = 3779670097825676765L; Class<?>[] types = new Class[] {String.class, Boolean.class}; boolean[] canEdit = new boolean[] {false, true}; @Override public Class<?> getColumnClass(int columnIndex) { return types[columnIndex]; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit[columnIndex]; } }; violationtypeTable.setModel(violationtypeModel); } private void loadRuleTypeCategories() { categoryModel.clear(); for (String categoryString : ruletypes.keySet()) { categoryModel.addElement(new DataLanguageHelper(categoryString)); } if (!categoryModel.isEmpty()) { categoryJList.setSelectedIndex(0); } } private void SelectAllActionPerformed() { if (!apply.isEnabled()) { ServiceProvider.getInstance().getControlService().showInfoMessage(ServiceProvider.getInstance().getLocaleService().getTranslatedString("ActiveViolationTypesNoViolationTypesInfoMessage")); } else { for (int i = 0; i < violationtypeModel.getRowCount(); i++) { violationtypeModel.setValueAt(true, i, 1); } } } private void DeselectAllActionPerformed() { if (!apply.isEnabled()) { ServiceProvider.getInstance().getControlService().showInfoMessage(ServiceProvider.getInstance().getLocaleService().getTranslatedString("ActiveViolationTypesNoViolationTypesInfoMessage")); } else { for (int i = 0; i < violationtypeModel.getRowCount(); i++) { violationtypeModel.setValueAt(false, i, 1); } } } private void ApplyActionPerformed() { activeRuletypes.get(ruletypeJList.getSelectedIndex()); for (int i = 0; i < violationtypeModel.getRowCount(); i++) { boolean test = (Boolean) violationtypeModel.getValueAt(i, 1); try { activeViolationtypes.get(i).setEnabled(test); } catch (IndexOutOfBoundsException outOfBoundsException) { logger.error("Something went wrong. Active violationtypes can not be set."); } } taskServiceImpl.setActiveViolationTypes(language, activeRuletypes); } private void categoryValueChanged() { loadRuletypes(categoryJList.getSelectedValue().key); } private void loadRuletypes(String category) { ruletypeModel.clear(); List<RuleType> rules = ruletypes.get(category); for (RuleType ruletype : rules) { if (!ruletype.getViolationTypes().isEmpty()) { ruletypeModel.addElement(new DataLanguageHelper(ruletype.getKey())); } } if (!ruletypeModel.isEmpty()) { ruletypeJList.setSelectedIndex(0); } ruletypeValueChanged(); } private void ruletypeValueChanged() { loadViolationtypes(ruletypeJList.getSelectedValue().key); } private void clearViolationTypesTable() { while (violationtypeModel.getRowCount() > 0) { violationtypeModel.removeRow(0); } } private void loadViolationtypes(String ruletypekey) { apply.setEnabled(true); clearViolationTypesTable(); for (ActiveRuleType ruletype : activeRuletypes) { if (ruletype.getRuleType().equals(ruletypekey)) { for (ActiveViolationType violationtype : ruletype.getViolationTypes()) { violationtypeModel.addRow(new Object[] {ServiceProvider.getInstance().getLocaleService().getTranslatedString(violationtype.getType()), violationtype.isEnabled()}); } activeViolationtypes = ruletype.getViolationTypes(); break; } } } public void clearSelection() { violationtypeTable.getSelectionModel().clearSelection(); ruletypeJList.getSelectionModel().clearSelection(); categoryJList.getSelectionModel().clearSelection(); } public void selectFirstIndexOfCategory() { categoryJList.setSelectedIndex(0); } }