package org.freeplane.plugin.remote.client.listeners; import org.freeplane.core.util.LogUtils; import org.freeplane.features.map.IMapChangeListener; import org.freeplane.features.map.MapChangeEvent; import org.freeplane.features.map.NodeModel; import org.freeplane.plugin.remote.client.ClientController; import org.freeplane.plugin.remote.client.User; import org.freeplane.plugin.remote.client.services.WS; import scala.concurrent.Await; import scala.concurrent.duration.Duration; public class MapChangeListener implements IMapChangeListener { private final ClientController clientController; public MapChangeListener(ClientController clientController) { super(); this.clientController = clientController; } @Override public void onPreNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) { // TODO Auto-generated method stub } @Override public void onPreNodeDelete(NodeModel oldParent, NodeModel selectedNode, int index) { // TODO Auto-generated method stub } @Override public void onNodeMoved(NodeModel oldParent, int oldIndex, NodeModel newParent, NodeModel child, int newIndex) { if (!isUpdating()) { LogUtils.info("Node Moved. Sending to Webservice"); webservice().moveNodeTo(user().getUsername(), user().getAccessToken(), "5", newParent.getID(), child.getID(), newIndex); } } @Override public void onNodeInserted(NodeModel parent, NodeModel child, int newIndex) { if (!isUpdating()) { LogUtils.info("Node Added. Sending to Webservice"); try { final String newNodeId = Await.result(webservice().createNode(user().getUsername(), user().getAccessToken(), "5", parent.getID()), Duration.create("10 seconds")); child.setID(newNodeId); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } @Override public void onNodeDeleted(NodeModel parent, NodeModel child, int index) { if (!isUpdating()) { LogUtils.info("Node Deleted. Sending to Webservice"); webservice().removeNode(user().getUsername(), user().getAccessToken(), "5", child.getID()); } } @Override public void mapChanged(MapChangeEvent event) { } private WS webservice() { return clientController.webservice(); } private boolean isUpdating() { return clientController.isUpdating(); } private User user() { return clientController.getUser(); } }