package org.incha.ui.stats; import java.util.LinkedList; import java.util.List; import org.incha.core.jswingripples.eig.JSwingRipplesEIGEdgeEvent; import org.incha.core.jswingripples.eig.JSwingRipplesEIGEvent; import org.incha.core.jswingripples.eig.JSwingRipplesEIGListener; import org.incha.core.jswingripples.eig.JSwingRipplesEIGNodeEvent; import org.incha.core.jswingripples.eig.JSwingRipplesEvent; import org.incha.core.jswingripples.eig.history.EdgeAddedAction; import org.incha.core.jswingripples.eig.history.EdgeRemovedAction; import org.incha.core.jswingripples.eig.history.MarkSetAction; import org.incha.core.jswingripples.eig.history.NodeAddedAction; import org.incha.core.jswingripples.eig.history.NodeRemovedAction; import org.incha.core.jswingripples.eig.history.ProbabilitySetAction; import org.incha.core.jswingripples.eig.history.UndoAction; public class UndoActionsBuilder implements JSwingRipplesEIGListener { private final List<UndoAction> actions = new LinkedList<UndoAction>(); /** * Default constructor. */ public UndoActionsBuilder() { super(); } /* (non-Javadoc) * @see org.incha.core.jswingripples.eig.JSwingRipplesEIGListener#jRipplesEIGChanged(org.incha.core.jswingripples.eig.JSwingRipplesEIGEvent) */ @Override public void jRipplesEIGChanged(final JSwingRipplesEIGEvent eigEvent) { final JSwingRipplesEvent[] events = eigEvent.getEvents(); for (final JSwingRipplesEvent evt : events) { if (evt instanceof JSwingRipplesEIGNodeEvent) { final JSwingRipplesEIGNodeEvent e = (JSwingRipplesEIGNodeEvent) evt; switch (e.getEventType()) { case JSwingRipplesEIGNodeEvent.NODE_ADDED: this.actions.add(new NodeAddedAction(e.getSource())); break; case JSwingRipplesEIGNodeEvent.NODE_REMOVED: this.actions.add(new NodeRemovedAction(e.getSource())); break; case JSwingRipplesEIGNodeEvent.NODE_MARK_CHANGED: this.actions.add(new MarkSetAction(e.getSource(), e.getOldValue(), e.getNewValue())); break; case JSwingRipplesEIGNodeEvent.NODE_PROBABILITY_CHANGED: this.actions.add(new ProbabilitySetAction(e.getSource(), e.getOldValue(), e.getNewValue())); break; default: //impossible } } else if (evt instanceof JSwingRipplesEIGEdgeEvent) { final JSwingRipplesEIGEdgeEvent e = (JSwingRipplesEIGEdgeEvent) evt; switch (e.getEventType()) { case JSwingRipplesEIGEdgeEvent.EDGE_ADDED: this.actions.add(new EdgeAddedAction(e.getSource())); break; case JSwingRipplesEIGEdgeEvent.EDGE_COUNT_CHANGED: break; case JSwingRipplesEIGEdgeEvent.EDGE_FROM_NODE_CHANGED: break; case JSwingRipplesEIGEdgeEvent.EDGE_MARK_CHANGED: break; case JSwingRipplesEIGEdgeEvent.EDGE_PROBABILITY_CHANGED: break; case JSwingRipplesEIGEdgeEvent.EDGE_REMOVED: this.actions.add(new EdgeRemovedAction(e.getSource())); break; case JSwingRipplesEIGEdgeEvent.EDGE_TO_NODE_CHANGED: break; } } } } /** * @return */ public List<UndoAction> getActions() { return actions; } }