Changeset 221

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

Add alternate methods of determining edge interaction by using new negative constants

Location:
trunk/piqc-plugin/src
Files:
3 added
2 modified

Legend:

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

    r193 r221  
    33import java.io.File; 
    44import java.io.IOException; 
     5import java.util.ArrayList; 
     6import java.util.List; 
    57import java.util.SortedSet; 
     8 
     9import org.apache.commons.lang.StringUtils; 
    610 
    711import cytoscape.CyEdge; 
     
    1216import cytoscape.data.Semantics; 
    1317import cytoscape.layout.algorithms.GridNodeLayout; 
     18import cytoscape.logger.CyLogger; 
    1419import cytoscape.view.CyNetworkView; 
    1520 
     21import nl.nbic.brs.piqc.PIQCPlugin; 
     22import nl.nbic.brs.piqc.tableimport.models.Constants; 
    1623import nl.nbic.brs.piqc.tableimport.models.ParserSettingsModel; 
    1724import nl.nbic.brs.piqc.tableimport.models.ParsingTableModel; 
     
    5562                CyAttributes edgeAttributes = Cytoscape.getEdgeAttributes(); 
    5663 
     64                // TODO This boolean is never read: when should we trigger to show the warning console? 
     65                boolean warningWasLogged = false; 
     66 
    5767                // Create nodes and edges 
    5868                int rowCount = tableModel.getRowCount(); 
     
    6070                        // Create source node & add attributes 
    6171                        CyNode sourceNode = Cytoscape.getCyNode((String) tableModel.getValueAt(i, sourceIDAttr), true); 
    62                         addAdditionalAttributes(tableModel, nodeAttributes, addiSourceAttr, sourceNode.getIdentifier(), i); 
     72                        warningWasLogged |= addAdditionalAttributes(tableModel, nodeAttributes, addiSourceAttr, sourceNode.getIdentifier(), i); 
    6373 
    6474                        // Create target node & add attributes 
    6575                        CyNode targetNode = Cytoscape.getCyNode((String) tableModel.getValueAt(i, targetIDAttr), true); 
    66                         addAdditionalAttributes(tableModel, nodeAttributes, addiTargetAttr, targetNode.getIdentifier(), i); 
     76                        warningWasLogged |= addAdditionalAttributes(tableModel, nodeAttributes, addiTargetAttr, targetNode.getIdentifier(), i); 
    6777 
    68                         // Create edges using unique values for edge interaction if no edge attribute is set 
    69                         String edgeAttrValue = "" + i; 
    70                         if (edgeIDAttr != null) 
    71                                 edgeAttrValue = (String) tableModel.getValueAt(i, edgeIDAttr); 
     78                        // When no value is specified, set to use a blank value so we can still use the switch statement below 
     79                        if (edgeIDAttr == null) 
     80                                edgeIDAttr = Constants.BLANK_EDGE_INTERACTION; 
     81 
     82                        // Handle each type of interaction to come to a edge interaction 
     83                        final String edgeAttrValue; 
     84                        switch (edgeIDAttr) { 
     85                        case Constants.BLANK_EDGE_INTERACTION: 
     86                                // As stated: Use a blank 
     87                                edgeAttrValue = ""; 
     88                                break; 
     89                        case Constants.COMPOSED_EDGE_INTERACTION: 
     90                                // Use the join of all edge attributes separated by semicolon 
     91                                List<Object> edgeAttrValues = new ArrayList<Object>(); 
     92                                for (int addiIdx : addiEdgeAttr) 
     93                                        edgeAttrValues.add(tableModel.getValueAt(i, addiIdx)); 
     94                                edgeAttrValue = StringUtils.join(edgeAttrValues.toArray(), ';'); 
     95                                break; 
     96                        case Constants.INCREMENTAL_EDGE_INTERACTION: 
     97                                // Use incremental 
     98                                edgeAttrValue = String.format("incremental-%1$s", i); 
     99                                break; 
     100                        default: 
     101                                // Use the string value of the specified attribute 
     102                                edgeAttrValue = String.valueOf(tableModel.getValueAt(i, edgeIDAttr)); 
     103                        } 
    72104 
    73105                        // Create edge, add attributes and add to network 
    74106                        CyEdge edge = Cytoscape.getCyEdge(sourceNode, targetNode, Semantics.INTERACTION, edgeAttrValue, true, true); 
    75                         addAdditionalAttributes(tableModel, edgeAttributes, addiEdgeAttr, edge.getIdentifier(), i); 
     107                        warningWasLogged |= addAdditionalAttributes(tableModel, edgeAttributes, addiEdgeAttr, edge.getIdentifier(), i); 
    76108                        network.addEdge(edge); 
    77109                } 
     
    95127         * @param row 
    96128         */ 
    97         private static void addAdditionalAttributes(final ParsingTableModel tableModel, final CyAttributes cyAttributes, final SortedSet<Integer> additionalAttrIndices, final String identifier, final int row) { 
     129        private static boolean addAdditionalAttributes(final ParsingTableModel tableModel, final CyAttributes cyAttributes, final SortedSet<Integer> additionalAttrIndices, final String identifier, final int row) { 
     130                boolean warningWasLogged = false; 
    98131                for (int addiIdx : additionalAttrIndices) { 
    99132                        String attrName = tableModel.getColumnName(addiIdx); 
    100133                        Object value = tableModel.getValueAt(row, addiIdx); 
    101                         // FIXME Multiple calls to setAttribute overwrite old values: Contemplate whether Lists of values are needed 
     134 
     135                        // Multiple calls to setAttribute overwrite old values: Notify user unobtrusively using logging 
     136                        if (cyAttributes.hasAttribute(identifier, attrName)) { 
     137                                Object oldValue = cyAttributes.getAttribute(identifier, attrName); 
     138                                // Only notify if value actually changes because of this call 
     139                                if (value == null || oldValue == null || !value.equals(oldValue)) { 
     140                                        String message = String.format("Attribute assignment collision in \"%1$s\" for \"%2$s\": Old value of \"%3$s\" overwritten by \"%4$s\"", identifier, attrName, oldValue, value); 
     141                                        CyLogger.getLogger(PIQCPlugin.class).warn(message); 
     142                                        warningWasLogged = true; 
     143                                } 
     144                        } 
     145 
    102146                        if (value instanceof String) 
    103147                                cyAttributes.setAttribute(identifier, attrName, (String) value); 
     
    112156                                                        cyAttributes.setAttribute(identifier, attrName, (Double) value); 
    113157                } 
     158                return warningWasLogged; 
    114159        } 
     160 
     161        /* 
     162                // TODO Do not show dialog here: that does not work well when used through an API 
     163                // Open logger dialog to bring the user's attention to the warnings we've raised 
     164                if (warningWasLogged) 
     165                        SwingUtilities.invokeLater(new Runnable() { 
     166                                @Override 
     167                                public void run() { 
     168                                        // Show the LoggerDialog 
     169                                        LoggerDialog.getLoggerDialog().setVisible(true); 
     170                                } 
     171                        }); 
     172         */ 
    115173} 
  • trunk/piqc-plugin/src/test/java/nl/nbic/brs/piqc/tableimport/TestNetworkCreator.java

    r220 r221  
    7070                CyNetwork network_with = NetworkCreator.createNetwork(settings); 
    7171 
    72                 // Assertions 
     72                // The number of edges should have been reduced now we picked a poor edge attribute 
    7373                Assert.assertEquals(54, network_with.getNodeCount()); 
    7474                Assert.assertEquals(84, network_with.getEdgeCount()); 
    7575                Assert.assertEquals(2, Cytoscape.getNetworkSet().size()); 
    76  
    77                 // TODO How to handle overwritten values: Should they become lists automatically? 
    78                 System.out.println(Cytoscape.getNodeAttributes().getAttribute("UMC Sint Radboud", "Datum")); 
    7976        } 
    8077}