MGG ( Microbetag Gui )

Logo

MGG Progress Documentation

View the Project on GitHub ermismd/MGG

WEEK 13 & WEEK 14

  1. CreateNetworkTaskTask
  2. CreateNetworkTaskTaskFactory

They are responsible for parsing the table and constructing a network model based on it. Additionally, the class generates a visual style for the nodes and edges of the network


CreateNetworkTask

		
		**
		 * This class represents a task for creating a network in Cytoscape based on a
		 * JSON response from a server.
		 * 
		 * The JSON response contain information about the nodes and edges of the
		 * network. For each node and edge, the task creates a corresponding node or
		 * edge in the Cytoscape network. The task also sets various attributes for the
		 * nodes and edges based on the JSON data.
		 * 
		 * The task uses the CyNetworkFactory service to create a new network, and the
		 * CyNetworkManager service to add the network to Cytoscape through the
		 * MGGmanager class
		 * 
		 */
		
		public class CreateNetworkTask extends AbstractTask {
		
			final MGGManager mggManager;
		
			// Cytoscape services used by the task
			final CyNetworkFactory networkFactory;
			final CyNetworkManager networkManager;
			final CyNetworkViewFactory networkViewFactory;
			final CyNetworkViewManager networkViewManager;
			final VisualStyleFactory visualStyleFactory;
			final VisualMappingFunctionFactory discreteMappingFactory;
			final VisualMappingFunctionFactory vmfFactoryP;
			final VisualMappingManager vmmServiceRef;
		
			final CyLayoutAlgorithmManager layoutAlgorithmManager;
		
			final PaletteProviderManager paletteManager;
		
			// final PaletteProvider paletteProvider;
		
			public CreateNetworkTask(MGGManager mggManager) {
		
				this.mggManager = mggManager;
		
				this.networkFactory = mggManager.getService(CyNetworkFactory.class);
				this.networkManager = mggManager.getService(CyNetworkManager.class);
				this.networkViewFactory = mggManager.getService(CyNetworkViewFactory.class);
				this.networkViewManager = mggManager.getService(CyNetworkViewManager.class);
				this.visualStyleFactory = mggManager.getService(VisualStyleFactory.class);
				this.discreteMappingFactory = mggManager.getService(VisualMappingFunctionFactory.class,
						"(mapping.type=discrete)");
		
				this.vmfFactoryP = mggManager.getService(VisualMappingFunctionFactory.class, "(mapping.type=passthrough)");
				this.vmmServiceRef = mggManager.getService(VisualMappingManager.class);
		
				this.layoutAlgorithmManager = mggManager.getService(CyLayoutAlgorithmManager.class);
				this.paletteManager = mggManager.getService(PaletteProviderManager.class);
		
				// this.paletteProvider=mggManager.getService(PaletteProvider.class);
		
				// paletteProvider=Palette.getPalette("ColorBrewer");
		
				// paletteProvider=Palette.getPalette("ColorBrewer");
				// PaletteProvider paletteProvider=Palette.getPalette("ColorBrewer");
		
				// PaletteProvider paletteProvider = new PaletteProvider();
		
			}
		
			@Override
			public void run(TaskMonitor taskMonitor) {
				taskMonitor.setTitle("Creating the network");
				taskMonitor.setStatusMessage("Creating the network...");
		
				JSONObject jsonResponse = mggManager.getServerResponse();
		
				JSONObject elements = (JSONObject) jsonResponse.get("elements");
		
				// Create a new network
				CyNetwork network = networkFactory.createNetwork();
		
				// Add the network to the network manager
				networkManager.addNetwork(network);
		
				// default node table
				CyTable nodeTable = network.getDefaultNodeTable();
		
				
				  // Create columns if they don't exist for 'data' attributes if
				 if (nodeTable.getColumn("id") == null) { 
					 nodeTable.createColumn("id", String.class, false); 
				 } 
				 
				 if (nodeTable.getColumn("taxonomy") == null){	
					 nodeTable.createColumn("taxonomy", String.class, false);
				 } 
				 if (nodeTable.getColumn("NCBI-Tax-Id") == null) {
					 	nodeTable.createColumn("NCBI-Tax-Id", String.class, false);
				  } 
				 if
				  (nodeTable.getColumn("GTDB-representative") == null) {
					 nodeTable.createColumn("GTDB-representative", String.class, false); }
				 if
				  (nodeTable.getColumn("taxonomy-level") == null) {
					 nodeTable.createColumn("taxonomy-level", String.class, false); } 
				 if
				  (nodeTable.getColumn("degree_layout") == null) {
					 nodeTable.createColumn("degree_layout", Long.class, false); }
				 if
				  (nodeTable.getColumn("name") == null){
					 nodeTable.createColumn("name", String.class, false); 
				  }
				 
		
				// if (nodeTable.getColumn("phenotypic_traits") == null) {
				// nodeTable.createColumn("phenotypic_traits", String.class, false);
				// }
		
				// Add nodes
				JSONArray nodes = (JSONArray) elements.get("nodes");
				for (Object nodeObj : nodes) {
					JSONObject nodeData = (JSONObject) ((JSONObject) nodeObj).get("data");
					// String id = (String) nodeData.get("id");
					CyNode node = network.addNode();
		
					network.getRow(node).set(CyNetwork.NAME, (String) nodeData.get("id"));
					network.getRow(node).set("selected", (Boolean) nodeData.get("selected"));
					network.getRow(node).set("taxonomy", (String) nodeData.get("taxonomy"));
					network.getRow(node).set("NCBI-Tax-Id", (String) nodeData.get("NCBI-Tax-Id"));
					network.getRow(node).set("GTDB-representative", (String) nodeData.get("GTDB-representative"));
					network.getRow(node).set("taxonomy-level", (String) nodeData.get("taxonomy-level"));
					network.getRow(node).set("degree_layout", (Long) nodeData.get("degree_layout"));
					//network.getRow(node).set("name", (String) nodeData.get("name"));
		
					/*
					 * network.getRow(node).set(CyNetwork.NAME, (String) nodeData.get("id"));
					 * network.getRow(node).set("selected", (Boolean) nodeData.get("selected"));
					 * network.getRow(node).set("taxonomy", (String) nodeData.get("taxonomy"));
					 * network.getRow(node).set("NCBI-Tax-Id", (String)
					 * nodeData.get("NCBI-Tax-Id")); network.getRow(node).set("GTDB-representative",
					 * (String) nodeData.get("GTDB-representative"));
					 * network.getRow(node).set("taxonomy-level", (String)
					 * nodeData.get("taxonomy-level"));
					 */
		
				}
		
				// default edge table
				CyTable edgeTable = network.getDefaultEdgeTable();
		
				// Create columns if they don't exist
				
				/*
				 * if (edgeTable.getColumn(CyNetwork.NAME) == null) {
				 * edgeTable.createColumn(CyNetwork.NAME, String.class, false); }
				 */
				 
				  if (edgeTable.getColumn("shared_name") == null) {
				  edgeTable.createColumn("shared_name", String.class, false); } 
				  if
				  (edgeTable.getColumn("flashweave-score") == null) {
				  edgeTable.createColumn("flashweave-score", Double.class, false); } 
				  if
				  (edgeTable.getColumn("SUID") == null) { edgeTable.createColumn("SUID",
						 Long.class, false); } 
				  if (edgeTable.getColumn("source-ncbi-tax-id") ==
				  null) { edgeTable.createColumn("source-ncbi-tax-id", String.class, false); }
				  if (edgeTable.getColumn("target-ncbi-tax-id") == null) {
				  edgeTable.createColumn("target-ncbi-tax-id", String.class, false); } 
				  if
				  (edgeTable.getColumn("selected") == null) {
				  edgeTable.createColumn("selected", Boolean.class, false);
				  } 
				  if
				  (edgeTable.getColumn("source") == null) { 
					  edgeTable.createColumn("source", String.class, false);
					} 
				  if (edgeTable.getColumn("target") == null) {
				  edgeTable.createColumn("target", String.class, false); 
				  }
				  
				/*
				 * // Create columns if they don't exist if
				 * (edgeTable.getColumn("shared_interaction") == null) {
				 * edgeTable.createColumn("shared_interaction", String.class, false); } if
				 * (edgeTable.getColumn("interaction") == null) {
				 * edgeTable.createColumn("interaction", String.class, false); } if
				 * (edgeTable.getColumn("shared_name") == null) {
				 * edgeTable.createColumn("shared_name", String.class, false); } if
				 * (edgeTable.getColumn("source") == null) { edgeTable.createColumn("source",
				 * String.class, false); } if (edgeTable.getColumn("target") == null) {
				 * edgeTable.createColumn("target", String.class, false); } if
				 * (edgeTable.getColumn("selected") == null) {
				 * edgeTable.createColumn("selected", Boolean.class, false); }
				 */
				 
		
				// Add edges
				JSONArray edges = (JSONArray) elements.get("edges");
				for (Object edgeObj : edges) {
					JSONObject edgeData = (JSONObject) ((JSONObject) edgeObj).get("data");
					String sourceId = (String) edgeData.get("source");
					String targetId = (String) edgeData.get("target");
					CyNode sourceNode = getNodeById(network, sourceId);
					CyNode targetNode = getNodeById(network, targetId);
		
					 if (sourceNode != null && targetNode != null) {
				            CyEdge edge = network.addEdge(sourceNode, targetNode, false);
		
				            network.getRow(edge).set(CyNetwork.NAME, (String) edgeData.get("id"));
				            network.getRow(edge).set("shared_name", (String) edgeData.get("shared_name"));
				            String flashweaveScoreStr = (String) edgeData.get("flashweave-score");
				            double flashweaveScore = Double.parseDouble(flashweaveScoreStr);
				            network.getRow(edge).set("flashweave-score", flashweaveScore);
				            //network.getRow(edge).set("flashweave-score", (Double) edgeData.get("flashweave-score"));  // Parsing string to long
				            network.getRow(edge).set("SUID", Long.parseLong((String) edgeData.get("SUID")));  // Parsing string to long
				            network.getRow(edge).set("source-ncbi-tax-id", (String) edgeData.get("source-ncbi-tax-id"));
				            network.getRow(edge).set("target-ncbi-tax-id", (String) edgeData.get("target-ncbi-tax-id"));
				            network.getRow(edge).set("selected", (Boolean) edgeData.get("selected"));
				        }
					
					/*
					 * if (sourceNode != null && targetNode != null) { CyEdge edge
					 * =network.addEdge(sourceNode, targetNode, false);
					 * 
					 * network.getRow(edge).set(CyNetwork.NAME, (String) edgeData.get("id"));
					 * network.getRow(edge).set("shared_interaction",
					 * (String)edgeData.get("shared_interaction"));
					 * 
					 * network.getRow(edge).set("interaction",(String) edgeData.get("interaction"));
					 * 
					 * network.getRow(edge).set("shared_name", (String)edgeData.get("shared_name"));
					 * 
					 * network.getRow(edge).set("source", (String)edgeData.get("source"));
					 * 
					 * network.getRow(edge).set("target", (String)edgeData.get("target"));
					 * 
					 * network.getRow(edge).set("selected", (Boolean)edgeData.get("selected")); }
					 */
					 
				}
		
				// create a network view
				CyNetworkView networkView = networkViewFactory.createNetworkView(network);
				networkViewManager.addNetworkView(networkView);
		
				// ----------------------------------------------------------------------------------------------------
		
				// VISUAL STYLE
		
				VisualStyle style = visualStyleFactory.createVisualStyle("MGG");
		
				String columnName = "taxonomy-level";
		
				// VisualProperty for node fill color
				VisualProperty<?> vp = BasicVisualLexicon.NODE_FILL_COLOR;
		
				style.setDefaultValue(BasicVisualLexicon.NODE_SHAPE, NodeShapeVisualProperty.ELLIPSE);
		
				// Node Borders
				style.setDefaultValue(BasicVisualLexicon.NODE_BORDER_WIDTH, 2.0);
				style.setDefaultValue(BasicVisualLexicon.NODE_BORDER_PAINT, Color.DARK_GRAY);
		
				// VisualProperty for node shape
					VisualProperty<NodeShape> nodeShapeVP = BasicVisualLexicon.NODE_SHAPE;
					
					// Create a discrete mapping function for node shape
					DiscreteMapping<String, NodeShape> shapeMapping = (DiscreteMapping<String, NodeShape>) discreteMappingFactory
					    .createVisualMappingFunction(columnName, String.class, nodeShapeVP);
					
					// Map taxonomy-level to shapes
					Map<String, NodeShape> taxonomyShapeMap = getTaxonomyShapeMap();
					
					// Set taxonomy-level to shape pairs
					for (Map.Entry<String, NodeShape> entry : taxonomyShapeMap.entrySet()) {
					    shapeMapping.putMapValue(entry.getKey(), entry.getValue());
					}
		
				// Add mapping function to the visual style
				style.addVisualMappingFunction(shapeMapping);
		
				// Node Labels
				style.setDefaultValue(BasicVisualLexicon.NODE_LABEL, "");
				PassthroughMapping<String, String> labelMapping = (PassthroughMapping<String, String>) vmfFactoryP
				    .createVisualMappingFunction("name", String.class, BasicVisualLexicon.NODE_LABEL);
				style.addVisualMappingFunction(labelMapping);
				
				// Discrete mapping function
				DiscreteMapping<String, Paint> mapping = (DiscreteMapping<String, Paint>) discreteMappingFactory
				    .createVisualMappingFunction(columnName, String.class, vp);
				
				// Map species to colors
				Map<String, Paint> speciesColorMap = getSpeciesColorMap();
				
				// Set the species-color pairs
				for (Map.Entry<String, Paint> entry : speciesColorMap.entrySet()) {
				    mapping.putMapValue(entry.getKey(), entry.getValue());
				}
		
				// Add the mapping function to the visual style
				style.addVisualMappingFunction(mapping);
		
				// Apply the visual style to a network view
				style.apply(networkView);
		
				vmmServiceRef.addVisualStyle(style);
				vmmServiceRef.setCurrentVisualStyle(style);
				networkView.updateView();
		
				// layout ( "force-directed")
				CyLayoutAlgorithm layout = layoutAlgorithmManager.getLayout("force-directed");
				if (layout == null) {
					// layout is not found, use the default layout
					layout = layoutAlgorithmManager.getDefaultLayout();
				}
		
				
		
				// Create a task iterator for the layout
				insertTasksAfterCurrentTask(layout.createTaskIterator(networkView, layout.getDefaultLayoutContext(),
						CyLayoutAlgorithm.ALL_NODE_VIEWS, null));
				
			}
		
			/*
			 * private CyNode getNodeById(CyNetwork network, String id) { for (CyNode node :
			 * network.getNodeList()) { if (network.getRow(node).get(CyNetwork.NAME,
			 * String.class).equals(id)) { return node; } } return null; }
			 */
		
			private CyNode getNodeById(CyNetwork network, String nodeId) {
			    for (CyNode node : network.getNodeList()) {
			        String id = network.getRow(node).get(CyNetwork.NAME, String.class);
			        if (nodeId.equals(id)) {
			            return node;
			        }
			    }
			    return null;
			}
			
			
			
						private Map<String, NodeShape> getTaxonomyShapeMap() {
			    Map<String, NodeShape> taxonomyShapeMap = new HashMap<>();
			    taxonomyShapeMap.put("genus", NodeShapeVisualProperty.DIAMOND);
			    taxonomyShapeMap.put("family", NodeShapeVisualProperty.ROUND_RECTANGLE);
			    taxonomyShapeMap.put("mspecies", NodeShapeVisualProperty.ELLIPSE);
			    taxonomyShapeMap.put("null", NodeShapeVisualProperty.OCTAGON);
			    taxonomyShapeMap.put("species", NodeShapeVisualProperty.HEXAGON);
			    // Add more taxonomy-level to shape mappings as needed
			    return taxonomyShapeMap;
			}
			
			private Map<String, Paint> getSpeciesColorMap() {
			    Map<String, Paint> speciesColorMap = new HashMap<>();
			}
		
				PaletteProvider colorBrewerPaletteProvider = paletteManager.getPaletteProvider("ColorBrewer");
				Palette set1 = colorBrewerPaletteProvider.getPalette("Set1 colors");
				// Palette set1= paletteProvider.getPalette("Set1 colors");
				Color[] set1Palette = set1.getColors(9);
		
				speciesColorMap.put("genus", set1Palette[4]);
				speciesColorMap.put("family", set1Palette[1]);
				speciesColorMap.put("mspecies", set1Palette[2]);
				speciesColorMap.put("null", set1Palette[8]);
				speciesColorMap.put("species", set1Palette[0]);
				// speciesColorMap.put("GRC5", set1Palette[5]);
		
				return speciesColorMap;
			}
		
		}
		
	  }

    

CreateNetworkTaskFactory

 

		public class CreateNetworkTaskFactory implements TaskFactory {
		    	private final MGGManager mggManager;
		  
		    public CreateNetworkTaskFactory(MGGManager mggManager) {
		        this.mggManager = mggManager;
		    
		    }
		    
		    @Override
		    public TaskIterator createTaskIterator() {
		        return new TaskIterator(new CreateNetworkTask(mggManager));
		    }
		
		    @Override
		    public boolean isReady() {
		        // add any conditions that need to be met before the task can be executed.
		        // For example,  check the JSON response is not null.
		        return mggManager.getServerResponse() != null;
		    		}
			}
      
    


back