package com.algomagic.atn; import att.grappa.*; public class NodeUpdate extends AbstractUpdate implements Update, VisualizationConstants { private String _name; private String _type; private String _cluster; private String _satisfied; private String _processed; private boolean _local; private NodeState _oldState; private boolean _newNode; public NodeUpdate( String name, String type, String cluster, String satisfied, String processed, int side, boolean local ) { _name = name; _type = type; _cluster = cluster; _satisfied = satisfied; _processed = processed; _side = side; _local = local; _newNode = false; } public String toString( ) { return "NodeUpdate: " + _name + " " + _type + " " + _cluster + " " + _satisfied + " " + _processed; } public boolean getLocal( ) { return _local; } public int initialize( VisualizationPanel visPanel ) { Graph g = visPanel.getGraph( ); Node n = g.findNodeByName( _name ); boolean newNode; int changed; if( n == null ) { new Node( g, _name ); NodeState ns = new NodeState( _name, _type ); changed = ns.updateState( this ); newNode = visPanel.addNodeState( ns ); _newNode = true; return 3; } else { NodeState ns = visPanel.getNodeState( _name ); changed = ns.updateState( this ); return changed; } } public Element getElement( VisualizationPanel visPanel ) { Graph g = visPanel.getGraph( ); return g.findNodeByName( _name ); } public boolean apply( VisualizationPanel visPanel ) { Graph g = visPanel.getGraph( ); Node n = g.findNodeByName( _name ); if( n != null ) { NodeState ns = visPanel.getNodeState( _name ); _oldState = new NodeState( ns ); ns.updateState( this ); visPanel.setNodeProperties( n, ns, _local, _newNode ); return true; } return false; } public void undo( VisualizationPanel visPanel ) { if( _oldState == null ) { throw new RuntimeException( ); } Graph g = visPanel.getGraph( ); Node n = g.findNodeByName( _name ); if( n == null ) { throw new RuntimeException( ); } NodeState ns = visPanel.getNodeState( _name ); ns.setHidden( _oldState.getHidden( ) ); ns.setSatisfied( _oldState.getSatisfied( ) ); visPanel.setNodeProperties( n, _oldState, _local, _newNode ); } public String getName( ) { return _name; } public String getSatisfied( ) { return _satisfied; } public String getProcessed( ) { return _processed; } public void setNew( ) { _newNode = true; } }