From 9575ce08be5f2dd4c05a1d81f6bfb3bdea3a76d7 Mon Sep 17 00:00:00 2001 From: "Blake J. Harnden" Date: Wed, 21 Nov 2018 14:41:17 -0800 Subject: [PATCH] corefx - moved start/stop session into controller, remove coupling of core client and the controller itself, added early way to sync up with a singular mobility script --- corefx/src/main/java/com/core/Controller.java | 79 +++++++++++++------ .../java/com/core/client/ICoreClient.java | 3 +- .../com/core/client/rest/CoreRestClient.java | 27 ++----- .../core/client/rest/GetMobilityConfigs.java | 3 +- .../main/java/com/core/ui/GraphToolbar.java | 14 +--- 5 files changed, 70 insertions(+), 56 deletions(-) diff --git a/corefx/src/main/java/com/core/Controller.java b/corefx/src/main/java/com/core/Controller.java index 7a2a7160..d42933b8 100644 --- a/corefx/src/main/java/com/core/Controller.java +++ b/corefx/src/main/java/com/core/Controller.java @@ -30,11 +30,10 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; -import java.util.List; -import java.util.Properties; -import java.util.ResourceBundle; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; @Data public class Controller implements Initializable { @@ -52,7 +51,7 @@ public class Controller implements Initializable { private Properties properties; // core client utilities - private ICoreClient coreClient; + private ICoreClient coreClient = new CoreRestClient(); private CoreWebSocket coreWebSocket; // ui elements @@ -80,9 +79,6 @@ public class Controller implements Initializable { private ConnectDialog connectDialog = new ConnectDialog(this); private GuiPreferencesDialog guiPreferencesDialog = new GuiPreferencesDialog(this); - public Controller() { - } - public void connectToCore(String coreUrl) { coreWebSocket.stop(); @@ -168,24 +164,64 @@ public class Controller implements Initializable { // update other components for new session graphToolbar.setRunButton(coreClient.isRunning()); hooksDialog.updateHooks(); - } - public void sessionStarted() { - // configure and add mobility player - CoreNode node = mobilityDialog.getNode(); - if (node != null) { - MobilityConfig mobilityConfig = mobilityDialog.getMobilityScripts().get(node.getId()); - if (mobilityConfig != null) { - mobilityPlayer.show(node, mobilityConfig); - bottom.getChildren().add(mobilityPlayer); - } + // display first mobility script in player + GetMobilityConfigs getMobilityConfigs = coreClient.getMobilityConfigs(); + Optional nodeIdOptional = getMobilityConfigs.getConfigurations().keySet().stream().findFirst(); + if (nodeIdOptional.isPresent()) { + Integer nodeId = nodeIdOptional.get(); + MobilityConfig mobilityConfig = getMobilityConfigs.getConfigurations().get(nodeId); + CoreNode node = networkGraph.getVertex(nodeId); + mobilityPlayer.show(node, mobilityConfig); + Platform.runLater(() -> bottom.getChildren().add(mobilityPlayer)); } - saveXmlMenuItem.setDisable(false); } - public void sessionStopped() { - bottom.getChildren().remove(mobilityPlayer); - saveXmlMenuItem.setDisable(true); + public boolean startSession() throws IOException { + // force nodes to get latest positions + networkGraph.updatePositions(); + + // retrieve items for creation/start + Collection nodes = networkGraph.getGraph().getVertices(); + Collection links = networkGraph.getGraph().getEdges(); + List hooks = hooksDialog.getHooks(); + + // start/create session + progressBar.setVisible(true); + boolean result = coreClient.start(nodes, links, hooks); + progressBar.setVisible(false); + if (result) { + // configure and add mobility player + CoreNode node = mobilityDialog.getNode(); + if (node != null) { + MobilityConfig mobilityConfig = mobilityDialog.getMobilityScripts().get(node.getId()); + if (mobilityConfig != null) { + mobilityPlayer.show(node, mobilityConfig); + Platform.runLater(() -> bottom.getChildren().add(mobilityPlayer)); + } + } + saveXmlMenuItem.setDisable(false); + } + return result; + } + + public boolean stopSession() throws IOException { + // clear out any drawn wireless links + List wirelessLinks = networkGraph.getGraph().getEdges().stream() + .filter(CoreLink::isWireless) + .collect(Collectors.toList()); + wirelessLinks.forEach(networkGraph::removeWirelessLink); + networkGraph.getGraphViewer().repaint(); + + // stop session + progressBar.setVisible(true); + boolean result = coreClient.stop(); + progressBar.setVisible(false); + if (result) { + Platform.runLater(() -> bottom.getChildren().remove(mobilityPlayer)); + saveXmlMenuItem.setDisable(true); + } + return result; } public void deleteNode(CoreNode node) { @@ -344,7 +380,6 @@ public class Controller implements Initializable { @Override public void initialize(URL location, ResourceBundle resources) { - coreClient = new CoreRestClient(this); coreWebSocket = new CoreWebSocket(this); properties = ConfigUtils.load(); String coreUrl = properties.getProperty(ConfigUtils.REST_URL); diff --git a/corefx/src/main/java/com/core/client/ICoreClient.java b/corefx/src/main/java/com/core/client/ICoreClient.java index c3f2ca5b..87529f86 100644 --- a/corefx/src/main/java/com/core/client/ICoreClient.java +++ b/corefx/src/main/java/com/core/client/ICoreClient.java @@ -5,6 +5,7 @@ import com.core.data.*; import java.io.File; import java.io.IOException; +import java.util.Collection; import java.util.List; public interface ICoreClient { @@ -20,7 +21,7 @@ public interface ICoreClient { GetSession getSession(Integer sessionId) throws IOException; - boolean start() throws IOException; + boolean start(Collection nodes, Collection links, List hooks) throws IOException; boolean stop() throws IOException; diff --git a/corefx/src/main/java/com/core/client/rest/CoreRestClient.java b/corefx/src/main/java/com/core/client/rest/CoreRestClient.java index 59514645..f29d2d36 100644 --- a/corefx/src/main/java/com/core/client/rest/CoreRestClient.java +++ b/corefx/src/main/java/com/core/client/rest/CoreRestClient.java @@ -1,9 +1,7 @@ package com.core.client.rest; -import com.core.Controller; import com.core.client.ICoreClient; import com.core.data.*; -import com.core.graph.NetworkGraph; import com.core.utils.WebUtils; import lombok.Data; import org.apache.logging.log4j.LogManager; @@ -11,25 +9,18 @@ import org.apache.logging.log4j.Logger; import java.io.File; import java.io.IOException; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Data public class CoreRestClient implements ICoreClient { private static final Logger logger = LogManager.getLogger(); - private final Controller controller; - private final NetworkGraph networkGraph; private String baseUrl; private Integer sessionId; private SessionState sessionState; - public CoreRestClient(Controller controller) { - this.controller = controller; - this.networkGraph = controller.getNetworkGraph(); - } - @Override public void setUrl(String url) { this.baseUrl = url; @@ -74,9 +65,7 @@ public class CoreRestClient implements ICoreClient { } @Override - public boolean start() throws IOException { - networkGraph.updatePositions(); - + public boolean start(Collection nodes, Collection links, List hooks) throws IOException { boolean result = setState(SessionState.DEFINITION); if (!result) { return false; @@ -87,13 +76,13 @@ public class CoreRestClient implements ICoreClient { return false; } - for (Hook hook : controller.getHooksDialog().getHooks()) { + for (Hook hook : hooks) { if (!createHook(hook)) { return false; } } - for (CoreNode node : networkGraph.getGraph().getVertices()) { + for (CoreNode node : nodes) { // must pre-configure wlan nodes, if not already if (node.getNodeType().getValue() == NodeType.WLAN) { WlanConfig config = getWlanConfig(node); @@ -105,7 +94,7 @@ public class CoreRestClient implements ICoreClient { } } - for (CoreLink link : networkGraph.getGraph().getEdges()) { + for (CoreLink link : links) { if (!createLink(link)) { return false; } @@ -116,12 +105,6 @@ public class CoreRestClient implements ICoreClient { @Override public boolean stop() throws IOException { - List wirelessLinks = networkGraph.getGraph().getEdges().stream() - .filter(CoreLink::isWireless) - .collect(Collectors.toList()); - wirelessLinks.forEach(networkGraph::removeWirelessLink); - networkGraph.getGraphViewer().repaint(); - return setState(SessionState.SHUTDOWN); } diff --git a/corefx/src/main/java/com/core/client/rest/GetMobilityConfigs.java b/corefx/src/main/java/com/core/client/rest/GetMobilityConfigs.java index 4367476c..e5905b7e 100644 --- a/corefx/src/main/java/com/core/client/rest/GetMobilityConfigs.java +++ b/corefx/src/main/java/com/core/client/rest/GetMobilityConfigs.java @@ -1,5 +1,6 @@ package com.core.client.rest; +import com.core.data.MobilityConfig; import lombok.Data; import java.util.HashMap; @@ -7,5 +8,5 @@ import java.util.Map; @Data public class GetMobilityConfigs { - private Map> configurations = new HashMap<>(); + private Map configurations = new HashMap<>(); } diff --git a/corefx/src/main/java/com/core/ui/GraphToolbar.java b/corefx/src/main/java/com/core/ui/GraphToolbar.java index eb14d3dd..f0e69b9f 100644 --- a/corefx/src/main/java/com/core/ui/GraphToolbar.java +++ b/corefx/src/main/java/com/core/ui/GraphToolbar.java @@ -236,43 +236,38 @@ public class GraphToolbar extends VBox { } private void startSession() { - controller.getProgressBar().setVisible(true); runButton.setDisable(true); new Thread(() -> { try { - boolean result = controller.getCoreClient().start(); + boolean result = controller.startSession(); if (result) { Toast.success("Session Started"); setRunButton(true); } } catch (IOException ex) { - logger.error("failure starting session", ex); + Toast.error("Failure Starting Session", ex); } - controller.getProgressBar().setVisible(false); }).start(); } private void stopSession() { - controller.getProgressBar().setVisible(true); runButton.setDisable(true); new Thread(() -> { try { - boolean result = controller.getCoreClient().stop(); + boolean result = controller.stopSession(); if (result) { Toast.success("Session Stopped"); setRunButton(false); } } catch (IOException ex) { - logger.error("failure to stopSession session", ex); + Toast.error("Failure Stopping Session", ex); } - controller.getProgressBar().setVisible(false); }).start(); } public void setRunButton(boolean isRunning) { if (isRunning) { Platform.runLater(() -> { - controller.sessionStarted(); pickingButton.fire(); editingButton.setDisable(true); runButton.pseudoClassStateChanged(START_CLASS, false); @@ -284,7 +279,6 @@ public class GraphToolbar extends VBox { }); } else { Platform.runLater(() -> { - controller.sessionStopped(); editingButton.setDisable(false); runButton.pseudoClassStateChanged(START_CLASS, true); runButton.pseudoClassStateChanged(STOP_CLASS, false);