/** * Query all edges of fly regulatory network. * * @param model the Model * @param executor to run the query * @return interactionEdgeSet */ private static void queryFlyRegulatoryEdges(Model model, PathQueryExecutor executor) { interactionEdgeSetFly = new LinkedHashSet<CytoscapeNetworkEdgeData>(); // TODO fly doesn't use IM Object id PathQuery query = new PathQuery(model); query.addViews( "Regulation.type", // interaction type, e.g. TF-TF "Regulation.source.primaryIdentifier", "Regulation.source.symbol", "Regulation.target.primaryIdentifier", "Regulation.target.symbol"); query.addConstraint(Constraints.eq("Regulation.source.primaryIdentifier", "FBgn*"), "A"); query.addConstraint(Constraints.eq("Regulation.target.primaryIdentifier", "FBgn*"), "B"); query.setConstraintLogic("A and B"); ExportResultsIterator result; try { result = executor.execute(query); } catch (ObjectStoreException e) { throw new RuntimeException("Error retrieving results.", e); } while (result.hasNext()) { List<ResultElement> row = result.next(); String interactionType = (String) row.get(0).getField(); String sourceNodePId = (String) row.get(1).getField(); String sourceNodeSymbol = (String) row.get(2).getField(); String targetNodePId = (String) row.get(3).getField(); String targetNodeSymbol = (String) row.get(4).getField(); CytoscapeNetworkEdgeData aEdge = new CytoscapeNetworkEdgeData(); // Handle bidirectional edges if (interactionEdgeSetFly.isEmpty()) { aEdge.setSourceId(sourceNodePId); if (sourceNodeSymbol == null || sourceNodeSymbol.length() < 1) { aEdge.setSourceLabel(sourceNodePId); } else { aEdge.setSourceLabel(sourceNodeSymbol); } aEdge.setTargetId(targetNodePId); if (targetNodeSymbol == null || targetNodeSymbol.length() < 1) { aEdge.setTargetLabel(targetNodePId); } else { aEdge.setTargetLabel(targetNodeSymbol); } aEdge.setInteractionType(interactionType); aEdge.setDirection("one"); interactionEdgeSetFly.add(aEdge); } else { aEdge.setSourceId(sourceNodePId); if (sourceNodeSymbol == null || sourceNodeSymbol.length() < 1) { aEdge.setSourceLabel(sourceNodePId); } else { aEdge.setSourceLabel(sourceNodeSymbol); } aEdge.setTargetId(targetNodePId); if (targetNodeSymbol == null || targetNodeSymbol.length() < 1) { aEdge.setTargetLabel(targetNodePId); } else { aEdge.setTargetLabel(targetNodeSymbol); } // miRNA-TF and TF-miRNA are the same interaction type if ("TF-miRNA".equals(interactionType) || "miRNA-TF".equals(interactionType)) { String uniType = "miRNA-TF"; aEdge.setInteractionType(uniType); } else { aEdge.setInteractionType(interactionType); } String interactingString = aEdge.generateInteractionString(); String interactingStringRev = aEdge.generateReverseInteractionString(); // Get a list of interactionString from interactionSet LinkedHashSet<String> intcStrSet = new LinkedHashSet<String>(); for (CytoscapeNetworkEdgeData edgedata : interactionEdgeSetFly) { intcStrSet.add(edgedata.generateInteractionString()); } // A none dulipcated edge if (!(intcStrSet.contains(interactingString) || intcStrSet.contains(interactingStringRev))) { aEdge.setDirection("one"); interactionEdgeSetFly.add(aEdge); } else { // duplicated edge // Pull out the CytoscapeNetworkEdgeData which contains the current // interactionString for (CytoscapeNetworkEdgeData edgedata : interactionEdgeSetFly) { if (edgedata.generateInteractionString().equals(interactingString) || edgedata.generateInteractionString().equals(interactingStringRev)) { edgedata.setDirection("both"); aEdge.setInteractionType(interactionType); } } } } } }