package husacct.validate.presentation;
import husacct.ServiceProvider;
import husacct.common.dto.RuleTypeDTO;
import husacct.common.enums.ModuleTypes;
import husacct.common.locale.ILocaleService;
import java.util.HashMap;
import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
public class ManageDefaultRulesPanel extends JPanel {
private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService();
private static final long serialVersionUID = 1L;
private final DefaultListModel<DataLanguageHelper> rtsComponentModel;
private JList<DataLanguageHelper> components;
private JScrollPane componentScrollpane, rulesScrollpane;
private JTable ruleTable;
private DefaultTableModel tableModel;
private RuleTypeDTO[] allowedRules, currentDefaultRules;
private String[] componentList = {"Component", "ExternalLibrary", "Facade", "Layer", "SubSystem"};
private HashMap<Integer, String> allowedRulesMap;
// ==================================
// Init panel
// ==================================
public ManageDefaultRulesPanel(){
// ===== Component selector =====
componentScrollpane = new JScrollPane();
components = new JList<DataLanguageHelper>();
rtsComponentModel = new DefaultListModel<DataLanguageHelper>();
for(ModuleTypes modules : ModuleTypes.values())
rtsComponentModel.addElement(new DataLanguageHelper(modules.toString()));
ListSelectionListener listSelectionListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent listSelectionEvent) {
if(listSelectionEvent.getValueIsAdjusting()) loadTable(components.getSelectedIndex());
}
};
components.addListSelectionListener(listSelectionListener);
components.setModel(rtsComponentModel);
components.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
componentScrollpane.setViewportView(components);
// ===== Rule checkbox table =====
tableModel = new DefaultTableModel();
tableModel.addColumn(localeService.getTranslatedString("Rule"));
tableModel.addColumn(localeService.getTranslatedString("RuleIsDefault"));
tableModel.addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
// int gc = e.getColumn();
if(e.getColumn() == 1){
String moduleType = componentList[components.getSelectedIndex()];
String ruleTypeKey = allowedRulesMap.get(e.getFirstRow());
Object stringValue = tableModel.getValueAt(e.getFirstRow(), 1);
// int row = e.getFirstRow();
boolean value = Boolean.parseBoolean(stringValue.toString());
System.out.println("ValidateService -> SetDefaultRule(" + componentList[components.getSelectedIndex()] + ", " + allowedRulesMap.get(e.getFirstRow()) + ", " + tableModel.getValueAt(e.getFirstRow(), 1) + ")");
ServiceProvider.getInstance().getValidateService().setDefaultRuleTypeOfModule(moduleType, ruleTypeKey, value);
}
}
});
ruleTable = new JTable(tableModel){
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int column) {
return column == 1;
}
};
ruleTable.getColumnModel().getColumn(1).setMaxWidth(100);
ruleTable.getColumnModel().getColumn(1).setMinWidth(100);
rulesScrollpane = new JScrollPane(ruleTable);
// ===== Create layout =====
GroupLayout layout = new GroupLayout(this);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addComponent(componentScrollpane, 200, 200, 200)
.addComponent(rulesScrollpane)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(
layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(componentScrollpane)
.addComponent(rulesScrollpane)
)
);
setLayout(layout);
}
private void loadTable(int listItem){
tableModel.setRowCount(0);
allowedRules = ServiceProvider.getInstance().getValidateService().getAllowedRuleTypesOfModule(componentList[listItem]);
currentDefaultRules = ServiceProvider.getInstance().getValidateService().getDefaultRuleTypesOfModule(componentList[listItem]);
allowedRulesMap = new HashMap<Integer, String>();
int count = 0;
for(RuleTypeDTO allowedRule : allowedRules){
String curRule = allowedRule.key;
String curRuleTranslated = localeService.getTranslatedString(curRule);
allowedRulesMap.put(count, curRuleTranslated);
count++;
Boolean isDefault = false;
for(RuleTypeDTO defaultRule : currentDefaultRules)
if(defaultRule.key.equals(curRule))
isDefault = true;
tableModel.addRow(new Object[]{curRuleTranslated, isDefault});
}
}
}