package nl.fontys.sofa.limo.view.node.property.editor; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.beans.PropertyEditorSupport; import java.util.List; import javax.swing.DefaultCellEditor; import javax.swing.JTextField; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import nl.fontys.sofa.limo.domain.component.procedure.Procedure; import nl.fontys.sofa.limo.domain.component.procedure.TimeType; import nl.fontys.sofa.limo.view.custom.procedure.StandardProcedureComponent; import nl.fontys.sofa.limo.view.util.LIMOResourceBundle; /** * This class implements property editor for procedures. * * @author Matthias Brück */ public class StandardProcedurePropertyEditor extends PropertyEditorSupport { @Override public String getAsText() { List<Procedure> procedures = (List<Procedure>) getValue(); if (procedures == null || procedures.isEmpty()) { return LIMOResourceBundle.getString("PROCEDURES"); } StringBuilder name = new StringBuilder(); for (Procedure prod : procedures) { if (name.toString().length() == 0) { name.append(prod.getName()); } else { name.append(" - " + prod.getName()); } } return name.toString(); } @Override public void setAsText(String s) { } @Override public Component getCustomEditor() { return new CustomEditor(); } @Override public boolean supportsCustomEditor() { return true; } /** * This is the custom editor for editing the procedure property. */ private class CustomEditor extends StandardProcedureComponent implements ItemListener, CellEditorListener { private JTextField name; /** * Creates a new instance of this custom editor. */ public CustomEditor() { super(); List<Procedure> procedures = (List<Procedure>) getValue(); if (procedures != null) { setProcedureTable(procedures); } procedureCheckbox.addItemListener(this); timeTypesCheckbox.addItemListener(this); name = new JTextField(); DefaultCellEditor nameEditor = new DefaultCellEditor(name); nameEditor.addCellEditorListener(this); table.getColumnModel().getColumn(0).setCellEditor(nameEditor); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(deleteButton)) { int rowToDelete = table.getSelectedRow(); if (rowToDelete > -1 && rowToDelete < getActiveTableState().size()) { deleteProcedure(rowToDelete); List<Procedure> procedures = getActiveTableState(); setValue(procedures); } } else if (e.getSource().equals(addButton)) { addProcedure(); List<Procedure> procedures = getActiveTableState(); setValue(procedures); } } @Override public void mouseClicked(MouseEvent e) { if (e.getSource().equals(table)) { if (e.getClickCount() > 1) { editProcedure(); List<Procedure> procedures = getActiveTableState(); setValue(procedures); } } } @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { if (table.getSelectedRow() >= 0 && table.getSelectedRow() < table.getModel().getRowCount()) { List<Procedure> procedures = getActiveTableState(); if (e.getSource().equals(procedureCheckbox)) { procedures.get(table.getSelectedRow()).setCategory((String) procedureCheckbox.getSelectedItem().toString()); } else if (e.getSource().equals(timeTypesCheckbox)) { procedures.get(table.getSelectedRow()).setTimeType((TimeType) timeTypesCheckbox.getSelectedItem()); } setProcedureTable(procedures); setValue(procedures); procedureCheckbox.addItemListener(this); timeTypesCheckbox.addItemListener(this); } } } @Override public void editingStopped(ChangeEvent e) { List<Procedure> procedures = getActiveTableState(); setValue(procedures); } @Override public void editingCanceled(ChangeEvent e) { /** not used**/ } } }