From 50fab883f357958b67b2862ed502dc78e7a93ec7 Mon Sep 17 00:00:00 2001 From: Athanasios <ath.kouk.oid@gmail.com> Date: Fri, 17 Jul 2020 20:03:04 +0200 Subject: [PATCH] add temporary layers --- index.html | 54 +++++++++++++++++++++++++--- lib/helpers/RequestWrapper.js | 4 +-- lib/main.js | 24 ++++++++++--- lib/state/BoundingBoxDefined.js | 9 +++++ lib/state/BoundingBoxDefining.js | 9 +++++ lib/state/BoundingBoxUndefined.js | 12 +++++-- lib/state/ExceptionReturned.js | 57 +++++++++++++++++++++++++++++ lib/state/FreezeScene.js | 16 +++++++-- lib/state/LayerSelected.js | 9 ++++- lib/state/NoLayerSelected.js | 8 +++++ lib/state/NothingSelected.js | 57 +++++++++++++++++++++++++++++ lib/state/Operations.js | 35 ++++++++++++++++-- lib/state/SceneRendered.js | 9 +++++ lib/state/State.js | 11 +++++- lib/state/StateFactory.js | 30 ++++++++++++++-- lib/state/TemporaryLayerAdded.js | 60 +++++++++++++++++++++++++++++++ lib/state/UnfreezeScene.js | 55 ++++++++++++++++++++++++++++ lib/state/WaitingForPortrayal.js | 8 +++++ 18 files changed, 446 insertions(+), 21 deletions(-) create mode 100644 lib/state/ExceptionReturned.js create mode 100644 lib/state/NothingSelected.js create mode 100644 lib/state/TemporaryLayerAdded.js create mode 100644 lib/state/UnfreezeScene.js diff --git a/index.html b/index.html index 07526ac..a2501e7 100644 --- a/index.html +++ b/index.html @@ -19,7 +19,7 @@ <body> <div id="wrapper"> - <div id="sidebar"> + <div id="sidebar" class="overflow-hidden"> <form> <div class="form-row"> @@ -43,10 +43,15 @@ <select class="form-control" id="layersList" size="10"></select> </div> - <div class="form-group col-12"> + <div class="form-group col-6"> <button id="getLayers" class="btn btn-primary btn-block" type="button">Get Layers</button> </div> + <div class="form-group col-6"> + <button id="showAddTempLayer" class="btn btn-primary btn-block" type="button" data-toggle="modal" + data-target="#exampleModalCenter">Add Layer</button> + </div> + <div class="form-group col-12"> <label>bounding box</label> <input id="boundingBoxInput" type="text" class="form-control" /> @@ -55,7 +60,7 @@ <div class="form-group col-6"> <button id="setBoundingBox" class="btn btn-primary btn-block" type="button">Set</button> </div> - + <div class="form-group col-6"> <button id="clearBoundingBox" class="btn btn-primary btn-block" type="button">Clear</button> </div> @@ -84,6 +89,37 @@ <div id="statusBarLoader" class="loader"></div> </div> </div> + + <div class="modal" id="addTempLayerModal" tabindex="-1" role="dialog"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalLongTitle">Layer properties</h5> + </div> + <div class="modal-body"> + <form> + <div class="form-group row"> + <label class="col-2">Name</label> + <div class="col-10"> + <input type="text" class="form-control" id="tempLayerName"> + </div> + </div> + <div class="form-group row"> + <label class="col-2">URL</label> + <div class="col-10"> + <input type="text" class="form-control" id="tempLayerUrl"> + </div> + </div> + </form> + </div> + <div class="modal-footer"> + <button id="addTempLayer" type="button" class="btn btn-primary" data-dismiss="modal">Add</button> + <button id="cancelTempLayer" type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button> + </div> + </div> + </div> + </div> + </body> <script src="lib/jquery/jquery-3.1.1.min.js"></script> <script src="lib/bootstrap/bootstrap.min.js"></script> @@ -100,7 +136,17 @@ { name: "mappers", location: "lib/mappers" }, { name: "gui", location: "lib/gui" }, { name: "style", location: "lib/style" } - ] + ], + app: { + host: "81.169.187.7", + port: "9001", + endpoint: "service/v1" + }, + devel: { + host: "localhost", + port: "9000", + endpoint: "service/v1" + } }; </script> <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.12.2/dojo/dojo.js"></script> diff --git a/lib/helpers/RequestWrapper.js b/lib/helpers/RequestWrapper.js index 426c1a3..396b0b7 100644 --- a/lib/helpers/RequestWrapper.js +++ b/lib/helpers/RequestWrapper.js @@ -70,13 +70,13 @@ define([ } catch (e) { NodeCache.clearAll(); StatusBar.endProcess(); - topic.publish("PortrayalResponseHandled", "BoundingBoxUndefined"); + topic.publish("PortrayalResponseHandled", "ExceptionReturned"); } }, function (err) { NodeCache.clearAll(); StatusBar.endProcess(); - topic.publish("PortrayalResponseHandled", "BoundingBoxUndefined"); + topic.publish("PortrayalResponseHandled", "ExceptionReturned"); }); } diff --git a/lib/main.js b/lib/main.js index f920aa2..5cf6819 100644 --- a/lib/main.js +++ b/lib/main.js @@ -1,5 +1,6 @@ require([ "dojo/topic", + "dojo/_base/config", "CesiumAdaptor/CesiumViewer", "helpers/NodeCache", "style/NodeStyler", @@ -10,7 +11,7 @@ require([ "state/State", "state/Operations", "dojo/domReady!" -], function (topic, CesiumViewer, NodeCache, NodeStyler, DefaultStyle, NodeLevelStyle, Legend, Timeout, State, Operations) { +], function (topic, config, CesiumViewer, NodeCache, NodeStyler, DefaultStyle, NodeLevelStyle, Legend, Timeout, State, Operations) { Cesium.BingMapsApi.defaultKey = "AmdoJEIiP8BcA__QO9SjBAgv4h73-uiH4lGinmzwyfjK-Fjs8t7GbmfpFjmyj1cl"; let osm = Cesium.createOpenStreetMapImageryProvider({ @@ -45,9 +46,9 @@ require([ let operations = new Operations(); let state = new State(operations); - $("#host").val("81.169.187.7"); - $("#port").val("9001"); - $("#endpoint").val("service/v1"); + $("#host").val(config.app.host); + $("#port").val(config.app.port); + $("#endpoint").val(config.app.endpoint); $("#request").click(function (event) { event.preventDefault(); @@ -105,4 +106,17 @@ require([ state.getLayers(); }); -}); \ No newline at end of file + $("#showAddTempLayer").click(function (event) { + state.showAddTempLayer(); + }); + + $("#addTempLayer").click(function (event) { + state.addTempLayer(); + }); + + $("#cancelTempLayer").click(function (event) { + $("#tempLayerName").val(""); + $("#tempLayerUrl").val(""); + }); + +}); diff --git a/lib/state/BoundingBoxDefined.js b/lib/state/BoundingBoxDefined.js index fc604cd..29da00c 100644 --- a/lib/state/BoundingBoxDefined.js +++ b/lib/state/BoundingBoxDefined.js @@ -44,8 +44,17 @@ define([ gettingLayers: function (target) { target.operations.getLayers(); target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); } + }); }); \ No newline at end of file diff --git a/lib/state/BoundingBoxDefining.js b/lib/state/BoundingBoxDefining.js index 6645a86..07caca7 100644 --- a/lib/state/BoundingBoxDefining.js +++ b/lib/state/BoundingBoxDefining.js @@ -37,8 +37,17 @@ define([ gettingLayers: function (target) { // no-op + }, + + showAddTempLayer: function (target) { + // no-op + }, + + addTempLayer: function (target) { + // no-op } + }); }); \ No newline at end of file diff --git a/lib/state/BoundingBoxUndefined.js b/lib/state/BoundingBoxUndefined.js index 0078b33..9d2ef85 100644 --- a/lib/state/BoundingBoxUndefined.js +++ b/lib/state/BoundingBoxUndefined.js @@ -34,14 +34,22 @@ define([ }, selectingLayer: function (target, layer) { + target.operations.clear(); target.operations.selectLayer(layer); - target.operations.invokeRequest({ layer: layer }); - target.changeState("WaitingForPortrayal"); + target.changeState("LayerSelected"); }, gettingLayers: function (target) { target.operations.getLayers(); target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); } }); diff --git a/lib/state/ExceptionReturned.js b/lib/state/ExceptionReturned.js new file mode 100644 index 0000000..25463e2 --- /dev/null +++ b/lib/state/ExceptionReturned.js @@ -0,0 +1,57 @@ +define([ + "dojo/_base/declare", + "helpers/NodeCache" +], function (declare, NodeCache) { + + return declare(null, { + + constructor: function () { + + }, + + init(target, bb) { + bb.clear(); + NodeCache.clearAll(); + $("#boundingBoxInput").val(""); + $('#toggleFreezeScene').prop('checked', false); + $('#toggleFreezeScene').prop('disabled', true); + }, + + settingBoundingBox: function (target, bb) { + // no-op + }, + + clearingBoundingBox: function (target, bb) { + // no-op + }, + + makingRequest: function (target) { + // no-op + }, + + toggleFreezingScene: function (target) { + // no-op + }, + + selectingLayer: function (target, layer) { + target.operations.clear(); + target.operations.selectLayer(layer); + target.changeState("LayerSelected"); + }, + + gettingLayers: function (target) { + target.operations.getLayers(); + target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); + } + + }); + +}); \ No newline at end of file diff --git a/lib/state/FreezeScene.js b/lib/state/FreezeScene.js index 0933936..e5ccb01 100644 --- a/lib/state/FreezeScene.js +++ b/lib/state/FreezeScene.js @@ -20,7 +20,11 @@ define([ }, clearingBoundingBox: function (target, bb) { - // no-op + if (bb.isDefined()) { + target.operations.clearBoundingBox(); + target.changeState("LayerSelected"); + target.makeRequest(); + } }, makingRequest: function (target) { @@ -28,7 +32,7 @@ define([ }, toggleFreezingScene: function (target) { - target.changeState("BoundingBoxDefined"); + target.changeState("UnfreezeScene"); }, selectingLayer: function (target, layer) { @@ -40,6 +44,14 @@ define([ gettingLayers: function (target) { target.operations.getLayers(); target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); } }); diff --git a/lib/state/LayerSelected.js b/lib/state/LayerSelected.js index 43ea040..627e7d2 100644 --- a/lib/state/LayerSelected.js +++ b/lib/state/LayerSelected.js @@ -35,13 +35,20 @@ define([ }, selectingLayer: function (target, layer) { - console.log("hihoho"); target.operations.selectLayer(layer); }, gettingLayers: function (target) { target.operations.getLayers(); target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + // no-op + }, + + addTempLayer: function (target) { + // no-op } }); diff --git a/lib/state/NoLayerSelected.js b/lib/state/NoLayerSelected.js index fa2945b..6686e20 100644 --- a/lib/state/NoLayerSelected.js +++ b/lib/state/NoLayerSelected.js @@ -43,6 +43,14 @@ define([ gettingLayers: function (target) { target.operations.getLayers(); target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); } }); diff --git a/lib/state/NothingSelected.js b/lib/state/NothingSelected.js new file mode 100644 index 0000000..8afa674 --- /dev/null +++ b/lib/state/NothingSelected.js @@ -0,0 +1,57 @@ +define([ + "dojo/_base/declare", + "helpers/NodeCache" +], function (declare, NodeCache) { + + return declare(null, { + + constructor: function () { + + }, + + init(target, bb) { + bb.clear(); + NodeCache.clearAll(); + target.operations.clear(); + $("#layersList").empty(); + $("#boundingBoxInput").val(""); + $('#toggleFreezeScene').prop('checked', false); + $('#toggleFreezeScene').prop('disabled', true); + }, + + settingBoundingBox: function (target, bb) { + // no-op + }, + + clearingBoundingBox: function (target, bb) { + // no-op + }, + + makingRequest: function (target) { + // no-op + }, + + toggleFreezingScene: function (target) { + // no-op + }, + + selectingLayer: function (target, layer) { + // no-op + }, + + gettingLayers: function (target) { + target.operations.getLayers(); + target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); + } + + }); + +}); \ No newline at end of file diff --git a/lib/state/Operations.js b/lib/state/Operations.js index 2959cb3..49ef1de 100644 --- a/lib/state/Operations.js +++ b/lib/state/Operations.js @@ -4,8 +4,9 @@ define([ "helpers/UrlBuilder", "CesiumAdaptor/CesiumViewer", "helpers/Layers", - "helpers/RequestWrapper" -], function (declare, request, UrlBuilder, CesiumViewer, Layers, RequestWrapper) { + "helpers/RequestWrapper", + "dojo/topic" +], function (declare, request, UrlBuilder, CesiumViewer, Layers, RequestWrapper, topic) { return declare(null, { @@ -84,6 +85,36 @@ define([ clearBoundingBox: function () { this._bb = null; + }, + + showAddTempLayer: function () { + $('#addTempLayerModal').modal('show'); + }, + + addTempLayer: function () { + + let data = { + name: $("#tempLayerName").val(), + url: $("#tempLayerUrl").val() + }; + + $("#tempLayerName").val(""); + $("#tempLayerUrl").val(""); + + let url = new UrlBuilder(location.protocol.slice(0, -1), $("#host").val()) + .port($("#port").val()) + .path("tempassets") + .build(); + + request.post(url, { + headers: { + "Content-Type": "application/json" + }, + data: JSON.stringify(data), + }).then(function (message) { + topic.publish("TempLayerAdded", "TemporaryLayerAdded"); + }); + } }); diff --git a/lib/state/SceneRendered.js b/lib/state/SceneRendered.js index ed44a3c..014c91a 100644 --- a/lib/state/SceneRendered.js +++ b/lib/state/SceneRendered.js @@ -46,8 +46,17 @@ define([ gettingLayers: function (target) { target.operations.getLayers(); target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); } + }); }); \ No newline at end of file diff --git a/lib/state/State.js b/lib/state/State.js index f38218d..1278569 100644 --- a/lib/state/State.js +++ b/lib/state/State.js @@ -10,10 +10,11 @@ define([ constructor: function (operations) { this.operations = operations; this._stateFactory = new StateFactory(); - this._current = this._stateFactory.createState("NoLayerSelected"); + this._current = this._stateFactory.createState("NothingSelected"); this._boundingBox = new BoundingBox(); topic.subscribe("BoundingBoxCreated", this.changeState.bind(this)); topic.subscribe("PortrayalResponseHandled", this.changeState.bind(this)); + topic.subscribe("TempLayerAdded", this.changeState.bind(this)); }, setBoundingBox: function () { @@ -49,6 +50,14 @@ define([ this._current.gettingLayers(this); }, + showAddTempLayer: function () { + this._current.showAddTempLayer(this); + }, + + addTempLayer: function () { + this._current.addTempLayer(this); + } + }); }); \ No newline at end of file diff --git a/lib/state/StateFactory.js b/lib/state/StateFactory.js index bc74637..ac3265f 100644 --- a/lib/state/StateFactory.js +++ b/lib/state/StateFactory.js @@ -1,5 +1,6 @@ define([ "dojo/_base/declare", + "state/NothingSelected", "state/NoLayerSelected", "state/LayerSelected", "state/BoundingBoxUndefined", @@ -7,8 +8,25 @@ define([ "state/BoundingBoxDefined", "state/WaitingForPortrayal", "state/FreezeScene", - "state/SceneRendered" -], function (declare, NoLayerSelected, LayerSelected, BoundingBoxUndefined, BoundingBoxDefining, BoundingBoxDefined, WaitingForPortrayal, FreezeScene, SceneRendered) { + "state/UnfreezeScene", + "state/SceneRendered", + "state/ExceptionReturned", + "state/TemporaryLayerAdded" +], function ( + declare, + NothingSelected, + NoLayerSelected, + LayerSelected, + BoundingBoxUndefined, + BoundingBoxDefining, + BoundingBoxDefined, + WaitingForPortrayal, + FreezeScene, + UnfreezeScene, + SceneRendered, + ExceptionReturned, + TemporaryLayerAdded +) { return declare(null, { @@ -18,6 +36,8 @@ define([ createState: function (stateName) { switch (stateName) { + case "NothingSelected": + return new NothingSelected(); case "NoLayerSelected": return new NoLayerSelected(); case "LayerSelected": @@ -32,8 +52,14 @@ define([ return new WaitingForPortrayal(); case "FreezeScene": return new FreezeScene(); + case "UnfreezeScene": + return new UnfreezeScene(); case "SceneRendered": return new SceneRendered(); + case "ExceptionReturned": + return new ExceptionReturned(); + case "TemporaryLayerAdded": + return new TemporaryLayerAdded(); default: return new NoLayerSelected(); } diff --git a/lib/state/TemporaryLayerAdded.js b/lib/state/TemporaryLayerAdded.js new file mode 100644 index 0000000..f95f734 --- /dev/null +++ b/lib/state/TemporaryLayerAdded.js @@ -0,0 +1,60 @@ +define([ + "dojo/_base/declare", + "helpers/NodeCache" +], function (declare, NodeCache) { + + return declare(null, { + + constructor: function () { + + }, + + init(target, bb) { + bb.clear(); + NodeCache.clearAll(); + target.operations.clear(); + $("#layersList").empty(); + $("#boundingBoxInput").val(""); + $('#toggleFreezeScene').prop('checked', false); + $('#toggleFreezeScene').prop('disabled', true); + target.getLayers(); + }, + + settingBoundingBox: function (target, bb) { + // no-op + }, + + clearingBoundingBox: function (target, bb) { + // no-op + }, + + makingRequest: function (target) { + // no-op + }, + + toggleFreezingScene: function (target) { + // no-op + }, + + selectingLayer: function (target, layer) { + target.operations.clear(); + target.operations.selectLayer(layer); + target.changeState("LayerSelected"); + }, + + gettingLayers: function (target) { + target.operations.getLayers(); + target.changeState("NoLayerSelected"); + }, + + showAddTempLayer: function (target) { + target.operations.showAddTempLayer(); + }, + + addTempLayer: function (target) { + target.operations.addTempLayer(); + } + + }); + +}); \ No newline at end of file diff --git a/lib/state/UnfreezeScene.js b/lib/state/UnfreezeScene.js new file mode 100644 index 0000000..341b91e --- /dev/null +++ b/lib/state/UnfreezeScene.js @@ -0,0 +1,55 @@ +define([ + "dojo/_base/declare", + "helpers/NodeCache" +], function (declare, NodeCache) { + + return declare(null, { + + constructor: function () { }, + + init(target, bb) { + // bb.unregister(); + NodeCache.clearAll(); + // $("#boundingBoxInput").val(bb.toString()); + $('#toggleFreezeScene').prop('checked', false); + $("#toggleFreezeScene").prop("disabled", false); + // target.operations.setBoundingBox(bb.toString()); + target.makeRequest(); + }, + + settingBoundingBox: function (target, bb) { + // no-op + }, + + clearingBoundingBox: function (target, bb) { + // no-op + }, + + makingRequest: function (target) { + target.operations.invokeRequest(); + target.changeState("WaitingForPortrayal"); + }, + + toggleFreezingScene: function (target) { + target.changeState("FreezeScene"); + }, + + selectingLayer: function (target, layer) { + // no-op + }, + + gettingLayers: function (target) { + // no-op + }, + + showAddTempLayer: function (target) { + // no-op + }, + + addTempLayer: function (target) { + // no-op + } + + }); + +}); \ No newline at end of file diff --git a/lib/state/WaitingForPortrayal.js b/lib/state/WaitingForPortrayal.js index 3068fe1..6e14c30 100644 --- a/lib/state/WaitingForPortrayal.js +++ b/lib/state/WaitingForPortrayal.js @@ -32,6 +32,14 @@ define([ gettingLayers: function (target) { // no-op + }, + + showAddTempLayer: function (target) { + // no-op + }, + + addTempLayer: function (target) { + // no-op } }); -- GitLab