package husacct.validate.presentation.languageSeverityConfiguration;
import husacct.ServiceProvider;
import husacct.validate.domain.validation.Severity;
import husacct.validate.domain.validation.ViolationType;
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 java.util.Map;
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;
import org.apache.log4j.Logger;
class ViolationTypeSeverityPanel extends JPanel {
private static final long serialVersionUID = 1283848062887016417L;
private static Logger logger = Logger.getLogger(ViolationTypeSeverityPanel.class);
private ComboBoxTableModel violationtypeModel;
private TaskServiceImpl taskServiceImpl;
private JButton apply, restore, restoreAll;
private JList<DataLanguageHelper> category;
private JScrollPane categoryScrollpane, violationtypeScrollpane;
private JTable violationtypeTable;
private final DefaultListModel<DataLanguageHelper> categoryModel;
private final String language;
private final Map<String, List<ViolationType>> violationTypes;
private List<Severity> severities;
ViolationTypeSeverityPanel(TaskServiceImpl taskServiceImpl, ConfigurationViolationTypeDTO configurationViolationTypeDTO) {
categoryModel = new DefaultListModel<DataLanguageHelper>();
this.taskServiceImpl = taskServiceImpl;
this.language = configurationViolationTypeDTO.getLanguage();
this.violationTypes = configurationViolationTypeDTO.getViolationtypes();
this.severities = configurationViolationTypeDTO.getSeverities();
initComponents();
loadModel();
setText();
loadViolationTypeCategories();
}
private void initComponents() {
categoryScrollpane = new JScrollPane();
category = new JList<DataLanguageHelper>();
violationtypeScrollpane = new JScrollPane();
violationtypeTable = new JTable();
restore = new JButton();
restoreAll = new JButton();
apply = new JButton();
category.setModel(categoryModel);
category.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
category.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent evt) {
if (!evt.getValueIsAdjusting() && category.getSelectedIndex() > -1) {
categoryValueChanged();
}
}
});
categoryScrollpane.setViewportView(category);
violationtypeTable.setFillsViewportHeight(true);
violationtypeTable.getTableHeader().setReorderingAllowed(false);
violationtypeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
violationtypeTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
checkRestoreButtonEnabled();
}
});
violationtypeScrollpane.setViewportView(violationtypeTable);
restore.setEnabled(false);
restore.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
if (violationtypeTable.getSelectedRow() > -1) {
restoreActionPerformed();
} else {
ServiceProvider.getInstance().getControlService().showInfoMessage((ServiceProvider.getInstance().getLocaleService().getTranslatedString("RowNotSelected")));
}
}
});
restoreAll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
restoreAllActionPerformed();
}
});
apply.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
applyActionPerformed();
}
});
createLayout();
}
private void createLayout() {
GroupLayout violationtypeSeverityLayout = new GroupLayout(this);
GroupLayout.ParallelGroup horizontalButtonGroup = violationtypeSeverityLayout.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 = violationtypeSeverityLayout.createSequentialGroup();
horizontalPaneGroup.addComponent(categoryScrollpane);
horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);
horizontalPaneGroup.addComponent(violationtypeScrollpane);
horizontalPaneGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED);
horizontalPaneGroup.addGroup(horizontalButtonGroup);
horizontalPaneGroup.addContainerGap();
violationtypeSeverityLayout.setHorizontalGroup(horizontalPaneGroup);
GroupLayout.SequentialGroup verticalButtonGroup = violationtypeSeverityLayout.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 = violationtypeSeverityLayout.createParallelGroup(GroupLayout.Alignment.TRAILING);
verticalPaneGroup.addComponent(categoryScrollpane);
verticalPaneGroup.addComponent(violationtypeScrollpane);
verticalPaneGroup.addGroup(verticalButtonGroup);
violationtypeSeverityLayout.setVerticalGroup(verticalPaneGroup);
setLayout(violationtypeSeverityLayout);
}
void loadAfterChange() {
setText();
loadModel();
}
private void setText() {
category.setBorder(BorderFactory.createTitledBorder(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Category")));
restore.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("RestoreToDefault"));
restoreAll.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("RestoreAllToDefault"));
apply.setText(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Apply"));
}
void setSeverities(List<Severity> severities) {
this.severities = severities;
}
final void loadModel() {
String[] violationtypeModelHeaders = {ServiceProvider.getInstance().getLocaleService().getTranslatedString("Violationtype"), ServiceProvider.getInstance().getLocaleService().getTranslatedString("Severity")};
violationtypeModel = new ComboBoxTableModel(violationtypeModelHeaders, 0, severities);
violationtypeModel.setTypes(new Class[] {String.class, Severity.class});
violationtypeModel.setCanEdit(new Boolean[] {false, true});
violationtypeTable.setModel(violationtypeModel);
TableColumnModel tcm2 = violationtypeTable.getColumnModel();
tcm2.getColumn(1).setCellEditor(violationtypeModel.getEditor());
}
private void restoreActionPerformed() {
taskServiceImpl.restoreKeyToDefaultSeverity(language, ((DataLanguageHelper) violationtypeModel.getValueAt(violationtypeTable.getSelectedRow(), 0)).key);
categoryValueChanged();
}
private void restoreAllActionPerformed() {
taskServiceImpl.restoreAllKeysToDefaultSeverities(language);
categoryValueChanged();
ServiceProvider.getInstance().getControlService().showInfoMessage((ServiceProvider.getInstance().getLocaleService().getTranslatedString("AllRestored")));
}
private void applyActionPerformed() {
checkRestoreButtonEnabled();
updateViolationtypeSeverities();
}
private void categoryValueChanged() {
if (ServiceProvider.getInstance().getControlService().isGuiEnabled()) {
checkRestoreButtonEnabled();
loadViolationType(category.getSelectedValue().key);
}
}
private void updateViolationtypeSeverities() {
HashMap<String, Severity> map = new HashMap<String, Severity>();
for (int i = 0; i < violationtypeModel.getRowCount(); i++) {
String key = ((DataLanguageHelper) violationtypeModel.getValueAt(i, 0)).key;
map.put(key, (Severity) violationtypeModel.getValueAt(i, 1));
}
taskServiceImpl.updateSeverityPerType(map, language);
}
private void loadViolationTypeCategories() {
categoryModel.clear();
for (String categoryString : violationTypes.keySet()) {
categoryModel.addElement(new DataLanguageHelper(categoryString));
}
if (!categoryModel.isEmpty()) {
category.setSelectedIndex(0);
}
}
private void loadViolationType(String category) {
if (violationtypeModel != null) {
}
violationtypeModel.clear();
for (String categoryString : violationTypes.keySet()) {
if (categoryString.equals(category)) {
List<ViolationType> violationtypes = violationTypes.get(categoryString);
for (ViolationType violationtype : violationtypes) {
Severity severity;
try {
severity = taskServiceImpl.getSeverityFromKey(language, violationtype.getViolationTypeKey());
} catch (Exception e) {
logger.error(e);
severity = taskServiceImpl.getAllSeverities().get(0);
}
violationtypeModel.addRow(new Object[] {new DataLanguageHelper(violationtype.getViolationTypeKey()), severity});
}
}
}
violationtypeModel.checkValuesAreValid();
}
private void checkRestoreButtonEnabled() {
if (violationtypeTable.getSelectedRow() > -1) {
restore.setEnabled(true);
} else {
restore.setEnabled(false);
}
}
public void clearSelection() {
violationtypeTable.getSelectionModel().clearSelection();
category.getSelectionModel().clearSelection();
selectFirstIndexOfCategory();
}
public void selectFirstIndexOfCategory() {
category.setSelectedIndex(0);
}
}