Changeset 235


Ignore:
Timestamp:
Mar 9, 2012, 12:05:00 PM (5 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 deleted
4 edited

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
Note: See TracChangeset for help on using the changeset viewer.