Changeset 235

Show
Ignore:
Timestamp:
09-03-12 12:05:00 (2 years ago)
Author:
tim.te.beek@…
Message:

Create an EdgeInteractionForwardingComboboxModel? that adds the alternate edge interaction options
Warn when a user wants to use composed edge interaction but does not specify edge attributes
Change edge interaction constants to an enum

Location:
trunk/piqc-plugin/src
Files:
1 added
1 removed
4 modified

Legend:

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

    r229 r235  
    2424 
    2525import nl.nbic.brs.piqc.PIQCPlugin; 
    26 import nl.nbic.brs.piqc.tableimport.models.Constants; 
     26import nl.nbic.brs.piqc.tableimport.models.AlternateEdgeInteractions; 
    2727import nl.nbic.brs.piqc.tableimport.models.ParserSettingsModel; 
    2828import nl.nbic.brs.piqc.tableimport.models.ParsingTableModel; 
     
    6262                SortedSet<Integer> addiEdgeAttr = settings.getEdgeAttributes(); 
    6363 
     64                // Warn when user selected composed edge interaction but did not provide any additional attributes to compose 
     65                if (edgeIDAttr == AlternateEdgeInteractions.COMPOSED.getIndex() && addiEdgeAttr.isEmpty()) { 
     66                        String error = "Composed Edge Interaction was selected, but no additional edge attributes where provided to compose, leading to a blank edge interaction!"; 
     67                        CyLogger.getLogger(PIQCPlugin.class).error(error); 
     68                } 
     69 
    6470                // CyAttributes to add additional attributes to 
    6571                CyAttributes nodeAttributes = Cytoscape.getNodeAttributes(); 
     
    8490                        // When no value is specified, set to use a blank value so we can still use the switch statement below 
    8591                        if (edgeIDAttr == null) 
    86                                 edgeIDAttr = Constants.BLANK_EDGE_INTERACTION; 
     92                                edgeIDAttr = AlternateEdgeInteractions.BLANK.getIndex(); 
    8793 
    8894                        // Handle each type of interaction to come to a edge interaction 
    8995                        final String edgeAttrValue; 
    90                         switch (edgeIDAttr) { 
    91                         case Constants.BLANK_EDGE_INTERACTION: 
     96                        if (edgeIDAttr == AlternateEdgeInteractions.BLANK.getIndex()) 
    9297                                // As stated: Use a blank 
    9398                                edgeAttrValue = ""; 
    94                                 break; 
    95                         case Constants.COMPOSED_EDGE_INTERACTION: 
     99                        else if (edgeIDAttr == AlternateEdgeInteractions.COMPOSED.getIndex()) { 
    96100                                // Use the join of all edge attributes separated by semicolon 
    97101                                List<Object> edgeAttrValues = new ArrayList<Object>(); 
     
    99103                                        edgeAttrValues.add(tableModel.getValueAt(i, addiIdx)); 
    100104                                edgeAttrValue = StringUtils.join(edgeAttrValues.toArray(), ';'); 
    101                                 break; 
    102                         case Constants.INCREMENTAL_EDGE_INTERACTION: 
     105                        } 
     106                        else if (edgeIDAttr == AlternateEdgeInteractions.INCREMENTAL.getIndex()) 
    103107                                // Use incremental 
    104108                                edgeAttrValue = String.format("incremental-%1$s", i); 
    105                                 break; 
    106                         default: 
     109                        else { 
     110                                assert 0 <= edgeIDAttr; 
    107111                                // Use the string value of the specified attribute 
    108112                                edgeAttrValue = String.valueOf(tableModel.getValueAt(i, edgeIDAttr)); 
     
    120124                        networkView.applyLayout(new GridNodeLayout()); 
    121125 
     126                // TODO Move this code outside this method, so we do not negatively affect API with popups 
    122127                // When should we trigger to show the warning console? 
    123128                // We can't trigger it while we are writing error messages, as that leads to a concurrent modification error due 
     
    164169                        if (value instanceof String) 
    165170                                cyAttributes.setAttribute(identifier, attrName, (String) value); 
    166                         else 
    167                                 if (value instanceof Boolean) 
    168                                         cyAttributes.setAttribute(identifier, attrName, (Boolean) value); 
    169                                 else 
    170                                         if (value instanceof Integer) 
    171                                                 cyAttributes.setAttribute(identifier, attrName, (Integer) value); 
    172                                         else 
    173                                                 if (value instanceof Double) 
    174                                                         cyAttributes.setAttribute(identifier, attrName, (Double) value); 
     171                        else if (value instanceof Boolean) 
     172                                cyAttributes.setAttribute(identifier, attrName, (Boolean) value); 
     173                        else if (value instanceof Integer) 
     174                                cyAttributes.setAttribute(identifier, attrName, (Integer) value); 
     175                        else if (value instanceof Double) 
     176                                cyAttributes.setAttribute(identifier, attrName, (Double) value); 
    175177                } 
    176178                return warningWasLogged; 
  • trunk/piqc-plugin/src/main/java/nl/nbic/brs/piqc/tableimport/views/InteractionPanel.java

    r234 r235  
    3131 
    3232import nl.nbic.brs.piqc.PIQCPlugin; 
     33import nl.nbic.brs.piqc.tableimport.models.AlternateEdgeInteractions; 
    3334import nl.nbic.brs.piqc.tableimport.models.ParsingTableModel; 
    3435import nl.nbic.brs.piqc.tableimport.views.AttributeAccessor.EdgeAttributeAccessor; 
     
    3839import nl.nbic.brs.piqc.tableimport.views.InteractionAccessor.SourceInteractionAccessor; 
    3940import nl.nbic.brs.piqc.tableimport.views.InteractionAccessor.TargetInteractionAccessor; 
     41import nl.nbic.brs.piqc.tableimport.views.InteractionForwardingComboboxModel.EdgeInteractionForwardingComboboxModel; 
    4042 
    4143/** 
     
    99101                InteractionAccessor edgeInteractionAccessor = new EdgeInteractionAccessor(tableModel); 
    100102                edgeInteractionLabel = new JLabel("Interaction attribute"); 
    101                 edgeInteractionCB = new JComboBox(new InteractionForwardingComboboxModel(tableModel, edgeInteractionAccessor) { 
    102                         // TODO Handle the special negative cases for Edge Interactions 
    103                 }); 
     103                edgeInteractionCB = new JComboBox(new EdgeInteractionForwardingComboboxModel(tableModel, edgeInteractionAccessor)); 
    104104                edgeInteractionCB.setBorder(BorderFactory.createLineBorder(new Color(192, 255, 192), 3)); 
    105105 
     
    218218class InteractionForwardingComboboxModel extends AbstractListModel implements ComboBoxModel, TableModelListener { 
    219219        protected ParsingTableModel                     tableModel; 
    220         private final InteractionAccessor       interactionAccessor; 
    221  
    222         public InteractionForwardingComboboxModel(final ParsingTableModel tableModel, final InteractionAccessor interactionAccessor) { 
     220        protected final InteractionAccessor     interactionAccessor; 
     221 
     222        InteractionForwardingComboboxModel(final ParsingTableModel tableModel, final InteractionAccessor interactionAccessor) { 
    223223                this.tableModel = tableModel; 
    224224                this.interactionAccessor = interactionAccessor; 
     
    246246        @Override 
    247247        public int getSize() { 
     248                // +1 because we added the null option on top 
    248249                return tableModel.getColumnCount() + 1; 
    249250        } 
     
    254255                        // Allow selection to be reset by using none as a first option 
    255256                        return null; 
     257                // -1 because we added the null option on top 
    256258                return tableModel.getColumnName(index - 1); 
    257259        } 
     
    262264                if (event.getColumn() == TableModelEvent.ALL_COLUMNS && event.getFirstRow() == TableModelEvent.HEADER_ROW) 
    263265                        fireContentsChanged(this, 0, getSize() - 1); 
     266        } 
     267 
     268        static final class EdgeInteractionForwardingComboboxModel extends InteractionForwardingComboboxModel { 
     269                private final int       NUMBER_OF_EXTRA_OPTIONS = AlternateEdgeInteractions.values().length; 
     270 
     271                EdgeInteractionForwardingComboboxModel(final ParsingTableModel tableModel, final InteractionAccessor interactionAccessor) { 
     272                        super(tableModel, interactionAccessor); 
     273                } 
     274 
     275                @Override 
     276                public int getSize() { 
     277                        return tableModel.getColumnCount() + NUMBER_OF_EXTRA_OPTIONS; 
     278                } 
     279 
     280                @Override 
     281                public Object getElementAt(final int index) { 
     282                        int actualIndex = index - NUMBER_OF_EXTRA_OPTIONS; 
     283                        if (0 <= actualIndex) 
     284                                return tableModel.getColumnName(actualIndex); 
     285                        return AlternateEdgeInteractions.valueForIndex(actualIndex).getBetterName(); 
     286                } 
     287 
     288                @Override 
     289                public String getSelectedItem() { 
     290                        Integer attrIndex = interactionAccessor.getInteraction(); 
     291                        if (attrIndex == null) 
     292                                return null; 
     293                        if (0 <= attrIndex) 
     294                                return tableModel.getColumnName(attrIndex); 
     295                        return AlternateEdgeInteractions.valueForIndex(attrIndex).getBetterName(); 
     296                } 
     297 
     298                @Override 
     299                public void setSelectedItem(final Object itemName) { 
     300                        Integer index = null; 
     301                        if (itemName != null) { 
     302                                // Look up name in AEI Enum, as that should be fastest and hopefully most used 
     303                                index = AlternateEdgeInteractions.valueForName((String) itemName).getIndex(); 
     304                                if (index == null) 
     305                                        // If index is still null, the itemName might have been a columnName instead 
     306                                        index = tableModel.getIndexForColumnName((String) itemName); 
     307                        } 
     308                        interactionAccessor.setInteraction(index); 
     309                } 
     310        } 
     311} 
     312 
     313abstract class InteractionAccessor { 
     314        protected final ParsingTableModel       tableModel; 
     315 
     316        public InteractionAccessor(final ParsingTableModel tableModel) { 
     317                this.tableModel = tableModel; 
     318        } 
     319 
     320        abstract Integer getInteraction(); 
     321 
     322        abstract void setInteraction(final Integer column); 
     323 
     324        static final class SourceInteractionAccessor extends InteractionAccessor { 
     325                public SourceInteractionAccessor(final ParsingTableModel tableModel) { 
     326                        super(tableModel); 
     327                } 
     328 
     329                @Override 
     330                Integer getInteraction() { 
     331                        return tableModel.getSettings().getSourceInteraction(); 
     332                } 
     333 
     334                @Override 
     335                void setInteraction(final Integer column) { 
     336                        tableModel.getSettings().setSourceInteraction(column); 
     337                } 
     338        } 
     339 
     340        static final class EdgeInteractionAccessor extends InteractionAccessor { 
     341                public EdgeInteractionAccessor(final ParsingTableModel tableModel) { 
     342                        super(tableModel); 
     343                } 
     344 
     345                @Override 
     346                Integer getInteraction() { 
     347                        return tableModel.getSettings().getEdgeInteraction(); 
     348                } 
     349 
     350                @Override 
     351                void setInteraction(final Integer column) { 
     352                        tableModel.getSettings().setEdgeInteraction(column); 
     353                } 
     354        } 
     355 
     356        static final class TargetInteractionAccessor extends InteractionAccessor { 
     357                public TargetInteractionAccessor(final ParsingTableModel tableModel) { 
     358                        super(tableModel); 
     359                } 
     360 
     361                @Override 
     362                Integer getInteraction() { 
     363                        return tableModel.getSettings().getTargetInteraction(); 
     364                } 
     365 
     366                @Override 
     367                void setInteraction(final Integer column) { 
     368                        tableModel.getSettings().setTargetInteraction(column); 
     369                } 
    264370        } 
    265371} 
     
    387493} 
    388494 
    389 abstract 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); 
    445                 } 
    446         } 
    447 } 
    448  
    449495abstract class AttributeAccessor { 
    450496        protected final ParsingTableModel       tableModel; 
     
    461507        abstract void setAttributes(final SortedSet<Integer> attributes); 
    462508 
    463         static class SourceAttributeAccessor extends AttributeAccessor { 
     509        static final class SourceAttributeAccessor extends AttributeAccessor { 
    464510                public SourceAttributeAccessor(final ParsingTableModel tableModel) { 
    465511                        super(tableModel, "Source"); 
     
    477523        } 
    478524 
    479         static class EdgeAttributeAccessor extends AttributeAccessor { 
     525        static final class EdgeAttributeAccessor extends AttributeAccessor { 
    480526                public EdgeAttributeAccessor(final ParsingTableModel tableModel) { 
    481527                        super(tableModel, "Edge"); 
     
    493539        } 
    494540 
    495         static class TargetAttributeAccessor extends AttributeAccessor { 
     541        static final class TargetAttributeAccessor extends AttributeAccessor { 
    496542                public TargetAttributeAccessor(final ParsingTableModel tableModel) { 
    497543                        super(tableModel, "Target"); 
  • trunk/piqc-plugin/src/test/java/nl/nbic/brs/piqc/tableimport/TestEdgeInteractions.java

    r229 r235  
    1616import cytoscape.init.CyInitParams; 
    1717 
    18 import nl.nbic.brs.piqc.tableimport.models.Constants; 
     18import nl.nbic.brs.piqc.tableimport.models.AlternateEdgeInteractions; 
    1919import nl.nbic.brs.piqc.tableimport.models.ParserSettingsModel; 
    2020 
     
    8080        @Test 
    8181        public void testBlankEdgeInteraction() throws Exception { 
    82                 settings.setEdgeInteraction(Constants.BLANK_EDGE_INTERACTION); 
     82                settings.setEdgeInteraction(AlternateEdgeInteractions.BLANK.getIndex()); 
    8383                CyNetwork network = NetworkCreator.createNetwork(settings); 
    8484                Assert.assertEquals(3, network.getNodeCount()); 
     
    8989        @Test 
    9090        public void testComposedEdgeInteraction() throws Exception { 
    91                 settings.setEdgeInteraction(Constants.COMPOSED_EDGE_INTERACTION); 
     91                settings.setEdgeInteraction(AlternateEdgeInteractions.COMPOSED.getIndex()); 
    9292                CyNetwork network = NetworkCreator.createNetwork(settings); 
    9393                // This is good: we retain all data rows with predictable edge interactions 
     
    9898        @Test 
    9999        public void testIncrementalEdgeInteraction() throws Exception { 
    100                 settings.setEdgeInteraction(Constants.INCREMENTAL_EDGE_INTERACTION); 
     100                settings.setEdgeInteraction(AlternateEdgeInteractions.INCREMENTAL.getIndex()); 
    101101                CyNetwork network = NetworkCreator.createNetwork(settings); 
    102102                // This is ok: we retain all data rows, but edges have poorly predictable names 
  • trunk/piqc-plugin/src/test/java/nl/nbic/brs/piqc/tableimport/TestNetworkCreator.java

    r229 r235  
    1616import cytoscape.init.CyInitParams; 
    1717 
    18 import nl.nbic.brs.piqc.tableimport.models.Constants; 
     18import nl.nbic.brs.piqc.tableimport.models.AlternateEdgeInteractions; 
    1919import nl.nbic.brs.piqc.tableimport.models.ParserSettingsModel; 
    2020 
     
    5050                settings.setSourceInteraction(2); 
    5151                settings.setTargetInteraction(4); 
    52                 settings.setEdgeInteraction(Constants.INCREMENTAL_EDGE_INTERACTION); 
     52                settings.setEdgeInteraction(AlternateEdgeInteractions.INCREMENTAL.getIndex()); 
    5353 
    5454                // Add alternate attributes and test those