package husacct.validate.presentation; import husacct.ServiceProvider; import husacct.common.help.presentation.HelpableJInternalFrame; import husacct.common.locale.ILocaleService; import husacct.validate.domain.validation.Severity; import husacct.validate.presentation.languageSeverityConfiguration.ConfigurationRuleTypeDTO; import husacct.validate.presentation.languageSeverityConfiguration.ConfigurationViolationTypeDTO; import husacct.validate.presentation.languageSeverityConfiguration.LanguageSeverityConfigurationPanel; import husacct.validate.presentation.tableModels.ColorTableModel; import husacct.validate.task.TaskServiceImpl; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import java.util.Observable; import java.util.Observer; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.LayoutStyle; import javax.swing.ListSelectionModel; import org.apache.log4j.Logger; public final class ConfigurationUI extends HelpableJInternalFrame implements Observer { private static final long serialVersionUID = 7721461596323704063L; private static Logger logger = Logger.getLogger(ConfigurationUI.class); private TaskServiceImpl taskServiceImpl; private ColorTableModel severityModel; private List<Severity> severities; private JButton cancel, applySeverity, restore; private JTabbedPane tabPanel; private JPanel severityNamePanel; private JScrollPane severityNameScrollPane; private JTable severityNameTable; private List<LanguageSeverityConfigurationPanel> tabs; private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService(); public ConfigurationUI(TaskServiceImpl ts) { tabs = new ArrayList<LanguageSeverityConfigurationPanel>(); taskServiceImpl = ts; taskServiceImpl.subscribe(this); initComponents(); loadAfterChange(); } private void initComponents() { tabPanel = new JTabbedPane(); severityNamePanel = new JPanel(); severityNameScrollPane = new JScrollPane(); severityNameTable = new JTable(); severityNameTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); applySeverity = new JButton(); restore = new JButton(); cancel = new JButton(); setClosable(true); setIconifiable(true); setMaximizable(true); setResizable(true); severityNameTable.setFillsViewportHeight(true); severityNameTable.getTableHeader().setReorderingAllowed(false); severityNameScrollPane.setViewportView(severityNameTable); tabPanel.addTab(localeService.getTranslatedString("SeverityConfiguration"), severityNamePanel); applySeverity.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { applySeverityActionPerformed(); } }); restore.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { restore(); } }); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { cancelActionPerformed(); } }); createSeverityPanelLayout(); createRootLayout(); } private void createSeverityPanelLayout() { GroupLayout severityNamePanelLayout = new GroupLayout(severityNamePanel); GroupLayout.ParallelGroup horizontalButtonGroup = severityNamePanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false); horizontalButtonGroup.addComponent(restore, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); horizontalButtonGroup.addComponent(applySeverity, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); GroupLayout.ParallelGroup severityNameGroup = severityNamePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING); severityNameGroup.addComponent(severityNameScrollPane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); GroupLayout.SequentialGroup horizontalPaneGroup = severityNamePanelLayout.createSequentialGroup(); horizontalPaneGroup.addGroup(severityNameGroup); horizontalPaneGroup.addContainerGap(); horizontalPaneGroup.addGroup(horizontalButtonGroup); severityNamePanelLayout.setHorizontalGroup(horizontalPaneGroup); GroupLayout.SequentialGroup verticalButtonGroup = severityNamePanelLayout.createSequentialGroup(); verticalButtonGroup.addContainerGap(); verticalButtonGroup.addComponent(restore); verticalButtonGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); verticalButtonGroup.addComponent(applySeverity); verticalButtonGroup.addContainerGap(); GroupLayout.ParallelGroup verticalPaneGroup = severityNamePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING); verticalPaneGroup.addComponent(severityNameScrollPane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE); verticalPaneGroup.addGroup(verticalButtonGroup); severityNamePanelLayout.setVerticalGroup(verticalPaneGroup); severityNamePanel.setLayout(severityNamePanelLayout); } private void createRootLayout() { GroupLayout baseLayout = new GroupLayout(getRootPane()); GroupLayout.ParallelGroup horizontalGroup = baseLayout.createParallelGroup(GroupLayout.Alignment.LEADING); horizontalGroup.addComponent(tabPanel); horizontalGroup.addComponent(cancel); baseLayout.setHorizontalGroup(horizontalGroup); GroupLayout.SequentialGroup verticalGroup = baseLayout.createSequentialGroup(); verticalGroup.addComponent(tabPanel); verticalGroup.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED); verticalGroup.addComponent(cancel); verticalGroup.addGap(16, 16, 16); baseLayout.setVerticalGroup(verticalGroup); getRootPane().setLayout(baseLayout); } @Override public void update(Observable o, Object arg) { loadAfterChange(); } public void loadAfterChange() { setText(); loadModels(); loadSeverity(); setLanguageTabsLanguage(); } private void applySeverityActionPerformed() { for (int i = 0; i < severityModel.getRowCount(); i++) { try { Severity severity = severities.get(i); severity.setColor((Color) severityModel.getValueAt(i, 1)); severities.set(i, severity); } catch (IndexOutOfBoundsException e) { severities.add(new Severity((String) severityModel.getValueAt(i, 0), (Color) severityModel.getValueAt(i, 1))); } } taskServiceImpl.addSeverities(severities); loadSeverity(); reloadTableModels(); clearSelections(); } private void reloadTableModels() { for (LanguageSeverityConfigurationPanel s : tabs) { s.reloadTableModel(); } } private void clearSelections() { for (LanguageSeverityConfigurationPanel s : tabs) { s.clearSelection(); s.selectFirstCategory(); } } private void cancelActionPerformed() { dispose(); } private void restore() { taskServiceImpl.restoreSeveritiesToDefault(); loadSeverity(); } public void setText() { setTitle(localeService.getTranslatedString("ValidateConfigurationTitle")); applySeverity.setText(localeService.getTranslatedString("Apply")); restore.setText(localeService.getTranslatedString("RestoreToDefault")); cancel.setText(localeService.getTranslatedString("Cancel")); } private void loadModels() { severityModel = new ColorTableModel(); severityNameTable.setModel(severityModel); severityModel.setColorEditor(severityNameTable, 1); } private void loadSeverity() { clearModel(severityModel); severities = taskServiceImpl.getAllSeverities(); for (Severity severity : severities) { severityModel.addRow(new Object[] {severity.getSeverityKeyTranslated(), severity.getColor()}); } } private void clearModel(ColorTableModel model) { while (0 < model.getRowCount()) { model.removeRow(0); } } private void setLanguageTabsLanguage() { if (tabPanel.getTabCount() == 1) { loadLanguageTabs(); return; } for (LanguageSeverityConfigurationPanel panel : tabs) { panel.loadAfterChange(); } } private void loadLanguageTabs() { for (String language : taskServiceImpl.getAvailableLanguages()) { ConfigurationRuleTypeDTO configurationRuleTypeDTO = new ConfigurationRuleTypeDTO(language, severities, taskServiceImpl.getRuletypes(language)); ConfigurationViolationTypeDTO configurationViolationTypeDTO = new ConfigurationViolationTypeDTO(language, severities, taskServiceImpl.getViolationTypes(language)); LanguageSeverityConfigurationPanel lcp = new LanguageSeverityConfigurationPanel(configurationRuleTypeDTO, configurationViolationTypeDTO, taskServiceImpl); tabPanel.addTab(language, lcp); tabs.add(lcp); } if (tabPanel.getTabCount() == 1) { logger.error("No programming language set"); tabPanel.addTab(localeService.getTranslatedString("NoProgrammingLanguageAvailable"), new JPanel()); } } }