Changeset 234


Ignore:
Timestamp:
Mar 8, 2012, 6:10:12 PM (5 years ago)
Author:
tim.te.beek@…
Message:

Refactor in the use of InteractionAccessors?

File:
1 edited

Legend:

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

    r232 r234  
    3232import nl.nbic.brs.piqc.PIQCPlugin;
    3333import nl.nbic.brs.piqc.tableimport.models.ParsingTableModel;
     34import nl.nbic.brs.piqc.tableimport.views.AttributeAccessor.EdgeAttributeAccessor;
     35import nl.nbic.brs.piqc.tableimport.views.AttributeAccessor.SourceAttributeAccessor;
     36import nl.nbic.brs.piqc.tableimport.views.AttributeAccessor.TargetAttributeAccessor;
     37import nl.nbic.brs.piqc.tableimport.views.InteractionAccessor.EdgeInteractionAccessor;
     38import nl.nbic.brs.piqc.tableimport.views.InteractionAccessor.SourceInteractionAccessor;
     39import nl.nbic.brs.piqc.tableimport.views.InteractionAccessor.TargetInteractionAccessor;
    3440
    3541/**
     
    7480        private void initComponents() {
    7581                // Source interaction
     82                InteractionAccessor sourceInteractionAccessor = new SourceInteractionAccessor(tableModel);
    7683                sourceInteractionLabel = new JLabel("Source interaction");
    77                 sourceInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel) {
    78                         @Override
    79                         public String getSelectedItem() {
    80                                 Integer attrIndex = tableModel.getSettings().getSourceInteraction();
    81                                 if (attrIndex == null)
    82                                         return null;
    83                                 return tableModel.getColumnName(attrIndex);
    84                         }
    85 
    86                         @Override
    87                         public void setSelectedItem(final Object anItem) {
    88                                 Integer index = null;
    89                                 if (anItem != null)
    90                                         index = tableModel.getIndexForColumnName((String) anItem);
    91                                 tableModel.getSettings().setSourceInteraction(index);
    92                         }
    93                 });
     84                sourceInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel, sourceInteractionAccessor));
    9485                sourceInteractionCB.setBorder(BorderFactory.createLineBorder(new Color(255, 192, 192), 3));
    9586
     
    10697
    10798                // Edge interaction
     99                InteractionAccessor edgeInteractionAccessor = new EdgeInteractionAccessor(tableModel);
    108100                edgeInteractionLabel = new JLabel("Interaction attribute");
    109                 edgeInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel) {
    110                         @Override
    111                         public String getSelectedItem() {
    112                                 Integer attrIndex = tableModel.getSettings().getEdgeInteraction();
    113                                 if (attrIndex == null)
    114                                         return null;
    115                                 return tableModel.getColumnName(attrIndex);
    116                         }
    117 
    118                         @Override
    119                         public void setSelectedItem(final Object anItem) {
    120                                 Integer index = null;
    121                                 if (anItem != null)
    122                                         index = tableModel.getIndexForColumnName((String) anItem);
    123                                 tableModel.getSettings().setEdgeInteraction(index);
    124                         }
     101                edgeInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel, edgeInteractionAccessor) {
     102                        // TODO Handle the special negative cases for Edge Interactions
    125103                });
    126104                edgeInteractionCB.setBorder(BorderFactory.createLineBorder(new Color(192, 255, 192), 3));
     
    138116
    139117                // Target interaction
     118                InteractionAccessor targetInteractionAccessor = new TargetInteractionAccessor(tableModel);
    140119                targetInteractionLabel = new JLabel("Target interaction");
    141                 targetInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel) {
    142                         @Override
    143                         public String getSelectedItem() {
    144                                 Integer attrIndex = tableModel.getSettings().getTargetInteraction();
    145                                 if (attrIndex == null)
    146                                         return null;
    147                                 return tableModel.getColumnName(attrIndex);
    148                         }
    149 
    150                         @Override
    151                         public void setSelectedItem(final Object anItem) {
    152                                 Integer index = null;
    153                                 if (anItem != null)
    154                                         index = tableModel.getIndexForColumnName((String) anItem);
    155                                 tableModel.getSettings().setTargetInteraction(index);
    156                         }
    157                 });
     120                targetInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel, targetInteractionAccessor));
    158121                targetInteractionCB.setBorder(BorderFactory.createLineBorder(new Color(192, 192, 255), 3));
    159122
     
    253216 * This class allows us to use the headers from the tableModel as selection options in our combobox, even when updated.
    254217 */
    255 abstract class InteractionForwardingComboboxModel extends AbstractListModel implements ComboBoxModel, TableModelListener {
    256         protected ParsingTableModel     tableModel;
    257 
    258         public InteractionForwardingComboboxModel(final ParsingTableModel tableModel) {
     218class InteractionForwardingComboboxModel extends AbstractListModel implements ComboBoxModel, TableModelListener {
     219        protected ParsingTableModel                     tableModel;
     220        private final InteractionAccessor       interactionAccessor;
     221
     222        public InteractionForwardingComboboxModel(final ParsingTableModel tableModel, final InteractionAccessor interactionAccessor) {
    259223                this.tableModel = tableModel;
     224                this.interactionAccessor = interactionAccessor;
    260225
    261226                // Add ourself as listener to tableModel, to get notified when table columns change
    262227                tableModel.addTableModelListener(this);
     228        }
     229
     230        @Override
     231        public String getSelectedItem() {
     232                Integer attrIndex = interactionAccessor.getInteraction();
     233                if (attrIndex == null)
     234                        return null;
     235                return tableModel.getColumnName(attrIndex);
     236        }
     237
     238        @Override
     239        public void setSelectedItem(final Object anItem) {
     240                Integer index = null;
     241                if (anItem != null)
     242                        index = tableModel.getIndexForColumnName((String) anItem);
     243                interactionAccessor.setInteraction(index);
    263244        }
    264245
     
    284265}
    285266
     267/**
     268 * This class allows us to use the tableModel column names to display the additional attribues.
     269 */
    286270class AttributesListModel extends AbstractListModel implements ChangeListener, TableModelListener {
    287271        private final ParsingTableModel tableModel;
     
    354338                attributesList = _attributesList;
    355339                attributeAccessor = _attributeAccessor;
    356                 if (addNotRemove) {
    357                         // Add mode
    358                         setAction(new AbstractAction("", upIcon) {
    359                                 @Override
    360                                 public void actionPerformed(final ActionEvent e) {
    361                                         // Add selected columns to the attributes set
    362                                         SortedSet<Integer> additionalAttributes = attributeAccessor.getAttributes();
    363                                         int[] selectedColumns = tableModel.getSelectedColumns();
    364                                         for (int column : selectedColumns)
    365                                                 additionalAttributes.add(column);
    366 
    367                                         // Set the same collection back in settings so fireSettingsChanged is called to update UI elements
    368                                         attributeAccessor.setAttributes(additionalAttributes);
    369 
    370                                         // XXX We can not restore selected columns without access to a SelectionModel, which would also
    371                                         // relieve us of having to store column selection in the tableModel, which is an ugly hack
    372                                         // for (int column : selectedColumns){
    373                                         // table.getColumnModel().getSelectionModel().addSelectionInterval(column, column);}
     340                if (addNotRemove)
     341                        initAdd();
     342                else
     343                        initRemove();
     344        }
     345
     346        private void initAdd() {
     347                setAction(new AbstractAction("", upIcon) {
     348                        @Override
     349                        public void actionPerformed(final ActionEvent e) {
     350                                // Add selected columns to the attributes set
     351                                SortedSet<Integer> additionalAttributes = attributeAccessor.getAttributes();
     352                                int[] selectedColumns = tableModel.getSelectedColumns();
     353                                for (int column : selectedColumns)
     354                                        additionalAttributes.add(column);
     355
     356                                // Set the same collection back in settings so fireSettingsChanged is called to update UI elements
     357                                attributeAccessor.setAttributes(additionalAttributes);
     358
     359                                // XXX We can not restore selected columns without access to a SelectionModel, which would also
     360                                // relieve us of having to store column selection in the tableModel, which is an ugly hack
     361                                // for (int column : selectedColumns){
     362                                // table.getColumnModel().getSelectionModel().addSelectionInterval(column, column);}
     363                        }
     364                });
     365                setToolTipText(String.format("Add below selected columns to %1$s Attributes", attributeAccessor.getCollectionName()));
     366        }
     367
     368        private void initRemove() {
     369                setAction(new AbstractAction("", downIcon) {
     370                        @Override
     371                        public void actionPerformed(final ActionEvent e) {
     372                                // Remove selected columns from the attributes set
     373                                SortedSet<Integer> additionalAttributes = attributeAccessor.getAttributes();
     374                                Object[] selectedNames = attributesList.getSelectedValues();
     375                                for (Object columnName : selectedNames) {
     376                                        // Reverse lookup of indices for selected column names
     377                                        int columnIndex = tableModel.getIndexForColumnName((String) columnName);
     378                                        additionalAttributes.remove(columnIndex);
    374379                                }
    375                         });
    376                         setToolTipText(String.format("Add below selected columns to %1$s Attributes", attributeAccessor.getCollectionName()));
    377                 }
    378                 else {
    379                         // Remove mode
    380                         setAction(new AbstractAction("", downIcon) {
    381                                 @Override
    382                                 public void actionPerformed(final ActionEvent e) {
    383                                         // Remove selected columns from the attributes set
    384                                         SortedSet<Integer> additionalAttributes = attributeAccessor.getAttributes();
    385                                         Object[] selectedNames = attributesList.getSelectedValues();
    386                                         for (Object columnName : selectedNames) {
    387                                                 // Reverse lookup of indices for selected column names
    388                                                 int columnIndex = tableModel.getIndexForColumnName((String) columnName);
    389                                                 additionalAttributes.remove(columnIndex);
    390                                         }
    391 
    392                                         // Set the same collection back in settings so fireSettingsChanged is called to update UI elements
    393                                         attributeAccessor.setAttributes(additionalAttributes);
    394                                 }
    395                         });
    396                         setToolTipText(String.format("Remove above selected columns from %1$s Attributes", attributeAccessor.getCollectionName()));
     380
     381                                // Set the same collection back in settings so fireSettingsChanged is called to update UI elements
     382                                attributeAccessor.setAttributes(additionalAttributes);
     383                        }
     384                });
     385                setToolTipText(String.format("Remove above selected columns from %1$s Attributes", attributeAccessor.getCollectionName()));
     386        }
     387}
     388
     389abstract class InteractionAccessor {
     390        protected final ParsingTableModel       tableModel;
     391
     392        public InteractionAccessor(final ParsingTableModel tableModel) {
     393                this.tableModel = tableModel;
     394        }
     395
     396        abstract Integer getInteraction();
     397
     398        abstract void setInteraction(final Integer column);
     399
     400        static class SourceInteractionAccessor extends InteractionAccessor {
     401                public SourceInteractionAccessor(final ParsingTableModel tableModel) {
     402                        super(tableModel);
     403                }
     404
     405                @Override
     406                Integer getInteraction() {
     407                        return tableModel.getSettings().getSourceInteraction();
     408                }
     409
     410                @Override
     411                void setInteraction(final Integer column) {
     412                        tableModel.getSettings().setSourceInteraction(column);
     413                }
     414        }
     415
     416        static class EdgeInteractionAccessor extends InteractionAccessor {
     417                public EdgeInteractionAccessor(final ParsingTableModel tableModel) {
     418                        super(tableModel);
     419                }
     420
     421                @Override
     422                Integer getInteraction() {
     423                        return tableModel.getSettings().getEdgeInteraction();
     424                }
     425
     426                @Override
     427                void setInteraction(final Integer column) {
     428                        tableModel.getSettings().setEdgeInteraction(column);
     429                }
     430        }
     431
     432        static class TargetInteractionAccessor extends InteractionAccessor {
     433                public TargetInteractionAccessor(final ParsingTableModel tableModel) {
     434                        super(tableModel);
     435                }
     436
     437                @Override
     438                Integer getInteraction() {
     439                        return tableModel.getSettings().getTargetInteraction();
     440                }
     441
     442                @Override
     443                void setInteraction(final Integer column) {
     444                        tableModel.getSettings().setTargetInteraction(column);
    397445                }
    398446        }
     
    412460
    413461        abstract void setAttributes(final SortedSet<Integer> attributes);
     462
     463        static class SourceAttributeAccessor extends AttributeAccessor {
     464                public SourceAttributeAccessor(final ParsingTableModel tableModel) {
     465                        super(tableModel, "Source");
     466                }
     467
     468                @Override
     469                public SortedSet<Integer> getAttributes() {
     470                        return tableModel.getSettings().getSourceAttributes();
     471                }
     472
     473                @Override
     474                public void setAttributes(final SortedSet<Integer> attributes) {
     475                        tableModel.getSettings().setSourceAttributes(attributes);
     476                }
     477        }
     478
     479        static class EdgeAttributeAccessor extends AttributeAccessor {
     480                public EdgeAttributeAccessor(final ParsingTableModel tableModel) {
     481                        super(tableModel, "Edge");
     482                }
     483
     484                @Override
     485                public SortedSet<Integer> getAttributes() {
     486                        return tableModel.getSettings().getEdgeAttributes();
     487                }
     488
     489                @Override
     490                public void setAttributes(final SortedSet<Integer> attributes) {
     491                        tableModel.getSettings().setEdgeAttributes(attributes);
     492                }
     493        }
     494
     495        static class TargetAttributeAccessor extends AttributeAccessor {
     496                public TargetAttributeAccessor(final ParsingTableModel tableModel) {
     497                        super(tableModel, "Target");
     498                }
     499
     500                @Override
     501                public SortedSet<Integer> getAttributes() {
     502                        return tableModel.getSettings().getTargetAttributes();
     503                }
     504
     505                @Override
     506                public void setAttributes(final SortedSet<Integer> attributes) {
     507                        tableModel.getSettings().setTargetAttributes(attributes);
     508                }
     509        }
    414510}
    415 
    416 class SourceAttributeAccessor extends AttributeAccessor {
    417         public SourceAttributeAccessor(final ParsingTableModel tableModel) {
    418                 super(tableModel, "Source");
    419         }
    420 
    421         @Override
    422         public SortedSet<Integer> getAttributes() {
    423                 return tableModel.getSettings().getSourceAttributes();
    424         }
    425 
    426         @Override
    427         public void setAttributes(final SortedSet<Integer> attributes) {
    428                 tableModel.getSettings().setSourceAttributes(attributes);
    429         }
    430 }
    431 
    432 class EdgeAttributeAccessor extends AttributeAccessor {
    433         public EdgeAttributeAccessor(final ParsingTableModel tableModel) {
    434                 super(tableModel, "Edge");
    435         }
    436 
    437         @Override
    438         public SortedSet<Integer> getAttributes() {
    439                 return tableModel.getSettings().getEdgeAttributes();
    440         }
    441 
    442         @Override
    443         public void setAttributes(final SortedSet<Integer> attributes) {
    444                 tableModel.getSettings().setEdgeAttributes(attributes);
    445         }
    446 }
    447 
    448 class TargetAttributeAccessor extends AttributeAccessor {
    449         public TargetAttributeAccessor(final ParsingTableModel tableModel) {
    450                 super(tableModel, "Target");
    451         }
    452 
    453         @Override
    454         public SortedSet<Integer> getAttributes() {
    455                 return tableModel.getSettings().getTargetAttributes();
    456         }
    457 
    458         @Override
    459         public void setAttributes(final SortedSet<Integer> attributes) {
    460                 tableModel.getSettings().setTargetAttributes(attributes);
    461         }
    462 }
Note: See TracChangeset for help on using the changeset viewer.