Changeset 234

Show
Ignore:
Timestamp:
08-03-12 18:10:12 (2 years ago)
Author:
tim.te.beek@…
Message:

Refactor in the use of InteractionAccessors?

Files:
1 modified

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 }