package husacct.analyse.presentation.reconstruct; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.WindowConstants; import javax.swing.border.TitledBorder; import husacct.ServiceProvider; import husacct.analyse.presentation.reconstruct.approaches.ApproachesJPanel; import husacct.analyse.presentation.reconstruct.parameter.ReconstructArchitectureParameterPanel; import husacct.analyse.task.reconstruct.dto.ReconstructArchitectureDTO; import husacct.analyse.task.reconstruct.parameters.ReconstructArchitectureParameterDTO; import husacct.common.help.presentation.HelpableJDialog; import husacct.common.locale.ILocaleService; import husacct.control.ControlServiceImpl; public class EditApproachFrame extends HelpableJDialog implements ActionListener{ //private final Logger logger = Logger.getLogger(ApproachesSettingsFrame.class); private static final long serialVersionUID = 1L; private final ILocaleService localService = ServiceProvider.getInstance().getLocaleService(); private ReconstructArchitectureDTO dto; private JPanel mainPanel; private JButton applyButton, cancelButton; private ApproachesJPanel approachesJPanel; private HashMap<String, ReconstructArchitectureParameterPanel> parameterDTOPanels = new HashMap<String, ReconstructArchitectureParameterPanel>(); public EditApproachFrame(ReconstructArchitectureDTO dto, ApproachesJPanel allApJp){ super(((ControlServiceImpl) ServiceProvider.getInstance().getControlService()).getMainController().getMainGui(), true); this.dto = dto; this.approachesJPanel = allApJp; initUI(); } public void initUI(){ String editApproach = getTranslation("EditApproach"); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setTitle(editApproach); buildMainPanel(); getContentPane().add(mainPanel, BorderLayout.CENTER); // Determine size and location Dimension minimumSize = new Dimension(560, 280); Container c = getParent(); if (c != null) { int paneWidth = getParent().getWidth(); setBounds(paneWidth - minimumSize.width -10, 45, minimumSize.width, minimumSize.height); } else { setBounds(0, 0, minimumSize.width, minimumSize.height); } // Show dialogue setVisible(true); pack(); } private void buildMainPanel(){ mainPanel = new JPanel(new BorderLayout()); mainPanel.add(buildApproachPanel(), BorderLayout.NORTH); mainPanel.add(buildParameterPanel(), BorderLayout.CENTER); mainPanel.add(buildButtonPanel(), BorderLayout.SOUTH); } private JPanel buildApproachPanel(){ JPanel approachLabelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); approachLabelPanel.setBorder(new TitledBorder(localService.getTranslatedString("Approach"))); JLabel approachLabelLabel = new JLabel(getTranslation(dto.approachId)); approachLabelPanel.add(approachLabelLabel); return approachLabelPanel; } private JScrollPane buildParameterPanel() { JPanel parameterListPanel = new JPanel(); parameterListPanel.setLayout(new BoxLayout(parameterListPanel, BoxLayout.Y_AXIS)); for (ReconstructArchitectureParameterDTO parameterDTO : dto.parameterDTOs){ ReconstructArchitectureParameterPanel parameterPanel = ReconstructArchitectureParameterPanel.getParameterPanel(parameterDTO, dto); parameterDTOPanels.put(parameterDTO.parameterConstant, parameterPanel); JPanel panel = parameterPanel.createPanel(); parameterListPanel.add(panel); } JScrollPane parameterListScrollPane = new JScrollPane(parameterListPanel); parameterListScrollPane.setBorder(new TitledBorder(localService.getTranslatedString("Parameters"))); return parameterListScrollPane; } private JPanel buildButtonPanel(){ JPanel buttonPanel = new JPanel(new FlowLayout()); buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 50, 5, 50)); String applyTranslation = localService.getTranslatedString("Apply"); applyButton = new JButton(applyTranslation); buttonPanel.add(applyButton); applyButton.setPreferredSize(new Dimension(140, 40)); applyButton.addActionListener(this); String cancel = localService.getTranslatedString("CancelButton"); cancelButton = new JButton(cancel); buttonPanel.add(cancelButton); cancelButton.setPreferredSize(new Dimension(140, 40)); cancelButton.addActionListener(this); return buttonPanel; } private String getTranslation(String translationKey){ ILocaleService localeService = ServiceProvider.getInstance().getLocaleService(); return localeService.getTranslatedString(translationKey); } @Override public void actionPerformed(ActionEvent event) { if (event.getSource() == applyButton) { setParameterValues(); resetParameterTable(); dispose(); } else if(event.getSource() == cancelButton){ dispose(); } } private void resetParameterTable() { int selectedRow = approachesJPanel.approachesTable.getSelectedRow(); int differentRow = selectedRow > 1 ? selectedRow -1 : selectedRow +1; approachesJPanel.approachesTable.setRowSelectionInterval(differentRow, differentRow); approachesJPanel.approachesTable.setRowSelectionInterval(selectedRow, selectedRow); } private void setParameterValues() { for (ReconstructArchitectureParameterDTO parameterDTO : dto.parameterDTOs){ Object value = getParameterPanelValue(parameterDTO.parameterConstant); dto = ReconstructArchitectureParameterPanel.setValueOfReconstructArchitectureDTO(parameterDTO.parameterConstant, dto, value); } approachesJPanel.updateReconstructArchitectureDTO(dto); } private Object getParameterPanelValue(String parameterConstant){ ReconstructArchitectureParameterPanel parameterPanel = parameterDTOPanels.get(parameterConstant); Object parameterPanelValue = parameterPanel.getValue(); return parameterPanelValue; } }