}
// Replace graph
private void updateViewerContent(ScrollingGraphicalViewer viewer)
{
BioPAXGraph graph = (BioPAXGraph) viewer.getContents().getModel();
// Updating is supported only for mechanistic views
if (!graph.isMechanistic()) return;
// Remember highlighted object's original nodes (members of chisio root graph)
Map<Integer, Color> highlightMap = new HashMap<Integer, Color>();
for (Object o : graph.getNodes())
{
IBioPAXNode node = (IBioPAXNode) o;
if (node.isHighlighted())
{
highlightMap.put(node.getIDHash(), node.getHighlightColor());
}
}
for (Object o : graph.getEdges())
{
BioPAXEdge edge = (BioPAXEdge) o;
if (edge.isHighlighted())
{
highlightMap.put(edge.getIDHash(), edge.getHighlightColor());
}
}
// Reset highlight
HighlightLayer hLayer = (HighlightLayer)
((ChsScalableRootEditPart) viewer.getRootEditPart()).getLayer(
HighlightLayer.HIGHLIGHT_LAYER);
hLayer.removeAll();
hLayer.highlighted.clear();
viewer.deselectAll();
// Record layout
graph.recordLayout();
// Create updated graph
pathway p = graph.getPathway();
// Update pathway components if update needed
if (withContent != null)
{
for (pathwayComponent pc : new HashSet<pathwayComponent>(p.getPATHWAY_COMPONENTS()))
{
p.removePATHWAY_COMPONENTS(pc);
}
Set<conversion> convSet = new HashSet<conversion>();
for (GraphObject go : withContent)
{
if (go instanceof Conversion)
{
Conversion conv = (Conversion) go;
conversion cnv = conv.getConversion();
convSet.add(cnv);
}
}
Set<pathwayComponent> components = p.getPATHWAY_COMPONENTS();
for (conversion cnv : convSet)
{
if (!components.contains(cnv))
{
p.addPATHWAY_COMPONENTS(cnv);
}
}
}
// Excise pathway
BioPAXGraph newGraph = main.getRootGraph().excise(p);
newGraph.setName(p.getNAME());
newGraph.setAsRoot();
// Replace the graph
viewer.setContents(newGraph);
// Use same layout
boolean layedout = newGraph.fetchLayout();
if (!layedout)
{
new CoSELayoutAction(main).run();
}
viewer.deselectAll();
GraphAnimation.run(viewer);
// Recover highlights
for (Object o : newGraph.getNodes())
{
IBioPAXNode node = (IBioPAXNode) o;
if (highlightMap.containsKey(node.getIDHash()))
{
node.setHighlightColor(highlightMap.get(node.getIDHash()));
node.setHighlight(true);
}
}
for (Object o : newGraph.getEdges())
{
BioPAXEdge edge = (BioPAXEdge) o;
if (highlightMap.containsKey(edge.getIDHash()))
{
edge.setHighlightColor(highlightMap.get(edge.getIDHash()));