Changeset 178


Ignore:
Timestamp:
Feb 16, 2012, 1:56:57 PM (5 years ago)
Author:
tim.te.beek@…
Message:

@JsonIgnore? listeners in ParserSettingsModel? to make exclusion explicit and allow for a getter
Provide a setter for settings in ParsingTableModel?
Pass ParsingTableModel? to all Panels and call tableModel.getSettings() rather than storing handle settings locally

Location:
trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/TableImportDialog.java

    r157 r178  
    4545
    4646                // Create panels
    47                 parseOptionsPanel = new ParseOptionsPanel(settings);
     47                parseOptionsPanel = new ParseOptionsPanel(tableModel);
    4848                attributeAssignmentPanel = new AttributeAssignmentPanel(tableModel);
    4949                previewPanel = new PreviewPanel(tableModel);
    50                 buttonPanel = new ButtonPanel(this, settings);
     50                buttonPanel = new ButtonPanel(this, tableModel);
    5151
    5252                // Layout components on page
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/models/ParserSettingsModel.java

    r175 r178  
    1515import lombok.AccessLevel;
    1616import lombok.Data;
    17 import lombok.Getter;
    1817import lombok.Setter;
    1918
     19import org.codehaus.jackson.annotate.JsonIgnore;
    2020import org.codehaus.jackson.map.annotate.JsonSerialize;
    2121
     
    2626// We need our setters to fireSettingsChanged(), so do not generate them automatically
    2727@Setter(AccessLevel.NONE)
     28@SuppressWarnings("unused")
    2829public class ParserSettingsModel implements Cloneable {
    2930        @JsonSerialize(as = File.class)
     
    5152
    5253        // Listener instances should remain private to this instance, and should not be accessible to the JSON serialization
    53         @Getter(value = AccessLevel.NONE)
     54        @JsonIgnore
    5455        List<ChangeListener>            listeners                               = new ArrayList<ChangeListener>();
    5556
     
    6263        }
    6364
    64         private void fireSettingsChanged() {
     65        public void fireSettingsChanged() {
    6566                ChangeEvent changeEvent = new ChangeEvent(this);
    6667                ChangeListener[] safeArray = listeners.toArray(new ChangeListener[listeners.size()]);
     
    7576         * @param clazz
    7677         */
    77         public void addInterpretation(final Integer columnIndex, final Class<Double> clazz) {
     78        public void addInterpretation(final Integer columnIndex, final Class<?> clazz) {
     79                // Assert clazz is of a valid type
     80                if (clazz != Double.class && clazz != Integer.class && clazz != Boolean.class)
     81                        // TODO Feedback
     82                        return;
     83
    7884                // Source, target and edge attributes can only be Strings in Cytoscape
    7985                if (columnIndex.equals(sourceIDAttr) || columnIndex.equals(edgeIDAttr) || columnIndex.equals(targetIDAttr)) {
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/models/ParsingTableModel.java

    r173 r178  
    1515
    1616import lombok.Getter;
     17import lombok.Setter;
    1718import au.com.bytecode.opencsv.CSVParser;
    1819import au.com.bytecode.opencsv.CSVReader;
     
    2021
    2122/**
    22  * A TableModel that parses an underlying datatable a ParserSettingsModels
     23 * A TableModel that parses an underlying data table file using ParserSettingsModel.
    2324 */
    2425public class ParsingTableModel extends AbstractTableModel implements ChangeListener {
    2526        @Getter
     27        @Setter
    2628        private ParserSettingsModel     settings;
    2729
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/panels/AttributeAssignmentPanel.java

    r174 r178  
    137137        public Object getElementAt(final int index) {
    138138                if (index == 0)
    139                         // Allow selection to be reset by using none as first option
     139                        // Allow selection to be reset by using none as a first option
    140140                        return null;
    141141                return tableModel.getColumnName(index - 1);
     
    144144        @Override
    145145        public void tableChanged(final TableModelEvent e) {
    146                 boolean headersChanged = e.getColumn() == TableModelEvent.ALL_COLUMNS //
    147                                 && e.getFirstRow() == TableModelEvent.HEADER_ROW;
    148                 if (headersChanged)
     146                // Only fire if headers changed to update the UI with the new values
     147                if (e.getColumn() == TableModelEvent.ALL_COLUMNS && e.getFirstRow() == TableModelEvent.HEADER_ROW)
    149148                        fireContentsChanged(this, 0, getSize() - 1);
    150149        }
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/panels/ButtonPanel.java

    r177 r178  
    33import java.awt.event.ActionEvent;
    44import java.io.File;
     5import java.util.List;
    56import java.util.concurrent.ExecutionException;
    67
     
    3031public class ButtonPanel extends JPanel {
    3132        JDialog                         parent;
    32         ParserSettingsModel     settings;
     33        ParsingTableModel       tableModel;
    3334
    3435        private JButton         saveButton;
     
    3940        JFileChooser            fileChooser     = new JFileChooser();
    4041
    41         public ButtonPanel(final JDialog _parent, final ParserSettingsModel _settings) {
     42        public ButtonPanel(final JDialog _parent, final ParsingTableModel tableModel) {
    4243                parent = _parent;
    43                 settings = _settings;
     44                this.tableModel = tableModel;
    4445
    4546                initComponents();
     
    4950        private void initComponents() {
    5051                // Save & Load buttons
    51                 saveButton = new JButton(new AbstractAction("Save") {
     52                saveButton = new JButton(new AbstractAction("Save profile") {
    5253                        @Override
    5354                        public void actionPerformed(final ActionEvent e) {
     
    5758                                // Only propagate if a file was selected, not if the dialog was canceled
    5859                                if (fileToSave != null)
    59                                         SettingsPersistence.saveSettings(fileToSave, settings);
    60                         }
    61                 });
    62                 loadButton = new JButton(new AbstractAction("Load") {
     60                                        SettingsPersistence.saveSettings(fileToSave, tableModel.getSettings());
     61                        }
     62                });
     63                loadButton = new JButton(new AbstractAction("Load profile") {
    6364                        @Override
    6465                        public void actionPerformed(final ActionEvent e) {
     
    6869                                // Only propagate if a file was selected, not if the dialog was canceled
    6970                                if (fileToLoad != null) {
     71                                        // Load settings
    7072                                        ParserSettingsModel loadedSettings = SettingsPersistence.loadSettings(fileToLoad);
    71                                         // TODO Assign or transfer attributes
    72                                         ;
     73
     74                                        // TODO Move (some of) this logic elsewhere, probably closer to the loading of settings
     75
     76                                        // Transfer listeners from old settings instance to new settings instance, removing them from old
     77                                        ParserSettingsModel oldSettings = tableModel.getSettings();
     78                                        List<ChangeListener> listeners = oldSettings.getListeners();
     79                                        ChangeListener[] safeArray = listeners.toArray(new ChangeListener[listeners.size()]);
     80                                        for (ChangeListener listener : safeArray) {
     81                                                oldSettings.removeChangeListener(listener);
     82                                                loadedSettings.addChangeListener(listener);
     83                                        }
     84
     85                                        // Set new settings on tableModel
     86                                        tableModel.setSettings(loadedSettings);
     87
     88                                        // Fire settings changed on loadedSettings to kick off UI updates
     89                                        loadedSettings.fireSettingsChanged();
     90                                        // TODO Ensure _all_ UI elements are updated by this one call
    7391                                }
    7492                        }
     
    84102                                        protected CyNetwork doInBackground() throws Exception {
    85103                                                // Clone the settings to prevent JTable from being updated
    86                                                 ParserSettingsModel settingsClone = settings.clone();
     104                                                ParserSettingsModel settingsClone = tableModel.getSettings().clone();
    87105
    88106                                                // Remove limit on the number of lines parsed
     
    122140                // Verify source and target attributes are set before allowing the user to import by using a custom ButtonModel
    123141                ImportPossibleButtonModel buttonModel = new ImportPossibleButtonModel();
    124                 settings.addChangeListener(buttonModel);
     142                tableModel.getSettings().addChangeListener(buttonModel);
    125143                importButton.setModel(buttonModel);
    126144                // Start out disabled
     
    143161                // Horizontal
    144162                SequentialGroup horizontalOkCancelGroup = layout.createSequentialGroup()//
    145                 .addComponent(saveButton).addPreferredGap(ComponentPlacement.RELATED).addComponent(loadButton)//
     163                .addComponent(loadButton).addPreferredGap(ComponentPlacement.RELATED).addComponent(saveButton)//
    146164                .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)//
    147165                .addComponent(importButton).addPreferredGap(ComponentPlacement.RELATED).addComponent(cancelButton);
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/panels/ParseOptionsPanel.java

    r152 r178  
    2727import javax.swing.text.SimpleAttributeSet;
    2828
    29 import nl.nbic.brs.piqc.tableimport.models.ParserSettingsModel;
     29import nl.nbic.brs.piqc.tableimport.models.ParsingTableModel;
    3030
    3131public class ParseOptionsPanel extends JPanel {
    32         ParserSettingsModel                             settings;
     32        ParsingTableModel                               tableModel;
    3333
    3434        ButtonGroup                                             delimiterGroup  = new ButtonGroup();
     
    4848        JTextField                                              commentTextField;
    4949
    50         public ParseOptionsPanel(final ParserSettingsModel _settings) {
    51                 settings = _settings;
     50        public ParseOptionsPanel(final ParsingTableModel tableModel) {
     51                this.tableModel = tableModel;
     52
     53                // TODO Add pretty border around this panel using the name in the title
    5254                setName("Parse options");
    5355
     
    7779
    7880                                        // Set delimiter to first (and hopefully only) character
    79                                         settings.setDelimiter(text.charAt(0));
     81                                        tableModel.getSettings().setDelimiter(text.charAt(0));
    8082                                }
    8183                        }
     
    8385
    8486                // Start from model, that updates the settings value it was initialized with
    85                 SpinnerNumberModel startFromModel = new SpinnerNumberModel(settings.getStartFrom(), 0, null, 1);
     87                SpinnerNumberModel startFromModel = new SpinnerNumberModel(tableModel.getSettings().getStartFrom(), 0, null, 1);
    8688                startFromModel.addChangeListener(new ChangeListener() {
    8789                        @Override
     
    8991                                SpinnerNumberModel spinnerNumderModel = (SpinnerNumberModel) e.getSource();
    9092                                int intValue = spinnerNumderModel.getNumber().intValue();
    91                                 settings.setStartFrom(intValue);
     93                                tableModel.getSettings().setStartFrom(intValue);
    9294                        }
    9395                });
     
    100102                        public void actionPerformed(final ActionEvent e) {
    101103                                JCheckBox sourceCheckbox = (JCheckBox) e.getSource();
    102                                 settings.setFirstRowHeader(sourceCheckbox.isSelected());
    103                         }
    104                 });
    105                 firstRowHeaderCheckbox.setSelected(settings.isFirstRowHeader());
     104                                tableModel.getSettings().setFirstRowHeader(sourceCheckbox.isSelected());
     105                        }
     106                });
     107                firstRowHeaderCheckbox.setSelected(tableModel.getSettings().isFirstRowHeader());
    106108
    107109                // Comment line character
     
    114116                                if (text.isEmpty())
    115117                                        // Update settings to not use a character
    116                                         settings.setComment(null);
     118                                        tableModel.getSettings().setComment(null);
    117119                                else
    118120                                        // Update settings to use new latest character
    119                                         settings.setComment(text.charAt(0));
     121                                        tableModel.getSettings().setComment(text.charAt(0));
    120122                        }
    121123                });
     
    196198
    197199                        // Make selection reflect settings
    198                         setSelected((settings.getDelimiter() == delimiter));
     200                        setSelected((tableModel.getSettings().getDelimiter() == delimiter));
    199201                }
    200202
     
    202204                public void actionPerformed(final ActionEvent e) {
    203205                        // Only propagate if value actually changes
    204                         settings.setDelimiter(delimiter);
     206                        tableModel.getSettings().setDelimiter(delimiter);
    205207
    206208                        // Remove value from delimiterTextField
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/panels/PreviewPanel.java

    r175 r178  
    2626
    2727public class PreviewPanel extends JPanel {
    28         ParserSettingsModel                     settings;
    2928        ParsingTableModel                       tableModel;
    3029
     
    4342        public PreviewPanel(final ParsingTableModel tableModel) {
    4443                this.tableModel = tableModel;
    45                 settings = tableModel.getSettings();
    4644
    4745                setName("Table preview");
     
    6260                                if (selectedFile != null)
    6361                                        // Invoke setTableFile, which should propagate correctly to the other UI elements
    64                                         settings.setTableFile(selectedFile);
     62                                        tableModel.getSettings().setTableFile(selectedFile);
    6563                        }
    6664                });
     
    7068                // Selected file label
    7169                selectedFileLabel = new SelectedFileLabel("No file selected");
    72                 settings.addChangeListener(selectedFileLabel);
     70                tableModel.getSettings().addChangeListener(selectedFileLabel);
    7371
    7472                // Lines to parse
    75                 linesToParseModel = new SpinnerNumberModel(settings.getLinesToParse(), 0, null, 1);
     73                linesToParseModel = new SpinnerNumberModel(tableModel.getSettings().getLinesToParse(), 0, null, 1);
    7674                linesToParseModel.addChangeListener(new ChangeListener() {
    7775                        @Override
     
    7977                                SpinnerNumberModel spinnerNumderModel = (SpinnerNumberModel) e.getSource();
    8078                                int intValue = spinnerNumderModel.getNumber().intValue();
    81                                 settings.setLinesToParse(intValue);
     79                                tableModel.getSettings().setLinesToParse(intValue);
    8280                        }
    8381                });
Note: See TracChangeset for help on using the changeset viewer.