package uk.ac.rhul.cs.cl1.ui.cytoscape3;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.AbstractAction;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import org.cytoscape.task.create.NewNetworkSelectedNodesAndEdgesTaskFatory;
import org.cytoscape.work.swing.DialogTaskManager;
/**
* Action called when a cluster must be extracted as a separate network
*
* @author tamas
*/
public class ExtractClusterAction extends AbstractAction {
/**
* Result viewer panel associated to the action
*/
protected CytoscapeResultViewerPanel resultViewer;
/**
* Constructs the action
*/
public ExtractClusterAction(CytoscapeResultViewerPanel panel) {
super("Extract selected cluster(s)");
this.resultViewer = panel;
this.putValue(AbstractAction.MNEMONIC_KEY, KeyEvent.VK_E);
}
public void actionPerformed(ActionEvent event) {
List<CyNode> selectedNodes = this.resultViewer.getSelectedCytoscapeNodeSet();
CyNetwork network = this.resultViewer.getNetwork();
ClusterONECytoscapeApp app = this.resultViewer.getCytoscapeApp();
if (network == null) {
app.showErrorMessage("Cannot create network representation for the cluster:\n" +
"The parent network has already been destroyed.");
return;
}
resultViewer.selectNodes(selectedNodes);
NewNetworkSelectedNodesAndEdgesTaskFatory taskFactory =
this.resultViewer.getCytoscapeApp().getService(NewNetworkSelectedNodesAndEdgesTaskFatory.class);
if (taskFactory == null) {
app.showBugMessage("Cannot create network representation for the cluster:\n" +
"New network creation factory is not registered.");
return;
}
DialogTaskManager taskManager =
this.resultViewer.getCytoscapeApp().getService(DialogTaskManager.class);
if (taskManager == null) {
app.showBugMessage("Cannot create network representation for the cluster:\n" +
"Dialog task manager is not registered.");
return;
}
taskManager.execute(taskFactory.createTaskIterator(network));
}
}