Week 5 with GSoC
The fifth week was mainly focused on writing the functionalities as an implementation of the abstract layout algorithm laid down in cytoscape.
TODOs
- Extend AbstractLayoutAlgorithm.
- Implement fCoSE layout algorithm in the plugin.
- Implement the task iterator to apply the layout changes to the network in cytoscape.
- Implement doLayoutmethod to apply the layout changes to the network in cytoscape.
Experiments with code
- Extended the AbstractLayoutAlgorithmclass to implement the fCoSE layout algorithm. Using the previously developed knowledge and code, the migration to extend the abstract class was smooth.
public class CustomLayout extends AbstractLayoutAlgorithm {
	/**
	 * Creates a new MyLayout object.
	 */
	private final CyNetworkViewWriterFactory writeCyJs;
	public CustomLayout(UndoSupport undo, CyNetworkViewWriterFactory writeNetwork) {
		super("customLayout","Custom Layout", undo);
		this.writeCyJs = writeNetwork;
	}
	public TaskIterator createTaskIterator(CyNetworkView networkView,
                                            Object context,
                                            Set<View<CyNode>> nodesToLayOut,
                                            String attrName) {
		final CyNetworkView myView = networkView;
		final CyNetworkViewWriterFactory writeCyJs = this.writeCyJs;
		Task task = new AbstractLayoutTask(toString(), networkView, nodesToLayOut, attrName, undoSupport) {
            @Override
			protected void doLayout(TaskMonitor taskMonitor) {
                    //.....
				}		
			}
		};
		return new TaskIterator(task);
	}
}
Learnings
- The AbstractLayoutAlgorithmclass provides a lot of functionalities that can be used to implement the layout algorithms in cytoscape.
- The createTaskIteratormethod is used to create a task iterator which is used to apply the layout changes to the network in cytoscape.
- The doLayoutmethod is used to apply the layout changes to the network in cytoscape.
- Cytoscape layouts also offer layout context which can be used to get and set the parameters for the layout from the user.