Skip to content
Snippets Groups Projects
Commit 7197c736 authored by Philipp Spohr's avatar Philipp Spohr
Browse files

Updated API to Cyto 3.0.1

Some basic work on Meta-Graph
parent 7f2fed63
Branches
Tags
No related merge requests found
......@@ -4,7 +4,7 @@
<properties>
<bundle.symbolicName>de.hhu.ba.yoshikoWrapper</bundle.symbolicName>
<bundle.namespace>de.hhu.ba.yoshikoWrapper</bundle.namespace>
<cytoscape.api.version>3.0.0</cytoscape.api.version>
<cytoscape.api.version>3.0.1</cytoscape.api.version>
<maven-bundle-plugin.version>2.3.4</maven-bundle-plugin.version>
<osgi.api.version>4.2.0</osgi.api.version>
......@@ -12,7 +12,7 @@
<groupId>de.hhu.ba</groupId>
<artifactId>yoshikoWrapper</artifactId>
<version>0.0.2</version>
<version>0.0.3</version>
<name>YoshikoWrapper</name>
......@@ -125,6 +125,12 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.cytoscape</groupId>
<artifactId>layout-api</artifactId>
<version>${cytoscape.api.version}</version>
<type>bundle</type>
</dependency>
</dependencies>
<description>A Cytoscape plugin for graph-based clustering that wraps the yoshiko algorithm.</description>
......
......@@ -6,6 +6,7 @@ import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.CySwingApplication;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.model.events.AddedEdgesListener;
import org.cytoscape.model.events.ColumnCreatedListener;
import org.cytoscape.model.events.ColumnDeletedListener;
......@@ -15,6 +16,11 @@ import org.cytoscape.service.util.AbstractCyActivator;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.session.events.SessionLoadedListener;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.vizmap.VisualMappingFunctionFactory;
import org.cytoscape.view.vizmap.VisualMappingManager;
import org.cytoscape.view.vizmap.VisualStyleFactory;
import org.cytoscape.work.swing.DialogTaskManager;
import org.osgi.framework.BundleContext;
......@@ -47,7 +53,12 @@ public class CyActivator extends AbstractCyActivator {
CyCore.networkViewFactory = getService(context, CyNetworkViewFactory.class);
CyCore.networkFactory = getService(context, CyNetworkFactory.class);
CyCore.swing = getService(context, CySwingApplication.class);
CyCore.networkViewManager = getService(context,CyNetworkViewManager.class);
CyCore.networkManager = getService(context,CyNetworkManager.class);
CyCore.layoutAlgorithmManager = getService(context,CyLayoutAlgorithmManager.class);
CyCore.visualMappingManager = getService(context,VisualMappingManager.class);
CyCore.visualStyleFactory = getService(context,VisualStyleFactory.class);
CyCore.continuousMappingFactory = getService(context,VisualMappingFunctionFactory.class, "(mapping.type=continuous)");
//Set language according to settings
LocalizationManager.switchLanguage(cm.getProperties().getProperty("locale", "enUS"));
......
......@@ -137,7 +137,7 @@ public class AlgorithmTask extends AbstractTask {
for (long i=0;i<numberOfSolutions;i++) {
taskMonitor.setStatusMessage("Processing solution "+(i+1)+" of "+numberOfSolutions);
YoshikoSolution solution = new YoshikoSolution();
YoshikoSolution solution = new YoshikoSolution(net);
String columnName = "YOSHIKO_SOLUTION_"+(i+1);
net.getDefaultNodeTable().deleteColumn(columnName);
......
......@@ -3,11 +3,18 @@ package de.hhu.ba.yoshikoWrapper.core;
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.CySwingApplication;
import org.cytoscape.model.CyNetworkFactory;
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.vizmap.VisualMappingFunctionFactory;
import org.cytoscape.view.vizmap.VisualMappingManager;
import org.cytoscape.view.vizmap.VisualStyleFactory;
import org.cytoscape.work.swing.DialogTaskManager;
import org.osgi.framework.BundleContext;
/**Simple link collection to enable access to Cytoscape instances
*
*/
......@@ -21,6 +28,12 @@ public class CyCore {
public static CyNetworkViewFactory networkViewFactory;
public static CyNetworkFactory networkFactory;
public static CySwingApplication swing;
public static CyNetworkViewManager networkViewManager;
public static CyNetworkManager networkManager;
public static CyLayoutAlgorithmManager layoutAlgorithmManager;
public static VisualMappingManager visualMappingManager;
public static VisualStyleFactory visualStyleFactory;
public static VisualMappingFunctionFactory continuousMappingFactory;
//
}
package de.hhu.ba.yoshikoWrapper.graphModel;
import java.util.ArrayList;
import java.util.HashMap;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
public class YoshikoSolution {
private CyNetwork originalGraph;
public ArrayList<YoshikoCluster> cluster;
public int id;
public YoshikoSolution() {
public YoshikoSolution(CyNetwork originalGraph) {
cluster = new ArrayList<YoshikoCluster>();
this.originalGraph = originalGraph;
}
/**
* Transforms this solution in a meta-graph where each cluster is represented by one node
* @return The meta-graph as CyNetwork
*/
public CyNetwork toMetaGraph() {
CyNetwork metaGraph = CyCore.networkFactory.createNetwork();
metaGraph.getRow(metaGraph).set(CyNetwork.NAME, LocalizationManager.get("metaGraph"));
metaGraph.getDefaultNodeTable().createColumn("clusterSize", Integer.class, false);
//Map Cluster to Nodes for further reference
HashMap<YoshikoCluster,CyNode> map = new HashMap<YoshikoCluster,CyNode>();
//Add nodes
for (YoshikoCluster c: cluster) {
CyNode clusterNode = metaGraph.addNode();
metaGraph.getRow(clusterNode).set("name", LocalizationManager.get("cluster")+" "+c.id);
metaGraph.getRow(clusterNode).set("clusterSize",c.nodes.size());
map.put(c, clusterNode);
}
//Add edges (O(|C|^2*|V|^2) can maybe be improved? //TODO
for (YoshikoCluster c1:cluster) {
for (YoshikoCluster c2:cluster) {
if (
metaGraph.containsEdge(map.get(c1),map.get(c2))
|| c1 == c2
) {
continue;
}
clusterloop:
for (CyNode c1n : c1.nodes) {
for (CyNode c2n : c2.nodes) {
if (originalGraph.containsEdge(c1n, c2n) || originalGraph.containsEdge(c2n, c1n)) {
metaGraph.addEdge(map.get(c1), map.get(c2), false);
break clusterloop;
}
}
}
}
}
return metaGraph;
}
}
package de.hhu.ba.yoshikoWrapper.gui;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
......@@ -8,6 +10,14 @@ import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.view.layout.CyLayoutAlgorithm;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.view.vizmap.mappings.ContinuousMapping;
import de.hhu.ba.yoshikoWrapper.core.CyCore;
import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoCluster;
import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
......@@ -42,7 +52,45 @@ public class SolutionTab extends ComfortPanel {
clusterCount = new JLabel(LocalizationManager.get("clusterFound")+" "+s.cluster.size());
createMetaGraph = new JButton(LocalizationManager.get("createMetaGraph"));
this.addAll(clusterCount,scrollPane);
createMetaGraph.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CyNetwork metaGraph = solution.toMetaGraph();
CyNetworkView view = CyCore.networkViewFactory.createNetworkView(metaGraph);
//layout solution
CyLayoutAlgorithm layout = CyCore.layoutAlgorithmManager.getDefaultLayout();
CyCore.dialogTaskManager.execute(
layout.createTaskIterator(
view,
layout.getDefaultLayoutContext(),
CyLayoutAlgorithm.ALL_NODE_VIEWS,
null
)
);
//define style for solution
ContinuousMapping<Integer, Double> contMap = (ContinuousMapping<Integer, Double>)CyCore.continuousMappingFactory.createVisualMappingFunction(
"clusterSize",
Integer.class,
BasicVisualLexicon.NODE_SIZE
);
VisualStyle vs= CyCore.visualStyleFactory.createVisualStyle("Meta-Graph Style");
vs.addVisualMappingFunction(contMap);
CyCore.visualMappingManager.addVisualStyle(vs);
CyCore.networkManager.addNetwork(metaGraph);
CyCore.networkViewManager.addNetworkView(
view
);
CyCore.cy.setCurrentNetworkView(view);
vs.apply(CyCore.cy.getCurrentNetworkView());
CyCore.cy.getCurrentNetworkView().updateView();
}
});
this.addAll(clusterCount,scrollPane,createMetaGraph);
}
}
......@@ -21,3 +21,4 @@ nrSolutions = Number of Solutions:
redRuleChooserTitle = Reduction Rules
discardSolution = Discard
createMetaGraph = Create Meta-Graph
metaGraph = Meta Graph
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment