package husacct.analyse.presentation.reconstruct.approaches;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import husacct.ServiceProvider;
import husacct.analyse.presentation.reconstruct.parameter.ReconstructArchitectureParameterPanel;
import husacct.analyse.task.reconstruct.dto.ReconstructArchitectureDTO;
import husacct.analyse.task.reconstruct.parameters.ReconstructArchitectureParameterDTO;
import husacct.common.locale.ILocaleService;
public class ApproachesTableSelectionListener implements ListSelectionListener {
private final ILocaleService localService = ServiceProvider.getInstance().getLocaleService();
private JTable tableApproaches;
private ApproachesJPanel approachesJPanel;
private JTable allParameterTable;
public ApproachesTableSelectionListener (JTable tableApproaches, ApproachesJPanel approachesJPanel, JTable allParameterTable){
this.tableApproaches = tableApproaches;
this.approachesJPanel = approachesJPanel;
this.allParameterTable = allParameterTable;
}
@Override
public void valueChanged(ListSelectionEvent e) {
int selectedRow = tableApproaches.getSelectedRow();
if (!e.getValueIsAdjusting() && selectedRow >= 0) {
ReconstructArchitectureDTO dto = new ReconstructArchitectureDTO();
String algorithmId = (String) tableApproaches.getModel().getValueAt(selectedRow, 0);
dto = approachesJPanel.getReconstructArchitectureDTO(algorithmId);
HashMap<String, Object> rowData = getParameters(dto);
DefaultTableModel defaultTableModel = new DefaultTableModel();
defaultTableModel.addColumn(localService.getTranslatedString("Parameter"));
defaultTableModel.addColumn(localService.getTranslatedString("Value"));
Iterator<Entry<String, Object>> iterator = rowData.entrySet().iterator();
int i = 0;
while(iterator.hasNext()){
Object[] empty = {"", ""};
defaultTableModel.addRow(empty);
HashMap.Entry<String, Object> entry = iterator.next();
Object[] temp = {entry.getKey(), entry.getValue()};
defaultTableModel.setValueAt(temp[0], i, 0);
defaultTableModel.setValueAt(temp[1], i, 1);
i++;
}
allParameterTable.setModel(defaultTableModel);
}
}
private HashMap<String, Object> getParameters(ReconstructArchitectureDTO dto){
HashMap<String, Object> parameterRows = new HashMap<>();
for(ReconstructArchitectureParameterDTO parameterDTO : dto.parameterDTOs){
Object value = ReconstructArchitectureParameterPanel.getValueFromReconstructArchitectureDTO(parameterDTO.parameterConstant, dto);
if(value != null && !value.toString().isEmpty()){
parameterRows.put(parameterDTO.parameterConstant, value);
} else{
parameterRows.put(parameterDTO.parameterConstant, parameterDTO.defaultValue);
}
}
return parameterRows;
}
}