Changeset 178

Show
Ignore:
Timestamp:
16-02-12 13:56:57 (2 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 modified

Legend:

Unmodified
Added
Removed
  • 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                }); 
  • 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