package husacct.validate.presentation.tableModels; import husacct.ServiceProvider; import husacct.common.locale.ILocaleService; import husacct.validate.domain.validation.Violation; import husacct.validate.task.TaskServiceImpl; import java.util.HashMap; import java.util.List; import java.util.Set; import javax.swing.table.AbstractTableModel; public class ViolationsPerRuleDataModel extends AbstractTableModel { private static final long serialVersionUID = 7993526243931581611L; private final TaskServiceImpl taskServiceImpl; private ILocaleService localeService; private Object[][] data; private Object[][] originalData; private HashMap<String, String> columnNames; private String[] columnKeys; Set<String> violatedRules; public ViolationsPerRuleDataModel(TaskServiceImpl taskServiceImpl) { this.taskServiceImpl = taskServiceImpl; localeService = ServiceProvider.getInstance().getLocaleService(); columnKeys = new String[] { "Id", "LogicalModuleFrom", "RuleType", "LogicalModuleTo", "NrOfViolations" }; columnNames = new HashMap<String, String>(); for (String key : columnKeys){ columnNames.put(key, localeService.getTranslatedString(key)); } setData(); } public void setData() { violatedRules = taskServiceImpl.getViolatedRules(); int nrOfRules; if (violatedRules != null) { nrOfRules = violatedRules.size(); } else { nrOfRules = 0; } data = new Object[nrOfRules][5]; originalData = new Object[nrOfRules][5]; nrOfRules = 0; for (String rule : violatedRules) { String[] ruleString = rule.split("::"); List<Violation> violationsPerRule = taskServiceImpl.getViolationsByRule(ruleString[0], ruleString[1], ruleString[2]); data [nrOfRules] [0] = nrOfRules + 1; data [nrOfRules] [1] = ruleString[0]; data [nrOfRules] [2] = ruleString[2]; if (ruleString[0].equals(ruleString[1]) && !ruleString[2].equals("IsOnlyAllowedToUse")){ data [nrOfRules] [3] = ""; } else { data [nrOfRules] [3] = ruleString[1]; } data [nrOfRules] [4] = violationsPerRule.size(); originalData [nrOfRules] [0] = nrOfRules + 1; originalData [nrOfRules] [1] = ruleString[0]; originalData [nrOfRules] [2] = ruleString[2]; originalData [nrOfRules] [3] = ruleString[1]; originalData [nrOfRules] [4] = violationsPerRule.size(); nrOfRules ++; } } @Override public int getColumnCount() { return columnNames.size(); } @Override public String getColumnName(int columnIndex) { return columnNames.get(columnKeys[columnIndex]); } @Override public int getRowCount() { return data.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { String columnKey = columnKeys[columnIndex]; if ((columnKey.equals(columnKeys[0])) || (columnKey.equals(columnKeys[1])) || (columnKey.equals(columnKeys[3])) || (columnKey.equals(columnKeys[4]))) return data[rowIndex][columnIndex]; else if (columnKey.equals(columnKeys[2])) return localeService.getTranslatedString((String) data[rowIndex][columnIndex]); else return null; } public Object getValueAtNotTranslated(int rowIndex, int columnIndex) { return originalData[rowIndex][columnIndex]; } //JTable uses this method to determine the default renderer/editor for each cell. @Override public Class getColumnClass(int c) { if ((c == 0) || (c == 4)) { return new Integer(5).getClass(); } else { String s = ""; return s.getClass(); } } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } }