Changeset 221


Ignore:
Timestamp:
Mar 5, 2012, 5:49:52 PM (5 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 edited

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