Initial implementation
This commit is contained in:
commit
1157182678
|
@ -0,0 +1,5 @@
|
|||
.gradle
|
||||
.idea
|
||||
build
|
||||
logs
|
||||
dist
|
|
@ -0,0 +1,20 @@
|
|||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="Simulation" type="Application" factoryName="Application" nameIsGenerated="true">
|
||||
<option name="MAIN_CLASS_NAME" value="simulation.Simulation" />
|
||||
<module name="drone-simulation.drone-simulator.main" />
|
||||
<option name="PROGRAM_PARAMETERS" value="--data-dir=./data --simulation-speed=0 5937 6043" />
|
||||
<extension name="net.ashald.envfile">
|
||||
<option name="IS_ENABLED" value="false" />
|
||||
<option name="IS_SUBST" value="false" />
|
||||
<option name="IS_PATH_MACRO_SUPPORTED" value="false" />
|
||||
<option name="IS_IGNORE_MISSING_FILES" value="false" />
|
||||
<option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
|
||||
<ENTRIES>
|
||||
<ENTRY IS_ENABLED="true" PARSER="runconfig" />
|
||||
</ENTRIES>
|
||||
</extension>
|
||||
<method v="2">
|
||||
<option name="Make" enabled="true" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
|
@ -0,0 +1,71 @@
|
|||
# Drone Simulator
|
||||
|
||||
This is an application for simulating Drone operations and reporting (fictive) traffic information for London tube
|
||||
stations.
|
||||
|
||||
<div>
|
||||
<div style="float:left;padding:0;margin:0">
|
||||
<img style="height:45vh" src="./data/traffic-report.png">
|
||||
</div>
|
||||
<div><pre style="height:44vh; line-height:2.6em">
|
||||
Elephant & Castle @ 08:03:47: MODERATE (drone: 5937,speed: 27km/h, distanceToStation: 343m)
|
||||
Borough @ 08:05:47: MODERATE (drone: 5937,speed: 28km/h, distanceToStation: 346m)
|
||||
Elephant & Castle @ 08:06:37: MODERATE (drone: 5937,speed: 32km/h, distanceToStation: 349m)
|
||||
Elephant & Castle @ 08:06:38: HEAVY (drone: 5937,speed: 30km/h, distanceToStation: 347m)
|
||||
Southwark @ 08:08:38: LIGHT (drone: 5937,speed: 115km/h, distanceToStation: 339m)
|
||||
Pimlico @ 07:59:05: HEAVY (drone: 6043,speed: 37km/h, distanceToStation: 344m)
|
||||
Westminster @ 08:04:13: HEAVY (drone: 6043,speed: 32km/h, distanceToStation: 347m)
|
||||
Embankment @ 08:07:19: LIGHT (drone: 6043,speed: 29km/h, distanceToStation: 343m)
|
||||
Charing Cross @ 08:08:04: HEAVY (drone: 6043,speed: 60km/h, distanceToStation: 348m)
|
||||
Temple @ 08:08:37: LIGHT (drone: 6043,speed: 36km/h, distanceToStation: 345m)
|
||||
</pre></div>
|
||||
<div style="clear:both"></div>
|
||||
</div>
|
||||
|
||||
## Prerequisites
|
||||
|
||||
This application is written with Java 16 and so needs to have Java 16 installed before building.
|
||||
|
||||
## Building application from source
|
||||
|
||||
To build the application run the following command in the root directory of the project:
|
||||
|
||||
> ./gradlew distZip
|
||||
|
||||
This will build a ZIP archive with the application in the ``./dist`` folder. Extract it anywhere on your system to
|
||||
execute the application.
|
||||
|
||||
## Running application from sources
|
||||
|
||||
You can also run the application directly with Gradle without building a distribution. To run the application
|
||||
execute the following:
|
||||
|
||||
> ./gradlew run --args="--data-dir=./data 5937 6043"
|
||||
|
||||
This will use the example data provided in the ``./data`` folder.
|
||||
|
||||
# Command line arguments
|
||||
```
|
||||
Usage: drone-simulator [-hVw] [-d=<dataDir>] [-p=<simulationSpeed>][-s=<shutDownTime>] [-t=<tubeStationsFile>] DRONES...
|
||||
-d, --data-dir=<dataDir> The path to the drone data
|
||||
-h, --help Show this help message and exit.
|
||||
-p, --simulation-speed=<simulationSpeed> The speed of the simulation time. 0 (real-time) -> 1.0 (no time simulation, instant)
|
||||
-s, --shut-down-time=<shutDownTime> At what time should the simulation terminate
|
||||
-t, --tube-stations=<tubeStationsFile> The path to the tube stations data
|
||||
-V, --version Print version information and exit.
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
The application outputs to artifacts after a successful simulation:
|
||||
* The traffic reports are printed in the Console output
|
||||
* An image file (traffic-report.png) is created in the current directory which contains the drone routes as well as
|
||||
the waypoints.
|
||||
|
||||
For more details about the operation of the simulation a ``./logs`` directory will be created with logs from different
|
||||
parts of the simulation:
|
||||
* `./logs/dispatcher.log`: This log file contains logging from the dispatcher as the simulation proceeds.
|
||||
* `./logs/drone-<xxxx>.log`: A log file per drone will be created to provide insights into each drone's operations
|
||||
* `./logs/report.log`: This is the final traffic report log. It is the same information that is output to the
|
||||
console at runtime while the simulations proceeds.
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
allprojects {
|
||||
group 'drone.simulator'
|
||||
version '1.0'
|
||||
}
|
||||
|
||||
subprojects {
|
||||
apply plugin: 'java'
|
||||
|
||||
sourceCompatibility = JavaVersion.VERSION_16
|
||||
targetCompatibility = JavaVersion.VERSION_16
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'ch.qos.logback:logback-classic:1.3.0-alpha4'
|
||||
implementation 'ch.qos.logback:logback-core:1.3.0-alpha4'
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
|
||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,632 @@
|
|||
5937,"51.476105","-0.100224","2011-03-22 07:55:26"
|
||||
5937,"51.475967","-0.100368","2011-03-22 07:55:40"
|
||||
5937,"51.476021","-0.100246","2011-03-22 07:55:44"
|
||||
5937,"51.476051","-0.100078","2011-03-22 07:55:46"
|
||||
5937,"51.476009","-0.099922","2011-03-22 07:55:52"
|
||||
5937,"51.476044","-0.099775","2011-03-22 07:55:58"
|
||||
5937,"51.476074","-0.099968","2011-03-22 07:56:43"
|
||||
5937,"51.476086","-0.100047","2011-03-22 07:56:45"
|
||||
5937,"51.476074","-0.100123","2011-03-22 07:56:46"
|
||||
5937,"51.476089","-0.10019","2011-03-22 07:56:48"
|
||||
5937,"51.476112","-0.100246","2011-03-22 07:56:53"
|
||||
5937,"51.476112","-0.100264","2011-03-22 07:56:54"
|
||||
5937,"51.476116","-0.10028","2011-03-22 07:56:55"
|
||||
5937,"51.476112","-0.100356","2011-03-22 07:57:05"
|
||||
5937,"51.476135","-0.100378","2011-03-22 07:57:06"
|
||||
5937,"51.476154","-0.100392","2011-03-22 07:57:07"
|
||||
5937,"51.476189","-0.100396","2011-03-22 07:57:08"
|
||||
5937,"51.476219","-0.100387","2011-03-22 07:57:09"
|
||||
5937,"51.476257","-0.100379","2011-03-22 07:57:10"
|
||||
5937,"51.476292","-0.100358","2011-03-22 07:57:11"
|
||||
5937,"51.47633","-0.10034","2011-03-22 07:57:12"
|
||||
5937,"51.476372","-0.100327","2011-03-22 07:57:13"
|
||||
5937,"51.476414","-0.100313","2011-03-22 07:57:14"
|
||||
5937,"51.476463","-0.10028","2011-03-22 07:57:15"
|
||||
5937,"51.476509","-0.100253","2011-03-22 07:57:16"
|
||||
5937,"51.476555","-0.100224","2011-03-22 07:57:17"
|
||||
5937,"51.476589","-0.100196","2011-03-22 07:57:18"
|
||||
5937,"51.476627","-0.100167","2011-03-22 07:57:19"
|
||||
5937,"51.476665","-0.100135","2011-03-22 07:57:20"
|
||||
5937,"51.476692","-0.100112","2011-03-22 07:57:24"
|
||||
5937,"51.476761","-0.100064","2011-03-22 07:57:30"
|
||||
5937,"51.476753","-0.099897","2011-03-22 07:57:31"
|
||||
5937,"51.476715","-0.099819","2011-03-22 07:57:32"
|
||||
5937,"51.476677","-0.099738","2011-03-22 07:57:33"
|
||||
5937,"51.476639","-0.099653","2011-03-22 07:57:34"
|
||||
5937,"51.476604","-0.09957","2011-03-22 07:57:35"
|
||||
5937,"51.47657","-0.099485","2011-03-22 07:57:36"
|
||||
5937,"51.476536","-0.099398","2011-03-22 07:57:37"
|
||||
5937,"51.476501","-0.099309","2011-03-22 07:57:38"
|
||||
5937,"51.476471","-0.099218","2011-03-22 07:57:39"
|
||||
5937,"51.47644","-0.099126","2011-03-22 07:57:40"
|
||||
5937,"51.476406","-0.099036","2011-03-22 07:57:44"
|
||||
5937,"51.476109","-0.098336","2011-03-22 07:57:49"
|
||||
5937,"51.476078","-0.098251","2011-03-22 07:57:50"
|
||||
5937,"51.476044","-0.098161","2011-03-22 07:57:51"
|
||||
5937,"51.476009","-0.098071","2011-03-22 07:57:52"
|
||||
5937,"51.475975","-0.097981","2011-03-22 07:57:53"
|
||||
5937,"51.475967","-0.097888","2011-03-22 07:57:54"
|
||||
5937,"51.475956","-0.097797","2011-03-22 07:57:55"
|
||||
5937,"51.475964","-0.097705","2011-03-22 07:57:56"
|
||||
5937,"51.475971","-0.097608","2011-03-22 07:57:57"
|
||||
5937,"51.475975","-0.097508","2011-03-22 07:57:58"
|
||||
5937,"51.475983","-0.097411","2011-03-22 07:57:59"
|
||||
5937,"51.475986","-0.097315","2011-03-22 07:58:00"
|
||||
5937,"51.475986","-0.09722","2011-03-22 07:58:04"
|
||||
5937,"51.476002","-0.096826","2011-03-22 07:58:05"
|
||||
5937,"51.476006","-0.096728","2011-03-22 07:58:06"
|
||||
5937,"51.476009","-0.096629","2011-03-22 07:58:07"
|
||||
5937,"51.476009","-0.096528","2011-03-22 07:58:08"
|
||||
5937,"51.476013","-0.096439","2011-03-22 07:58:09"
|
||||
5937,"51.476013","-0.096343","2011-03-22 07:58:10"
|
||||
5937,"51.476013","-0.096243","2011-03-22 07:58:11"
|
||||
5937,"51.476063","-0.095301","2011-03-22 07:58:36"
|
||||
5937,"51.476074","-0.095201","2011-03-22 07:58:39"
|
||||
5937,"51.476112","-0.094802","2011-03-22 07:58:40"
|
||||
5937,"51.476196","-0.09426","2011-03-22 07:58:41"
|
||||
5937,"51.476223","-0.0942","2011-03-22 07:58:43"
|
||||
5937,"51.476231","-0.094171","2011-03-22 07:58:44"
|
||||
5937,"51.47628","-0.094118","2011-03-22 07:58:46"
|
||||
5937,"51.476334","-0.094116","2011-03-22 07:58:47"
|
||||
5937,"51.476395","-0.094117","2011-03-22 07:58:48"
|
||||
5937,"51.476456","-0.094111","2011-03-22 07:58:49"
|
||||
5937,"51.476521","-0.094101","2011-03-22 07:58:50"
|
||||
5937,"51.476593","-0.094088","2011-03-22 07:58:51"
|
||||
5937,"51.476669","-0.094082","2011-03-22 07:58:52"
|
||||
5937,"51.476742","-0.094079","2011-03-22 07:58:53"
|
||||
5937,"51.476818","-0.094079","2011-03-22 07:58:54"
|
||||
5937,"51.476891","-0.09408","2011-03-22 07:58:55"
|
||||
5937,"51.476959","-0.094082","2011-03-22 07:58:56"
|
||||
5937,"51.477028","-0.094084","2011-03-22 07:58:57"
|
||||
5937,"51.477097","-0.094088","2011-03-22 07:58:58"
|
||||
5937,"51.477158","-0.094094","2011-03-22 07:58:59"
|
||||
5937,"51.477219","-0.094098","2011-03-22 07:59:00"
|
||||
5937,"51.477276","-0.094102","2011-03-22 07:59:01"
|
||||
5937,"51.477333","-0.094107","2011-03-22 07:59:02"
|
||||
5937,"51.47739","-0.09411","2011-03-22 07:59:03"
|
||||
5937,"51.477444","-0.094114","2011-03-22 07:59:04"
|
||||
5937,"51.477501","-0.094117","2011-03-22 07:59:05"
|
||||
5937,"51.477554","-0.09412","2011-03-22 07:59:06"
|
||||
5937,"51.477608","-0.094124","2011-03-22 07:59:07"
|
||||
5937,"51.477665","-0.094121","2011-03-22 07:59:08"
|
||||
5937,"51.477726","-0.094115","2011-03-22 07:59:09"
|
||||
5937,"51.477791","-0.094108","2011-03-22 07:59:10"
|
||||
5937,"51.477856","-0.094104","2011-03-22 07:59:11"
|
||||
5937,"51.477921","-0.094097","2011-03-22 07:59:12"
|
||||
5937,"51.477985","-0.094095","2011-03-22 07:59:13"
|
||||
5937,"51.478104","-0.094096","2011-03-22 07:59:16"
|
||||
5937,"51.478226","-0.094104","2011-03-22 07:59:17"
|
||||
5937,"51.478287","-0.094106","2011-03-22 07:59:18"
|
||||
5937,"51.478348","-0.094106","2011-03-22 07:59:19"
|
||||
5937,"51.478409","-0.094109","2011-03-22 07:59:20"
|
||||
5937,"51.47847","-0.094121","2011-03-22 07:59:55"
|
||||
5937,"51.478661","-0.094174","2011-03-22 07:59:58"
|
||||
5937,"51.478916","-0.094214","2011-03-22 08:00:13"
|
||||
5937,"51.479542","-0.094233","2011-03-22 08:00:14"
|
||||
5937,"51.479664","-0.094246","2011-03-22 08:00:15"
|
||||
5937,"51.479729","-0.094251","2011-03-22 08:00:16"
|
||||
5937,"51.47979","-0.094256","2011-03-22 08:00:19"
|
||||
5937,"51.480701","-0.094345","2011-03-22 08:00:20"
|
||||
5937,"51.480946","-0.094378","2011-03-22 08:00:21"
|
||||
5937,"51.481007","-0.094384","2011-03-22 08:00:22"
|
||||
5937,"51.481918","-0.094489","2011-03-22 08:00:23"
|
||||
5937,"51.482307","-0.094506","2011-03-22 08:00:24"
|
||||
5937,"51.482662","-0.094514","2011-03-22 08:00:26"
|
||||
5937,"51.482738","-0.094526","2011-03-22 08:00:27"
|
||||
5937,"51.482815","-0.094524","2011-03-22 08:00:28"
|
||||
5937,"51.482887","-0.094513","2011-03-22 08:00:29"
|
||||
5937,"51.48296","-0.094495","2011-03-22 08:00:30"
|
||||
5937,"51.483028","-0.094471","2011-03-22 08:00:31"
|
||||
5937,"51.483093","-0.09443","2011-03-22 08:00:32"
|
||||
5937,"51.483147","-0.09439","2011-03-22 08:00:33"
|
||||
5937,"51.483204","-0.094351","2011-03-22 08:00:34"
|
||||
5937,"51.483265","-0.094315","2011-03-22 08:00:35"
|
||||
5937,"51.483326","-0.094278","2011-03-22 08:00:36"
|
||||
5937,"51.483391","-0.094246","2011-03-22 08:00:37"
|
||||
5937,"51.483459","-0.094218","2011-03-22 08:00:38"
|
||||
5937,"51.483528","-0.094191","2011-03-22 08:00:39"
|
||||
5937,"51.483593","-0.094162","2011-03-22 08:00:40"
|
||||
5937,"51.483658","-0.09413","2011-03-22 08:00:41"
|
||||
5937,"51.48378","-0.09406","2011-03-22 08:00:43"
|
||||
5937,"51.483845","-0.094025","2011-03-22 08:00:44"
|
||||
5937,"51.483913","-0.093991","2011-03-22 08:00:45"
|
||||
5937,"51.483982","-0.093959","2011-03-22 08:00:46"
|
||||
5937,"51.484051","-0.093923","2011-03-22 08:00:47"
|
||||
5937,"51.484119","-0.093891","2011-03-22 08:00:48"
|
||||
5937,"51.484188","-0.093858","2011-03-22 08:00:49"
|
||||
5937,"51.484249","-0.093818","2011-03-22 08:00:50"
|
||||
5937,"51.48431","-0.093772","2011-03-22 08:00:51"
|
||||
5937,"51.484371","-0.093728","2011-03-22 08:00:52"
|
||||
5937,"51.484451","-0.093718","2011-03-22 08:00:53"
|
||||
5937,"51.484528","-0.093706","2011-03-22 08:00:54"
|
||||
5937,"51.484604","-0.093694","2011-03-22 08:00:55"
|
||||
5937,"51.484673","-0.093691","2011-03-22 08:00:56"
|
||||
5937,"51.484737","-0.093695","2011-03-22 08:00:57"
|
||||
5937,"51.484787","-0.093702","2011-03-22 08:00:58"
|
||||
5937,"51.484844","-0.09372","2011-03-22 08:00:59"
|
||||
5937,"51.484901","-0.093735","2011-03-22 08:01:00"
|
||||
5937,"51.484955","-0.093744","2011-03-22 08:01:01"
|
||||
5937,"51.485065","-0.093791","2011-03-22 08:01:03"
|
||||
5937,"51.485126","-0.093823","2011-03-22 08:01:04"
|
||||
5937,"51.485184","-0.093853","2011-03-22 08:01:05"
|
||||
5937,"51.485241","-0.093883","2011-03-22 08:01:06"
|
||||
5937,"51.485298","-0.093913","2011-03-22 08:01:07"
|
||||
5937,"51.48534","-0.093935","2011-03-22 08:01:08"
|
||||
5937,"51.485394","-0.093961","2011-03-22 08:01:09"
|
||||
5937,"51.485455","-0.093995","2011-03-22 08:01:10"
|
||||
5937,"51.485519","-0.094032","2011-03-22 08:01:11"
|
||||
5937,"51.485588","-0.094076","2011-03-22 08:01:12"
|
||||
5937,"51.485657","-0.094119","2011-03-22 08:01:13"
|
||||
5937,"51.485729","-0.094163","2011-03-22 08:01:14"
|
||||
5937,"51.485802","-0.09421","2011-03-22 08:01:15"
|
||||
5937,"51.485878","-0.094255","2011-03-22 08:01:16"
|
||||
5937,"51.485958","-0.094309","2011-03-22 08:01:17"
|
||||
5937,"51.486038","-0.094375","2011-03-22 08:01:18"
|
||||
5937,"51.486118","-0.094442","2011-03-22 08:01:19"
|
||||
5937,"51.486198","-0.094515","2011-03-22 08:01:20"
|
||||
5937,"51.486271","-0.094586","2011-03-22 08:01:21"
|
||||
5937,"51.486412","-0.094718","2011-03-22 08:01:23"
|
||||
5937,"51.486477","-0.094781","2011-03-22 08:01:24"
|
||||
5937,"51.486542","-0.094843","2011-03-22 08:01:25"
|
||||
5937,"51.486603","-0.0949","2011-03-22 08:01:26"
|
||||
5937,"51.48666","-0.09495","2011-03-22 08:01:27"
|
||||
5937,"51.486717","-0.095","2011-03-22 08:01:28"
|
||||
5937,"51.486774","-0.095052","2011-03-22 08:01:29"
|
||||
5937,"51.486832","-0.095106","2011-03-22 08:01:30"
|
||||
5937,"51.486885","-0.095154","2011-03-22 08:01:31"
|
||||
5937,"51.486938","-0.095196","2011-03-22 08:01:32"
|
||||
5937,"51.486996","-0.095231","2011-03-22 08:01:33"
|
||||
5937,"51.487049","-0.095258","2011-03-22 08:01:34"
|
||||
5937,"51.487106","-0.09528","2011-03-22 08:01:35"
|
||||
5937,"51.487164","-0.095295","2011-03-22 08:01:36"
|
||||
5937,"51.487221","-0.095313","2011-03-22 08:01:37"
|
||||
5937,"51.487274","-0.095324","2011-03-22 08:01:38"
|
||||
5937,"51.487328","-0.095333","2011-03-22 08:01:39"
|
||||
5937,"51.487381","-0.095346","2011-03-22 08:01:40"
|
||||
5937,"51.487434","-0.095362","2011-03-22 08:01:41"
|
||||
5937,"51.487492","-0.095382","2011-03-22 08:01:42"
|
||||
5937,"51.487545","-0.095404","2011-03-22 08:01:43"
|
||||
5937,"51.487602","-0.095427","2011-03-22 08:01:44"
|
||||
5937,"51.487663","-0.095448","2011-03-22 08:01:45"
|
||||
5937,"51.48772","-0.095468","2011-03-22 08:01:46"
|
||||
5937,"51.487774","-0.095493","2011-03-22 08:01:47"
|
||||
5937,"51.487831","-0.09552","2011-03-22 08:01:48"
|
||||
5937,"51.487885","-0.095548","2011-03-22 08:01:49"
|
||||
5937,"51.487934","-0.095572","2011-03-22 08:01:50"
|
||||
5937,"51.487984","-0.095595","2011-03-22 08:01:51"
|
||||
5937,"51.488033","-0.095617","2011-03-22 08:01:52"
|
||||
5937,"51.488087","-0.095642","2011-03-22 08:01:53"
|
||||
5937,"51.48814","-0.09567","2011-03-22 08:01:54"
|
||||
5937,"51.488194","-0.095699","2011-03-22 08:01:55"
|
||||
5937,"51.488247","-0.09573","2011-03-22 08:01:56"
|
||||
5937,"51.4883","-0.095763","2011-03-22 08:01:57"
|
||||
5937,"51.488358","-0.095795","2011-03-22 08:01:58"
|
||||
5937,"51.4884","-0.09582","2011-03-22 08:01:59"
|
||||
5937,"51.488441","-0.095843","2011-03-22 08:02:00"
|
||||
5937,"51.488483","-0.095867","2011-03-22 08:02:02"
|
||||
5937,"51.488529","-0.095891","2011-03-22 08:02:03"
|
||||
5937,"51.488609","-0.095942","2011-03-22 08:02:04"
|
||||
5937,"51.488644","-0.095965","2011-03-22 08:02:05"
|
||||
5937,"51.488678","-0.095988","2011-03-22 08:02:06"
|
||||
5937,"51.488716","-0.096021","2011-03-22 08:02:07"
|
||||
5937,"51.488758","-0.096064","2011-03-22 08:02:08"
|
||||
5937,"51.488804","-0.096106","2011-03-22 08:02:09"
|
||||
5937,"51.488846","-0.096142","2011-03-22 08:02:10"
|
||||
5937,"51.488892","-0.096178","2011-03-22 08:02:11"
|
||||
5937,"51.488983","-0.096242","2011-03-22 08:02:13"
|
||||
5937,"51.489029","-0.096269","2011-03-22 08:02:14"
|
||||
5937,"51.489071","-0.096289","2011-03-22 08:02:15"
|
||||
5937,"51.489117","-0.096305","2011-03-22 08:02:16"
|
||||
5937,"51.489159","-0.096318","2011-03-22 08:02:17"
|
||||
5937,"51.489201","-0.096332","2011-03-22 08:02:18"
|
||||
5937,"51.489235","-0.09634","2011-03-22 08:02:19"
|
||||
5937,"51.489265","-0.09635","2011-03-22 08:02:20"
|
||||
5937,"51.489349","-0.0964","2011-03-22 08:02:24"
|
||||
5937,"51.489349","-0.0964","2011-03-22 08:02:35"
|
||||
5937,"51.489449","-0.096428","2011-03-22 08:02:44"
|
||||
5937,"51.48954","-0.096471","2011-03-22 08:02:47"
|
||||
5937,"51.489582","-0.096496","2011-03-22 08:02:48"
|
||||
5937,"51.489632","-0.096528","2011-03-22 08:02:49"
|
||||
5937,"51.489693","-0.09657","2011-03-22 08:02:50"
|
||||
5937,"51.48975","-0.096613","2011-03-22 08:02:51"
|
||||
5937,"51.489815","-0.096653","2011-03-22 08:02:52"
|
||||
5937,"51.489876","-0.096694","2011-03-22 08:02:53"
|
||||
5937,"51.489941","-0.096736","2011-03-22 08:02:54"
|
||||
5937,"51.490005","-0.096778","2011-03-22 08:02:55"
|
||||
5937,"51.49007","-0.096821","2011-03-22 08:02:56"
|
||||
5937,"51.490135","-0.096863","2011-03-22 08:02:57"
|
||||
5937,"51.490204","-0.096907","2011-03-22 08:02:58"
|
||||
5937,"51.49028","-0.096961","2011-03-22 08:02:59"
|
||||
5937,"51.490353","-0.097013","2011-03-22 08:03:00"
|
||||
5937,"51.490425","-0.097064","2011-03-22 08:03:01"
|
||||
5937,"51.490566","-0.097169","2011-03-22 08:03:03"
|
||||
5937,"51.490635","-0.097225","2011-03-22 08:03:04"
|
||||
5937,"51.490707","-0.09728","2011-03-22 08:03:05"
|
||||
5937,"51.490776","-0.097334","2011-03-22 08:03:06"
|
||||
5937,"51.490845","-0.097386","2011-03-22 08:03:07"
|
||||
5937,"51.49091","-0.097431","2011-03-22 08:03:08"
|
||||
5937,"51.490971","-0.097472","2011-03-22 08:03:09"
|
||||
5937,"51.491028","-0.097512","2011-03-22 08:03:10"
|
||||
5937,"51.491085","-0.097549","2011-03-22 08:03:11"
|
||||
5937,"51.491138","-0.09759","2011-03-22 08:03:12"
|
||||
5937,"51.491192","-0.097618","2011-03-22 08:03:13"
|
||||
5937,"51.491245","-0.097644","2011-03-22 08:03:14"
|
||||
5937,"51.491299","-0.097658","2011-03-22 08:03:15"
|
||||
5937,"51.491352","-0.097675","2011-03-22 08:03:16"
|
||||
5937,"51.491405","-0.097686","2011-03-22 08:03:17"
|
||||
5937,"51.491459","-0.097697","2011-03-22 08:03:18"
|
||||
5937,"51.491508","-0.097711","2011-03-22 08:03:19"
|
||||
5937,"51.491562","-0.097725","2011-03-22 08:03:20"
|
||||
5937,"51.491611","-0.097737","2011-03-22 08:03:21"
|
||||
5937,"51.491711","-0.097767","2011-03-22 08:03:23"
|
||||
5937,"51.491776","-0.097801","2011-03-22 08:03:24"
|
||||
5937,"51.491837","-0.097836","2011-03-22 08:03:25"
|
||||
5937,"51.491898","-0.097877","2011-03-22 08:03:26"
|
||||
5937,"51.491955","-0.097915","2011-03-22 08:03:27"
|
||||
5937,"51.492008","-0.097949","2011-03-22 08:03:28"
|
||||
5937,"51.492058","-0.09798","2011-03-22 08:03:29"
|
||||
5937,"51.492111","-0.098011","2011-03-22 08:03:30"
|
||||
5937,"51.492161","-0.098039","2011-03-22 08:03:31"
|
||||
5937,"51.492214","-0.098069","2011-03-22 08:03:32"
|
||||
5937,"51.492275","-0.09812","2011-03-22 08:03:33"
|
||||
5937,"51.492332","-0.098178","2011-03-22 08:03:34"
|
||||
5937,"51.49239","-0.098241","2011-03-22 08:03:35"
|
||||
5937,"51.492447","-0.098294","2011-03-22 08:03:36"
|
||||
5937,"51.492504","-0.098339","2011-03-22 08:03:37"
|
||||
5937,"51.492565","-0.098384","2011-03-22 08:03:38"
|
||||
5937,"51.492626","-0.098431","2011-03-22 08:03:39"
|
||||
5937,"51.492687","-0.098475","2011-03-22 08:03:40"
|
||||
5937,"51.492748","-0.098518","2011-03-22 08:03:41"
|
||||
5937,"51.492859","-0.0986","2011-03-22 08:03:43"
|
||||
5937,"51.492912","-0.098648","2011-03-22 08:03:44"
|
||||
5937,"51.492954","-0.098724","2011-03-22 08:03:45"
|
||||
5937,"51.493","-0.098801","2011-03-22 08:03:46"
|
||||
5937,"51.493042","-0.098864","2011-03-22 08:03:47"
|
||||
5937,"51.493073","-0.098918","2011-03-22 08:03:48"
|
||||
5937,"51.493122","-0.099014","2011-03-22 08:03:49"
|
||||
5937,"51.493168","-0.09911","2011-03-22 08:03:50"
|
||||
5937,"51.49321","-0.099202","2011-03-22 08:03:51"
|
||||
5937,"51.493237","-0.099295","2011-03-22 08:03:52"
|
||||
5937,"51.493252","-0.09935","2011-03-22 08:03:53"
|
||||
5937,"51.493271","-0.099412","2011-03-22 08:03:54"
|
||||
5937,"51.49329","-0.099491","2011-03-22 08:03:55"
|
||||
5937,"51.493298","-0.099591","2011-03-22 08:03:56"
|
||||
5937,"51.493309","-0.099719","2011-03-22 08:03:57"
|
||||
5937,"51.49332","-0.099851","2011-03-22 08:03:58"
|
||||
5937,"51.493328","-0.099979","2011-03-22 08:03:59"
|
||||
5937,"51.493332","-0.10011","2011-03-22 08:04:00"
|
||||
5937,"51.493328","-0.100243","2011-03-22 08:04:01"
|
||||
5937,"51.493332","-0.100504","2011-03-22 08:04:03"
|
||||
5937,"51.49337","-0.100593","2011-03-22 08:04:04"
|
||||
5937,"51.49342","-0.100638","2011-03-22 08:04:05"
|
||||
5937,"51.493473","-0.10066","2011-03-22 08:04:06"
|
||||
5937,"51.49353","-0.100669","2011-03-22 08:04:07"
|
||||
5937,"51.493591","-0.100671","2011-03-22 08:04:08"
|
||||
5937,"51.493649","-0.100674","2011-03-22 08:04:09"
|
||||
5937,"51.493713","-0.100673","2011-03-22 08:04:10"
|
||||
5937,"51.493771","-0.100673","2011-03-22 08:04:11"
|
||||
5937,"51.493839","-0.100673","2011-03-22 08:04:12"
|
||||
5937,"51.493908","-0.100674","2011-03-22 08:04:13"
|
||||
5937,"51.49398","-0.100675","2011-03-22 08:04:14"
|
||||
5937,"51.494049","-0.100674","2011-03-22 08:04:15"
|
||||
5937,"51.49411","-0.100678","2011-03-22 08:04:16"
|
||||
5937,"51.494171","-0.100682","2011-03-22 08:04:17"
|
||||
5937,"51.494228","-0.100682","2011-03-22 08:04:18"
|
||||
5937,"51.494278","-0.100674","2011-03-22 08:04:19"
|
||||
5937,"51.49432","-0.100668","2011-03-22 08:04:20"
|
||||
5937,"51.494362","-0.100659","2011-03-22 08:04:21"
|
||||
5937,"51.494457","-0.100624","2011-03-22 08:04:23"
|
||||
5937,"51.494511","-0.100627","2011-03-22 08:04:24"
|
||||
5937,"51.494556","-0.100631","2011-03-22 08:04:25"
|
||||
5937,"51.494598","-0.100656","2011-03-22 08:04:26"
|
||||
5937,"51.494637","-0.100698","2011-03-22 08:04:27"
|
||||
5937,"51.494675","-0.100736","2011-03-22 08:04:28"
|
||||
5937,"51.49474","-0.100829","2011-03-22 08:04:30"
|
||||
5937,"51.494793","-0.100904","2011-03-22 08:04:31"
|
||||
5937,"51.494854","-0.100991","2011-03-22 08:04:32"
|
||||
5937,"51.494911","-0.101082","2011-03-22 08:04:33"
|
||||
5937,"51.494972","-0.101167","2011-03-22 08:04:34"
|
||||
5937,"51.495029","-0.101238","2011-03-22 08:04:35"
|
||||
5937,"51.495071","-0.101259","2011-03-22 08:04:36"
|
||||
5937,"51.495117","-0.101261","2011-03-22 08:04:37"
|
||||
5937,"51.495182","-0.101261","2011-03-22 08:04:38"
|
||||
5937,"51.495247","-0.101228","2011-03-22 08:04:39"
|
||||
5937,"51.495285","-0.101216","2011-03-22 08:04:40"
|
||||
5937,"51.495327","-0.101201","2011-03-22 08:04:41"
|
||||
5937,"51.495419","-0.101124","2011-03-22 08:04:43"
|
||||
5937,"51.495468","-0.101015","2011-03-22 08:04:44"
|
||||
5937,"51.49551","-0.100889","2011-03-22 08:04:45"
|
||||
5937,"51.495544","-0.100755","2011-03-22 08:04:46"
|
||||
5937,"51.49559","-0.100624","2011-03-22 08:04:47"
|
||||
5937,"51.495617","-0.10051","2011-03-22 08:04:48"
|
||||
5937,"51.495651","-0.100388","2011-03-22 08:04:49"
|
||||
5937,"51.495693","-0.100265","2011-03-22 08:04:50"
|
||||
5937,"51.495728","-0.10016","2011-03-22 08:04:51"
|
||||
5937,"51.495789","-0.100095","2011-03-22 08:04:52"
|
||||
5937,"51.495865","-0.100053","2011-03-22 08:04:53"
|
||||
5937,"51.495941","-0.100015","2011-03-22 08:04:54"
|
||||
5937,"51.496006","-0.099966","2011-03-22 08:04:55"
|
||||
5937,"51.496071","-0.099922","2011-03-22 08:04:56"
|
||||
5937,"51.496132","-0.099883","2011-03-22 08:04:57"
|
||||
5937,"51.496193","-0.099841","2011-03-22 08:04:58"
|
||||
5937,"51.49625","-0.099799","2011-03-22 08:04:59"
|
||||
5937,"51.4963","-0.099763","2011-03-22 08:05:00"
|
||||
5937,"51.496365","-0.099823","2011-03-22 08:05:09"
|
||||
5937,"51.496429","-0.099886","2011-03-22 08:05:11"
|
||||
5937,"51.496525","-0.099785","2011-03-22 08:05:12"
|
||||
5937,"51.496632","-0.099669","2011-03-22 08:05:13"
|
||||
5937,"51.496738","-0.099593","2011-03-22 08:05:14"
|
||||
5937,"51.496838","-0.099465","2011-03-22 08:05:15"
|
||||
5937,"51.496922","-0.099325","2011-03-22 08:05:16"
|
||||
5937,"51.496998","-0.099207","2011-03-22 08:05:17"
|
||||
5937,"51.497066","-0.099114","2011-03-22 08:05:18"
|
||||
5937,"51.497135","-0.099031","2011-03-22 08:05:19"
|
||||
5937,"51.497204","-0.09895","2011-03-22 08:05:20"
|
||||
5937,"51.497269","-0.098877","2011-03-22 08:05:21"
|
||||
5937,"51.497395","-0.098741","2011-03-22 08:05:23"
|
||||
5937,"51.497463","-0.098683","2011-03-22 08:05:24"
|
||||
5937,"51.497528","-0.098632","2011-03-22 08:05:25"
|
||||
5937,"51.497593","-0.098575","2011-03-22 08:05:26"
|
||||
5937,"51.497654","-0.098512","2011-03-22 08:05:27"
|
||||
5937,"51.497711","-0.09846","2011-03-22 08:05:28"
|
||||
5937,"51.497768","-0.098404","2011-03-22 08:05:29"
|
||||
5937,"51.497829","-0.098349","2011-03-22 08:05:30"
|
||||
5937,"51.497887","-0.09829","2011-03-22 08:05:31"
|
||||
5937,"51.497925","-0.09823","2011-03-22 08:05:32"
|
||||
5937,"51.497963","-0.098171","2011-03-22 08:05:33"
|
||||
5937,"51.498005","-0.098118","2011-03-22 08:05:34"
|
||||
5937,"51.498047","-0.098063","2011-03-22 08:05:35"
|
||||
5937,"51.498093","-0.097997","2011-03-22 08:05:36"
|
||||
5937,"51.498146","-0.097935","2011-03-22 08:05:37"
|
||||
5937,"51.498199","-0.097876","2011-03-22 08:05:38"
|
||||
5937,"51.49826","-0.097817","2011-03-22 08:05:39"
|
||||
5937,"51.498325","-0.097759","2011-03-22 08:05:40"
|
||||
5937,"51.498383","-0.097703","2011-03-22 08:05:41"
|
||||
5937,"51.498497","-0.09759","2011-03-22 08:05:43"
|
||||
5937,"51.498554","-0.097533","2011-03-22 08:05:44"
|
||||
5937,"51.498615","-0.097469","2011-03-22 08:05:45"
|
||||
5937,"51.498676","-0.097413","2011-03-22 08:05:46"
|
||||
5937,"51.498734","-0.097358","2011-03-22 08:05:47"
|
||||
5937,"51.498798","-0.097304","2011-03-22 08:05:48"
|
||||
5937,"51.498856","-0.097249","2011-03-22 08:05:49"
|
||||
5937,"51.49897","-0.097143","2011-03-22 08:05:51"
|
||||
5937,"51.499077","-0.097071","2011-03-22 08:05:53"
|
||||
5937,"51.499134","-0.097101","2011-03-22 08:05:56"
|
||||
5937,"51.49921","-0.097325","2011-03-22 08:05:57"
|
||||
5937,"51.49921","-0.097423","2011-03-22 08:05:58"
|
||||
5937,"51.49921","-0.097535","2011-03-22 08:05:59"
|
||||
5937,"51.49921","-0.097643","2011-03-22 08:06:00"
|
||||
5937,"51.49921","-0.097747","2011-03-22 08:06:05"
|
||||
5937,"51.499207","-0.097947","2011-03-22 08:06:07"
|
||||
5937,"51.499168","-0.098414","2011-03-22 08:06:08"
|
||||
5937,"51.499165","-0.098496","2011-03-22 08:06:09"
|
||||
5937,"51.499157","-0.098581","2011-03-22 08:06:10"
|
||||
5937,"51.499153","-0.098665","2011-03-22 08:06:11"
|
||||
5937,"51.499149","-0.098752","2011-03-22 08:06:12"
|
||||
5937,"51.499153","-0.099004","2011-03-22 08:06:15"
|
||||
5937,"51.499149","-0.099088","2011-03-22 08:06:16"
|
||||
5937,"51.499149","-0.099173","2011-03-22 08:06:17"
|
||||
5937,"51.499149","-0.099256","2011-03-22 08:06:18"
|
||||
5937,"51.499142","-0.099335","2011-03-22 08:06:19"
|
||||
5937,"51.499119","-0.099413","2011-03-22 08:06:20"
|
||||
5937,"51.499104","-0.099478","2011-03-22 08:06:21"
|
||||
5937,"51.499088","-0.09953","2011-03-22 08:06:23"
|
||||
5937,"51.499084","-0.09969","2011-03-22 08:06:26"
|
||||
5937,"51.499077","-0.099839","2011-03-22 08:06:29"
|
||||
5937,"51.499077","-0.099934","2011-03-22 08:06:30"
|
||||
5937,"51.499065","-0.100066","2011-03-22 08:06:31"
|
||||
5937,"51.499058","-0.100195","2011-03-22 08:06:32"
|
||||
5937,"51.499046","-0.100355","2011-03-22 08:06:33"
|
||||
5937,"51.499027","-0.100509","2011-03-22 08:06:34"
|
||||
5937,"51.499012","-0.100647","2011-03-22 08:06:35"
|
||||
5937,"51.498997","-0.100773","2011-03-22 08:06:36"
|
||||
5937,"51.498981","-0.10089","2011-03-22 08:06:37"
|
||||
5937,"51.498947","-0.10111","2011-03-22 08:06:41"
|
||||
5937,"51.49892","-0.101314","2011-03-22 08:06:43"
|
||||
5937,"51.498882","-0.101592","2011-03-22 08:06:45"
|
||||
5937,"51.498863","-0.101782","2011-03-22 08:06:46"
|
||||
5937,"51.498856","-0.101868","2011-03-22 08:06:47"
|
||||
5937,"51.498844","-0.101953","2011-03-22 08:06:48"
|
||||
5937,"51.498821","-0.102125","2011-03-22 08:06:50"
|
||||
5937,"51.498833","-0.102038","2011-03-22 08:06:51"
|
||||
5937,"51.498806","-0.102307","2011-03-22 08:06:52"
|
||||
5937,"51.498795","-0.102402","2011-03-22 08:06:53"
|
||||
5937,"51.498783","-0.102496","2011-03-22 08:06:54"
|
||||
5937,"51.498775","-0.10259","2011-03-22 08:06:55"
|
||||
5937,"51.498768","-0.102684","2011-03-22 08:06:56"
|
||||
5937,"51.49876","-0.102775","2011-03-22 08:06:57"
|
||||
5937,"51.498756","-0.102867","2011-03-22 08:06:58"
|
||||
5937,"51.498753","-0.10296","2011-03-22 08:06:59"
|
||||
5937,"51.498756","-0.103059","2011-03-22 08:07:00"
|
||||
5937,"51.498764","-0.103161","2011-03-22 08:07:03"
|
||||
5937,"51.498756","-0.103535","2011-03-22 08:07:06"
|
||||
5937,"51.498745","-0.103599","2011-03-22 08:07:07"
|
||||
5937,"51.498737","-0.10366","2011-03-22 08:07:08"
|
||||
5937,"51.498734","-0.10371","2011-03-22 08:07:09"
|
||||
5937,"51.49873","-0.103754","2011-03-22 08:07:10"
|
||||
5937,"51.498745","-0.103827","2011-03-22 08:07:12"
|
||||
5937,"51.498745","-0.10387","2011-03-22 08:07:13"
|
||||
5937,"51.498734","-0.103999","2011-03-22 08:07:19"
|
||||
5937,"51.498772","-0.104146","2011-03-22 08:07:26"
|
||||
5937,"51.49889","-0.104248","2011-03-22 08:07:30"
|
||||
5937,"51.498978","-0.104295","2011-03-22 08:07:33"
|
||||
5937,"51.499039","-0.104436","2011-03-22 08:07:37"
|
||||
5937,"51.499062","-0.104547","2011-03-22 08:07:39"
|
||||
5937,"51.4991","-0.104568","2011-03-22 08:07:40"
|
||||
5937,"51.499142","-0.104586","2011-03-22 08:07:41"
|
||||
5937,"51.499184","-0.104606","2011-03-22 08:07:42"
|
||||
5937,"51.499245","-0.104619","2011-03-22 08:07:43"
|
||||
5937,"51.499302","-0.104629","2011-03-22 08:07:44"
|
||||
5937,"51.499359","-0.10463","2011-03-22 08:07:45"
|
||||
5937,"51.499416","-0.104627","2011-03-22 08:07:46"
|
||||
5937,"51.499466","-0.104625","2011-03-22 08:07:47"
|
||||
5937,"51.499508","-0.104622","2011-03-22 08:07:48"
|
||||
5937,"51.499557","-0.10462","2011-03-22 08:07:49"
|
||||
5937,"51.499619","-0.104606","2011-03-22 08:07:50"
|
||||
5937,"51.49968","-0.104577","2011-03-22 08:07:51"
|
||||
5937,"51.499741","-0.104549","2011-03-22 08:07:52"
|
||||
5937,"51.499802","-0.104518","2011-03-22 08:07:53"
|
||||
5937,"51.500034","-0.104437","2011-03-22 08:07:57"
|
||||
5937,"51.499863","-0.104485","2011-03-22 08:07:58"
|
||||
5937,"51.500145","-0.104423","2011-03-22 08:07:59"
|
||||
5937,"51.500198","-0.104419","2011-03-22 08:08:00"
|
||||
5937,"51.500256","-0.104414","2011-03-22 08:08:35"
|
||||
5937,"51.500832","-0.104443","2011-03-22 08:08:37"
|
||||
5937,"51.501404","-0.104541","2011-03-22 08:08:38"
|
||||
5937,"51.501457","-0.104545","2011-03-22 08:08:39"
|
||||
5937,"51.501797","-0.104482","2011-03-22 08:08:40"
|
||||
5937,"51.502518","-0.104429","2011-03-22 08:08:41"
|
||||
5937,"51.502579","-0.104428","2011-03-22 08:08:43"
|
||||
5937,"51.502705","-0.104402","2011-03-22 08:08:44"
|
||||
5937,"51.502758","-0.104394","2011-03-22 08:08:45"
|
||||
5937,"51.502811","-0.104387","2011-03-22 08:08:46"
|
||||
5937,"51.502865","-0.104379","2011-03-22 08:08:47"
|
||||
5937,"51.502918","-0.104369","2011-03-22 08:08:48"
|
||||
5937,"51.502968","-0.104362","2011-03-22 08:08:49"
|
||||
5937,"51.503048","-0.104358","2011-03-22 08:08:50"
|
||||
5937,"51.503128","-0.10435","2011-03-22 08:08:51"
|
||||
5937,"51.503201","-0.104344","2011-03-22 08:08:52"
|
||||
5937,"51.503262","-0.104341","2011-03-22 08:08:53"
|
||||
5937,"51.503323","-0.104383","2011-03-22 08:08:54"
|
||||
5937,"51.503407","-0.104392","2011-03-22 08:08:55"
|
||||
5937,"51.503483","-0.104412","2011-03-22 08:08:56"
|
||||
5937,"51.503544","-0.104448","2011-03-22 08:08:57"
|
||||
5937,"51.503616","-0.10447","2011-03-22 08:08:58"
|
||||
5937,"51.503704","-0.104487","2011-03-22 08:08:59"
|
||||
5937,"51.503788","-0.104495","2011-03-22 08:09:00"
|
||||
5937,"51.50388","-0.104484","2011-03-22 08:09:01"
|
||||
5937,"51.504051","-0.104468","2011-03-22 08:09:03"
|
||||
5937,"51.504131","-0.104459","2011-03-22 08:09:04"
|
||||
5937,"51.504204","-0.104449","2011-03-22 08:09:05"
|
||||
5937,"51.50428","-0.104445","2011-03-22 08:09:06"
|
||||
5937,"51.504364","-0.104445","2011-03-22 08:09:07"
|
||||
5937,"51.504444","-0.104443","2011-03-22 08:09:08"
|
||||
5937,"51.504524","-0.104436","2011-03-22 08:09:09"
|
||||
5937,"51.504604","-0.104429","2011-03-22 08:09:10"
|
||||
5937,"51.504681","-0.104425","2011-03-22 08:09:11"
|
||||
5937,"51.504757","-0.104425","2011-03-22 08:09:12"
|
||||
5937,"51.504829","-0.104436","2011-03-22 08:09:13"
|
||||
5937,"51.504902","-0.104464","2011-03-22 08:09:14"
|
||||
5937,"51.50499","-0.104503","2011-03-22 08:09:15"
|
||||
5937,"51.505074","-0.104526","2011-03-22 08:09:16"
|
||||
5937,"51.505154","-0.104542","2011-03-22 08:09:17"
|
||||
5937,"51.50523","-0.104546","2011-03-22 08:09:18"
|
||||
5937,"51.505302","-0.104546","2011-03-22 08:09:19"
|
||||
5937,"51.505375","-0.104547","2011-03-22 08:09:20"
|
||||
5937,"51.505444","-0.104547","2011-03-22 08:09:21"
|
||||
5937,"51.505573","-0.104539","2011-03-22 08:09:23"
|
||||
5937,"51.505638","-0.104522","2011-03-22 08:09:24"
|
||||
5937,"51.505699","-0.1045","2011-03-22 08:09:25"
|
||||
5937,"51.50576","-0.104476","2011-03-22 08:09:26"
|
||||
5937,"51.505814","-0.104451","2011-03-22 08:09:27"
|
||||
5937,"51.505939","-0.10439","2011-03-22 08:09:29"
|
||||
5937,"51.506004","-0.104366","2011-03-22 08:09:30"
|
||||
5937,"51.506065","-0.104349","2011-03-22 08:09:31"
|
||||
5937,"51.506126","-0.104337","2011-03-22 08:09:32"
|
||||
5937,"51.506187","-0.104329","2011-03-22 08:09:33"
|
||||
5937,"51.506248","-0.104325","2011-03-22 08:09:34"
|
||||
5937,"51.506313","-0.104322","2011-03-22 08:09:35"
|
||||
5937,"51.506378","-0.104318","2011-03-22 08:09:36"
|
||||
5937,"51.506447","-0.104312","2011-03-22 08:09:37"
|
||||
5937,"51.506512","-0.104304","2011-03-22 08:09:38"
|
||||
5937,"51.506573","-0.104298","2011-03-22 08:09:39"
|
||||
5937,"51.506638","-0.104288","2011-03-22 08:09:40"
|
||||
5937,"51.506699","-0.104279","2011-03-22 08:09:41"
|
||||
5937,"51.506813","-0.104267","2011-03-22 08:09:43"
|
||||
5937,"51.506836","-0.104259","2011-03-22 08:09:44"
|
||||
5937,"51.506863","-0.104254","2011-03-22 08:09:45"
|
||||
5937,"51.506889","-0.104248","2011-03-22 08:09:46"
|
||||
5937,"51.506985","-0.104248","2011-03-22 08:09:51"
|
||||
5937,"51.506985","-0.104248","2011-03-22 08:10:04"
|
||||
5937,"51.507095","-0.10428","2011-03-22 08:10:20"
|
||||
5937,"51.507172","-0.104337","2011-03-22 08:10:21"
|
||||
5937,"51.507233","-0.104356","2011-03-22 08:10:22"
|
||||
5937,"51.507305","-0.104375","2011-03-22 08:10:23"
|
||||
5937,"51.507381","-0.10439","2011-03-22 08:10:24"
|
||||
5937,"51.507462","-0.1044","2011-03-22 08:10:25"
|
||||
5937,"51.507538","-0.104407","2011-03-22 08:10:26"
|
||||
5937,"51.507618","-0.104409","2011-03-22 08:10:27"
|
||||
5937,"51.507702","-0.104451","2011-03-22 08:10:28"
|
||||
5937,"51.50779","-0.104492","2011-03-22 08:10:29"
|
||||
5937,"51.507881","-0.104528","2011-03-22 08:10:30"
|
||||
5937,"51.507957","-0.10454","2011-03-22 08:10:31"
|
||||
5937,"51.508018","-0.10452","2011-03-22 08:10:32"
|
||||
5937,"51.508083","-0.104481","2011-03-22 08:10:33"
|
||||
5937,"51.508144","-0.104452","2011-03-22 08:10:34"
|
||||
5937,"51.50856","-0.104023","2011-03-22 08:10:38"
|
||||
5937,"51.50843","-0.103953","2011-03-22 08:10:39"
|
||||
5937,"51.508656","-0.104162","2011-03-22 08:10:40"
|
||||
5937,"51.50869","-0.104322","2011-03-22 08:10:41"
|
||||
5937,"51.508751","-0.104478","2011-03-22 08:10:43"
|
||||
5937,"51.508793","-0.104493","2011-03-22 08:10:45"
|
||||
5937,"51.508896","-0.104509","2011-03-22 08:10:46"
|
||||
5937,"51.508949","-0.104515","2011-03-22 08:10:47"
|
||||
5937,"51.508999","-0.104518","2011-03-22 08:10:48"
|
||||
5937,"51.509052","-0.104521","2011-03-22 08:10:49"
|
||||
5937,"51.509106","-0.104522","2011-03-22 08:10:50"
|
||||
5937,"51.509155","-0.10452","2011-03-22 08:10:51"
|
||||
5937,"51.509209","-0.104516","2011-03-22 08:10:52"
|
||||
5937,"51.509262","-0.104509","2011-03-22 08:10:53"
|
||||
5937,"51.509312","-0.104503","2011-03-22 08:10:54"
|
||||
5937,"51.509365","-0.104499","2011-03-22 08:10:55"
|
||||
5937,"51.509418","-0.104496","2011-03-22 08:10:56"
|
||||
5937,"51.509521","-0.10449","2011-03-22 08:10:58"
|
||||
5937,"51.509571","-0.104486","2011-03-22 08:10:59"
|
||||
5937,"51.509571","-0.104486","2011-03-22 08:11:09"
|
||||
5937,"51.510185","-0.104531","2011-03-22 08:11:11"
|
||||
5937,"51.510265","-0.104538","2011-03-22 08:11:12"
|
||||
5937,"51.510376","-0.104491","2011-03-22 08:11:13"
|
||||
5937,"51.51046","-0.104484","2011-03-22 08:11:14"
|
||||
5937,"51.510517","-0.104488","2011-03-22 08:11:15"
|
||||
5937,"51.510525","-0.104497","2011-03-22 08:11:16"
|
||||
5937,"51.510601","-0.104443","2011-03-22 08:11:17"
|
||||
5937,"51.510658","-0.104441","2011-03-22 08:11:18"
|
||||
5937,"51.510708","-0.104441","2011-03-22 08:11:19"
|
||||
5937,"51.510761","-0.10444","2011-03-22 08:11:20"
|
||||
5937,"51.510803","-0.104441","2011-03-22 08:11:25"
|
||||
5937,"51.510838","-0.104445","2011-03-22 08:11:26"
|
||||
5937,"51.510899","-0.104471","2011-03-22 08:11:27"
|
||||
5937,"51.510899","-0.104471","2011-03-22 08:11:45"
|
||||
5937,"51.510841","-0.104327","2011-03-22 08:11:54"
|
||||
5937,"51.510902","-0.104415","2011-03-22 08:12:05"
|
||||
5937,"51.510902","-0.104483","2011-03-22 08:12:06"
|
||||
5937,"51.510891","-0.104563","2011-03-22 08:12:07"
|
||||
5937,"51.510876","-0.10465","2011-03-22 08:12:08"
|
||||
5937,"51.51088","-0.104766","2011-03-22 08:12:09"
|
||||
5937,"51.510887","-0.104893","2011-03-22 08:12:10"
|
||||
5937,"51.510906","-0.105019","2011-03-22 08:12:11"
|
||||
5937,"51.510921","-0.105143","2011-03-22 08:12:12"
|
||||
5937,"51.510933","-0.105266","2011-03-22 08:12:13"
|
||||
5937,"51.510941","-0.105382","2011-03-22 08:12:14"
|
||||
5937,"51.510944","-0.1055","2011-03-22 08:12:15"
|
||||
5937,"51.510948","-0.10562","2011-03-22 08:12:16"
|
||||
5937,"51.510952","-0.105744","2011-03-22 08:12:17"
|
||||
5937,"51.510952","-0.105869","2011-03-22 08:12:18"
|
||||
5937,"51.510952","-0.105997","2011-03-22 08:12:19"
|
||||
5937,"51.510956","-0.106125","2011-03-22 08:12:20"
|
||||
5937,"51.510956","-0.106258","2011-03-22 08:12:21"
|
||||
5937,"51.510956","-0.106535","2011-03-22 08:12:23"
|
||||
5937,"51.510956","-0.106674","2011-03-22 08:12:24"
|
||||
5937,"51.510956","-0.106814","2011-03-22 08:12:25"
|
||||
5937,"51.510956","-0.106956","2011-03-22 08:12:26"
|
||||
5937,"51.51096","-0.107093","2011-03-22 08:12:27"
|
||||
5937,"51.510963","-0.107442","2011-03-22 08:12:30"
|
||||
5937,"51.510963","-0.10753","2011-03-22 08:12:31"
|
||||
5937,"51.510963","-0.107613","2011-03-22 08:12:32"
|
||||
5937,"51.510963","-0.107675","2011-03-22 08:12:33"
|
||||
5937,"51.510967","-0.107732","2011-03-22 08:12:34"
|
||||
5937,"51.510971","-0.107791","2011-03-22 08:12:35"
|
||||
5937,"51.510971","-0.107849","2011-03-22 08:12:36"
|
||||
5937,"51.510971","-0.107901","2011-03-22 08:12:37"
|
||||
5937,"51.510971","-0.107952","2011-03-22 08:12:38"
|
||||
5937,"51.510979","-0.107989","2011-03-22 08:12:39"
|
||||
5937,"51.510979","-0.108029","2011-03-22 08:12:40"
|
||||
5937,"51.510983","-0.108073","2011-03-22 08:12:41"
|
||||
5937,"51.51099","-0.108123","2011-03-22 08:12:42"
|
||||
5937,"51.510998","-0.108175","2011-03-22 08:12:43"
|
||||
5937,"51.511005","-0.108226","2011-03-22 08:12:44"
|
||||
5937,"51.511017","-0.108275","2011-03-22 08:12:45"
|
||||
5937,"51.511024","-0.10832","2011-03-22 08:12:46"
|
||||
5937,"51.51104","-0.108357","2011-03-22 08:12:47"
|
||||
5937,"51.511047","-0.108391","2011-03-22 08:12:48"
|
||||
5937,"51.510998","-0.108486","2011-03-22 08:13:02"
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
|
@ -0,0 +1,309 @@
|
|||
"Acton Town",51.503071,-0.280303
|
||||
"Aldgate",51.514342,-0.075627
|
||||
"Aldgate East",51.51503,-0.073162
|
||||
"All Saints (DLR)",51.510477,-0.012625
|
||||
"Alperton",51.541209,-0.299516
|
||||
"Amersham",51.674129,-0.606514
|
||||
"Angel",51.532968,-0.105581
|
||||
"Archway",51.565491,-0.135122
|
||||
"Arnos Grove",51.61623,-0.13427
|
||||
"Arsenal",51.55855,-0.105456
|
||||
"Baker Street",51.52313,-0.156904
|
||||
"Balham",51.443183,-0.152685
|
||||
"Bank",51.513347,-0.089
|
||||
"Barbican",51.520215,-0.097722
|
||||
"Barking",51.539521,0.080832
|
||||
"Barkingside",51.586008,0.091227
|
||||
"Barons Court",51.490229,-0.21343
|
||||
"Bayswater",51.512111,-0.187902
|
||||
"Beckton (DLR)",51.51499,0.06089
|
||||
"Beckton Park (DLR)",51.509994,0.055534
|
||||
"Becontree",51.539585,0.12688
|
||||
"Belsize Park",51.550191,-0.163974
|
||||
"Bermondsey",51.497961,-0.06433
|
||||
"Bethnal Green",51.527192,-0.055392
|
||||
"Blackfriars",51.511587,-0.102995
|
||||
"Blackhorse Road",51.585777,-0.039626
|
||||
"Blackwall (DLR)",51.508728,-0.0076
|
||||
"Bond Street",51.51381,-0.14933
|
||||
"Borough",51.501049,-0.094197
|
||||
"Boston Manor",51.495766,-0.324747
|
||||
"Bounds Green",51.608409,-0.126489
|
||||
"Bow Church (DLR)",51.527615,-0.0205
|
||||
"Bow Road",51.527042,-0.02436
|
||||
"Brent Cross",51.576599,-0.213336
|
||||
"Brixton",51.462737,-0.114552
|
||||
"Bromley-by-Bow",51.52484,-0.011682
|
||||
"Buckhurst Hill",51.62652,0.04672
|
||||
"Burnt Oak",51.602508,-0.26439
|
||||
"Caledonian Road",51.547139,-0.118334
|
||||
"Camden Town",51.539701,-0.142564
|
||||
"Canada Water",51.498168,-0.050807
|
||||
"Canary Wharf (DLR)",51.505505,-0.018
|
||||
"Canning Town",51.514738,0.009079
|
||||
"Cannon Street",51.511362,-0.090251
|
||||
"Canons Park",51.607651,-0.294392
|
||||
"Chalfont & Latimer",51.667898,-0.560996
|
||||
"Chalk Farm",51.544149,-0.153733
|
||||
"Chancery Lane",51.518494,-0.111962
|
||||
"Charing Cross",51.508359,-0.124803
|
||||
"Chesham",51.70538,-0.61143
|
||||
"Chigwell",51.617858,0.076179
|
||||
"Chiswick Park",51.494371,-0.267737
|
||||
"Chorleywood",51.654266,-0.518334
|
||||
"Clapham Common",51.461804,-0.138315
|
||||
"Clapham North",51.464916,-0.12991
|
||||
"Clapham South",51.452676,-0.147984
|
||||
"Cockfosters",51.652024,-0.149917
|
||||
"Colindale",51.595247,-0.250157
|
||||
"Colliers Wood",51.418279,-0.177765
|
||||
"Covent Garden",51.51276,-0.124507
|
||||
"Crossharbour & London Arena (DLR)",51.49604,-0.015039
|
||||
"Croxley",51.647005,-0.441604
|
||||
"Custom House",51.509863,0.026936
|
||||
"Cutty Sark for Maritime Greenwich (DLR)",51.48206,-0.01049
|
||||
"Cyprus (DLR)",51.509496,0.062933
|
||||
"Dagenham East",51.544187,0.165833
|
||||
"Dagenham Heathway",51.541212,0.14768
|
||||
"Debden",51.645492,0.083801
|
||||
"Deptford Bridge (DLR)",51.474477,-0.022052
|
||||
"Devons Road (DLR)",51.522258,-0.018008
|
||||
"Dollis Hill",51.550926,-0.236526
|
||||
"Ealing Broadway",51.514857,-0.301679
|
||||
"Ealing Common",51.510249,-0.287151
|
||||
"Earls Court",51.491357,-0.194314
|
||||
"East Acton",51.516299,-0.248068
|
||||
"East Finchley",51.587333,-0.164744
|
||||
"East Ham",51.538996,0.051447
|
||||
"East India (DLR)",51.508684,-0.00237
|
||||
"East Putney",51.45888,-0.210998
|
||||
"Eastcote",51.576552,-0.396823
|
||||
"Edgware",51.61423,-0.275094
|
||||
"Edgware Road (Bakerloo)",51.520319,-0.170365
|
||||
"Edgware Road (Circle/District/H&C)",51.519998,-0.167668
|
||||
"Elephant & Castle",51.495849,-0.100739
|
||||
"Elm Park",51.549125,0.197253
|
||||
"Elverson Road (DLR)",51.468372,-0.016816
|
||||
"Embankment",51.507312,-0.122367
|
||||
"Epping",51.693686,0.113826
|
||||
"Euston",51.528664,-0.133296
|
||||
"Euston Square",51.52579,-0.13578
|
||||
"Fairlop",51.59611,0.090593
|
||||
"Farringdon",51.520196,-0.104843
|
||||
"Finchley Central",51.600903,-0.193221
|
||||
"Finchley Road",51.547096,-0.180051
|
||||
"Finsbury Park",51.564635,-0.105881
|
||||
"Fulham Broadway",51.480603,-0.194955
|
||||
"Gallions Reach (DLR)",51.508613,0.069148
|
||||
"Gants Hill",51.576549,0.066315
|
||||
"Gloucester Road",51.4945,-0.183544
|
||||
"Golders Green",51.572216,-0.194835
|
||||
"Goldhawk Road",51.502077,-0.227404
|
||||
"Goodge Street",51.520613,-0.134808
|
||||
"Grange Hill",51.61344,0.092545
|
||||
"Great Portland Street",51.523721,-0.143965
|
||||
"Green Park",51.50687,-0.14336
|
||||
"Greenford",51.54198,-0.345879
|
||||
"Greenwich",51.477548,-0.014863
|
||||
"Gunnersbury",51.491863,-0.275164
|
||||
"Hainault",51.602845,0.094109
|
||||
"Hammersmith (District)",51.49182,-0.222861
|
||||
"Hammersmith (Met.)",51.493483,-0.22464
|
||||
"Hampstead",51.556543,-0.178015
|
||||
"Hanger Lane",51.530056,-0.293141
|
||||
"Harlesden",51.536258,-0.257496
|
||||
"Harrow & Wealdstone",51.592595,-0.334253
|
||||
"Harrow-on-the-Hill",51.579388,-0.337002
|
||||
"Hatton Cross",51.466685,-0.423381
|
||||
"Heathrow Terminals 1 2 3",51.471268,-0.452854
|
||||
"Heathrow Terminal 4",51.45895,-0.44568
|
||||
"Heathrow Terminal 5",51.471302,-0.487827
|
||||
"Hendon Central",51.583133,-0.226734
|
||||
"Heron Quays (DLR)",51.5029,-0.020822
|
||||
"High Barnet",51.651688,-0.194165
|
||||
"Highbury & Islington",51.546496,-0.104082
|
||||
"Highgate",51.577647,-0.146935
|
||||
"High Street Kensington",51.500729,-0.191566
|
||||
"Hillingdon",51.553778,-0.449898
|
||||
"Holborn",51.517236,-0.119841
|
||||
"Holland Park",51.507146,-0.206558
|
||||
"Holloway Road",51.552816,-0.112936
|
||||
"Hornchurch",51.554355,0.218927
|
||||
"Hounslow Central",51.470926,-0.365958
|
||||
"Hounslow East",51.47324,-0.357193
|
||||
"Hounslow West",51.473106,-0.385708
|
||||
"Hyde Park Corner",51.502309,-0.15443
|
||||
"Ickenham",51.560825,-0.44158
|
||||
"Island Gardens (DLR)",51.487887,-0.012095
|
||||
"Kennington",51.488662,-0.105071
|
||||
"Kensal Green",51.530524,-0.224713
|
||||
"Kensington (Olympia)",51.49788,-0.210379
|
||||
"Kentish Town",51.550101,-0.140583
|
||||
"Kenton",51.581496,-0.315217
|
||||
"Kew Gardens",51.476789,-0.285381
|
||||
"Kilburn",51.546944,-0.204633
|
||||
"Kilburn Park",51.535136,-0.193966
|
||||
"Kings Cross St. Pancras",51.53039,-0.12396
|
||||
"Kingsbury",51.584877,-0.278602
|
||||
"King George V (DLR)",51.500889,0.063496
|
||||
"Knightsbridge",51.50151,-0.16048
|
||||
"Ladbroke Grove",51.517257,-0.210297
|
||||
"Lambeth North",51.49913,-0.111768
|
||||
"Lancaster Gate",51.511891,-0.17543
|
||||
"Latimer Road",51.513958,-0.21746
|
||||
"Leicester Square",51.511291,-0.128242
|
||||
"Lewisham",51.46532,-0.0134
|
||||
"Leyton",51.558132,-0.006465
|
||||
"Leytonstone",51.568514,0.009126
|
||||
"Limehouse",51.512312,-0.03938
|
||||
"Liverpool Street",51.517598,-0.08225
|
||||
"London Bridge",51.504674,-0.086006
|
||||
"Langdon Park (DLR)",51.515273,-0.012286
|
||||
"London City Airport (DLR)",51.502538,0.048397
|
||||
"Loughton",51.64157,0.055279
|
||||
"Maida Vale",51.529995,-0.185433
|
||||
"Manor House",51.571455,-0.096088
|
||||
"Mansion House",51.512092,-0.094198
|
||||
"Marble Arch",51.51356,-0.15845
|
||||
"Marylebone",51.522397,-0.163493
|
||||
"Mile End",51.525311,-0.032666
|
||||
"Mill Hill East",51.608612,-0.210375
|
||||
"Monument",51.51063,-0.086188
|
||||
"Moor Park",51.629931,-0.432913
|
||||
"Moorgate",51.518518,-0.088438
|
||||
"Morden",51.402194,-0.19478
|
||||
"Mornington Crescent",51.534362,-0.138744
|
||||
"Mudchute (DLR)",51.492192,-0.015624
|
||||
"Neasden",51.554628,-0.250115
|
||||
"New Cross",51.476402,-0.031733
|
||||
"New Cross Gate",51.475152,-0.039764
|
||||
"Newbury Park",51.575648,0.090275
|
||||
"North Acton",51.523432,-0.25973
|
||||
"North Ealing",51.517622,-0.288994
|
||||
"North Greenwich",51.500297,0.003214
|
||||
"North Harrow",51.584631,-0.362633
|
||||
"North Wembley",51.562396,-0.303948
|
||||
"Northfields",51.500761,-0.315055
|
||||
"Northolt",51.548213,-0.368441
|
||||
"Northwick Park",51.579338,-0.319583
|
||||
"Northwood",51.611214,-0.423838
|
||||
"Northwood Hills",51.6005,-0.4092
|
||||
"Notting Hill Gate",51.509392,-0.195834
|
||||
"Oakwood",51.647638,-0.131854
|
||||
"Old Street",51.52567,-0.087562
|
||||
"Osterley",51.482184,-0.351788
|
||||
"Oval",51.481616,-0.113125
|
||||
"Oxford Circus",51.51511,-0.1417
|
||||
"Paddington",51.515394,-0.175737
|
||||
"Park Royal",51.526834,-0.284929
|
||||
"Parsons Green",51.476255,-0.201131
|
||||
"Perivale",51.536342,-0.32307
|
||||
"Piccadilly Circus",51.50986,-0.1337
|
||||
"Pimlico",51.489553,-0.133108
|
||||
"Pinner",51.592362,-0.381224
|
||||
"Plaistow",51.531288,0.017781
|
||||
"Pontoon Dock (DLR)",51.502529,0.026193
|
||||
"Poplar (DLR)",51.508686,-0.016781
|
||||
"Preston Road",51.57202,-0.2952
|
||||
"Prince Regent (DLR)",51.51059,0.0322
|
||||
"Pudding Mill Lane (DLR)",51.533756,-0.012447
|
||||
"Putney Bridge",51.4679,-0.209306
|
||||
"Queens Park",51.534358,-0.204825
|
||||
"Queensbury",51.593883,-0.286332
|
||||
"Queensway",51.510449,-0.18742
|
||||
"Ravenscourt Park",51.495538,-0.236273
|
||||
"Rayners Lane",51.5751,-0.3712
|
||||
"Redbridge",51.576367,0.045394
|
||||
"Regents Park",51.52347,-0.1468
|
||||
"Richmond",51.464125,-0.300655
|
||||
"Rickmansworth",51.640323,-0.473685
|
||||
"Roding Valley",51.616956,0.044026
|
||||
"Rotherhithe",51.501595,-0.052966
|
||||
"Royal Albert (DLR)",51.508494,0.045177
|
||||
"Royal Oak",51.518294,-0.188824
|
||||
"Royal Victoria (DLR)",51.509995,0.017704
|
||||
"Ruislip",51.572162,-0.421235
|
||||
"Ruislip Gardens",51.55996,-0.409294
|
||||
"Ruislip Manor",51.573452,-0.412849
|
||||
"Russell Square",51.523013,-0.12459
|
||||
"Seven Sisters",51.582393,-0.07424
|
||||
"Shadwell (DLR)",51.5113,-0.056919
|
||||
"Shepherds Bush",51.504849,-0.218665
|
||||
"Shepherds Bush Market",51.505881,-0.2274
|
||||
"Shoreditch",51.522709,-0.070921
|
||||
"Sloane Square",51.49236,-0.156489
|
||||
"Snaresbrook",51.58103,0.021268
|
||||
"South Ealing",51.501644,-0.30704
|
||||
"South Harrow",51.56468,-0.351894
|
||||
"South Kensington",51.494071,-0.173923
|
||||
"South Kenton",51.571108,-0.308155
|
||||
"South Quay (DLR)",51.5006,-0.0191
|
||||
"South Ruislip",51.556578,-0.398636
|
||||
"South Wimbledon",51.415437,-0.191684
|
||||
"South Woodford",51.591781,0.028242
|
||||
"Southfields",51.446218,-0.205708
|
||||
"Southgate",51.632376,-0.12777
|
||||
"Southwark",51.50386,-0.105
|
||||
"St. Jamess Park",51.499418,-0.134276
|
||||
"St. Johns Wood",51.534854,-0.174065
|
||||
"St. Pauls",51.514616,-0.097364
|
||||
"Stamford Brook",51.494387,-0.245278
|
||||
"Stanmore",51.619673,-0.303099
|
||||
"Stepney Green",51.521839,-0.047173
|
||||
"Stockwell",51.47109,-0.124589
|
||||
"Stonebridge Park",51.543987,-0.2754
|
||||
"Stratford",51.541693,-0.003752
|
||||
"Sudbury Hill",51.55734,-0.336392
|
||||
"Sudbury Town",51.551397,-0.316343
|
||||
"Surrey Quays",51.4931,-0.047235
|
||||
"Swiss Cottage",51.543035,-0.175627
|
||||
"Temple",51.511041,-0.113726
|
||||
"Theydon Bois",51.672552,0.102891
|
||||
"Tooting Bec",51.43578,-0.1596
|
||||
"Tooting Broadway",51.427049,-0.168685
|
||||
"Tottenham Court Road",51.516206,-0.13087
|
||||
"Tottenham Hale",51.588878,-0.062821
|
||||
"Totteridge & Whetstone",51.630781,-0.179044
|
||||
"Tower Gateway (DLR)",51.51062,-0.0741
|
||||
"Tower Hill",51.510394,-0.076701
|
||||
"Tufnell Park",51.556441,-0.137742
|
||||
"Turnham Green",51.495182,-0.254525
|
||||
"Turnpike Lane",51.590358,-0.102805
|
||||
"Upminster",51.558764,0.250896
|
||||
"Upminster Bridge",51.557719,0.234542
|
||||
"Upney",51.538406,0.101532
|
||||
"Upton Park",51.536628,0.034542
|
||||
"Uxbridge",51.546455,-0.477102
|
||||
"Vauxhall",51.484833,-0.126416
|
||||
"Victoria",51.496424,-0.143921
|
||||
"Walthamstow Central",51.583018,-0.019941
|
||||
"Wanstead",51.574984,0.028706
|
||||
"Wapping",51.504416,-0.055541
|
||||
"Warren Street",51.52458,-0.138278
|
||||
"Warwick Avenue",51.523104,-0.182953
|
||||
"Waterloo",51.503573,-0.114077
|
||||
"Watford",51.65747,-0.41726
|
||||
"Wembley Central",51.551709,-0.296196
|
||||
"Wembley Park",51.563349,-0.279227
|
||||
"West Acton",51.51777,-0.280657
|
||||
"West Brompton",51.487329,-0.195539
|
||||
"West Finchley",51.609263,-0.188917
|
||||
"West Ham",51.528526,0.005317
|
||||
"West Hampstead",51.546717,-0.190969
|
||||
"West Harrow",51.578924,-0.353847
|
||||
"West India Quay (DLR)",51.508299,-0.018902
|
||||
"West Silvertown (DLR)",51.501475,0.021045
|
||||
"West Kensington",51.490109,-0.206204
|
||||
"West Ruislip",51.569588,-0.43786
|
||||
"Westbourne Park",51.520989,-0.200883
|
||||
"Westferry (DLR)",51.50944,-0.0268
|
||||
"Westminster",51.501402,-0.125002
|
||||
"White City",51.512232,-0.224632
|
||||
"Whitechapel",51.519588,-0.05942
|
||||
"Willesden Green",51.549373,-0.222408
|
||||
"Willesden Junction",51.532994,-0.243
|
||||
"Wimbledon",51.421108,-0.206663
|
||||
"Wimbledon Park",51.434581,-0.199186
|
||||
"Wood Green",51.597454,-0.109527
|
||||
"Woodford",51.607332,0.033817
|
||||
"Woodside Park",51.617868,-0.185426
|
|
|
@ -0,0 +1,645 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||
<!--Created by yEd 3.21.1-->
|
||||
<key attr.name="Description" attr.type="string" for="graph" id="d0"/>
|
||||
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||
<key for="graphml" id="d7" yfiles.type="resources"/>
|
||||
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||
<graph edgedefault="directed" id="G">
|
||||
<data key="d0"/>
|
||||
<node id="n0" yfiles.foldertype="group">
|
||||
<data key="d4" xml:space="preserve"/>
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ProxyAutoBoundsNode>
|
||||
<y:Realizers active="0">
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="734.9515624999998" width="782.951171875" x="-120.5" y="-361.4140625"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="18" fontStyle="plain" hasLineColor="false" height="24.953125" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="782.951171875" x="0.0" xml:space="preserve" y="0.0">Application Architecture</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
</y:GroupNode>
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.201171875" x="-7.6005859375" xml:space="preserve" y="0.0">Folder 4</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
</y:GroupNode>
|
||||
</y:Realizers>
|
||||
</y:ProxyAutoBoundsNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0:">
|
||||
<node id="n0::n0" yfiles.foldertype="group">
|
||||
<data key="d4" xml:space="preserve"/>
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ProxyAutoBoundsNode>
|
||||
<y:Realizers active="0">
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="240.4609375" width="752.951171875" x="-105.5" y="-59.349999999999994"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="752.951171875" x="0.0" xml:space="preserve" y="0.0">Library</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
||||
<y:BorderInsets bottom="29" bottomF="29.0" left="14" leftF="13.5859375" right="33" rightF="32.967734604252996" top="11" topF="10.75"/>
|
||||
</y:GroupNode>
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.201171875" x="-7.6005859375" xml:space="preserve" y="0.0">Folder 1</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
</y:GroupNode>
|
||||
</y:Realizers>
|
||||
</y:ProxyAutoBoundsNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0::n0:">
|
||||
<node id="n0::n0::n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="80.0" x="519.483437270747" y="97.1109375"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="40.50390625" x="19.748046875" xml:space="preserve" y="11.015625">Drone<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n0::n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="80.0" x="297.5" y="97.1109375"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="60.466796875" x="9.7666015625" xml:space="preserve" y="11.015625">EventBus<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n0::n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="80.0" x="-2.5" y="97.1109375"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.021484375" x="5.4892578125" xml:space="preserve" y="11.015625">Dispatcher<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n0::n3">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="62.486667698095786" y="-10.889062499999994"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="95.3828125" x="42.36428307302589" xml:space="preserve" y="6.015625">drone-xxxx.csv<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.0" nodeRatioX="0.5" nodeRatioY="0.0" offsetX="12.364283073025874" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CONDITIONAL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n0::n4">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="-8.75" y="-12.139062499999994"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.328125" x="-68.1640625" xml:space="preserve" y="5.015625">tubes.csv<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.5" labelRatioY="0.0" nodeRatioX="-0.5" nodeRatioY="-0.033333333333333326" offsetX="-6.8359375" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CONDITIONAL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n0::n5">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="80.0" x="297.5" y="-2.8890624999999943"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="40.50390625" x="19.748046875" xml:space="preserve" y="11.015625">Drone<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
<node id="n0::n1" yfiles.foldertype="group">
|
||||
<data key="d4" xml:space="preserve"/>
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ProxyAutoBoundsNode>
|
||||
<y:Realizers active="0">
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="221.4609375" width="752.951171875" x="-105.5" y="-321.4609375"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="752.951171875" x="0.0" xml:space="preserve" y="0.0">Logging</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="57" leftF="56.5" right="7" rightF="7.30859375" top="0" topF="0.0"/>
|
||||
</y:GroupNode>
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="1005.39453125" width="1846.421875" x="-1190.8100115492866" y="69.03906249999977"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="1846.421875" x="0.0" xml:space="preserve" y="0.0">logging</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="true" closedHeight="1005.39453125" closedWidth="1846.421875" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
</y:GroupNode>
|
||||
</y:Realizers>
|
||||
</y:ProxyAutoBoundsNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0::n1:">
|
||||
<node id="n0::n1::n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="131.0" x="460.0" y="-225.0"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="72.21484375" x="29.392578125" xml:space="preserve" y="11.015625">Drone Logs<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1::n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="143.0" x="-34.0" y="-225.0"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="100.732421875" x="21.1337890625" xml:space="preserve" y="11.015625">Dispatcher Logs<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1::n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="112.0" x="225.0" y="-155.0"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.029296875" x="17.9853515625" xml:space="preserve" y="11.015625">Report Logs<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1::n3">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="112.0" x="225.0" y="-225.0"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.51171875" x="21.744140625" xml:space="preserve" y="11.015625">Route Map<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1::n4">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="266.0" y="-285.0"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="103.8671875" x="43.32421875" xml:space="preserve" y="8.03125">route-report.png<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="0.5" nodeRatioY="0.5" offsetX="13.32421875" offsetY="-4.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CONDITIONAL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1::n5">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="510.5" y="-285.0"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="71.318359375" x="43.32421875" xml:space="preserve" y="8.03125">drone-*.log<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="0.5" nodeRatioY="0.5" offsetX="13.32421875" offsetY="-4.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CONDITIONAL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1::n6">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="22.5" y="-285.0"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="89.505859375" x="43.32421875" xml:space="preserve" y="8.03125">dispatcher.log<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="0.5" nodeRatioY="0.5" offsetX="13.32421875" offsetY="-4.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CONDITIONAL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
<node id="n0::n2" yfiles.foldertype="group">
|
||||
<data key="d4" xml:space="preserve"/>
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:ProxyAutoBoundsNode>
|
||||
<y:Realizers active="0">
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="136.4609375" width="751.7255859375" x="-105.5" y="222.0765624999998"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="751.7255859375" x="0.0" xml:space="preserve" y="0.0">Simulation</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="16" leftF="16.2255859375" right="0" rightF="0.0" top="45" topF="45.0"/>
|
||||
</y:GroupNode>
|
||||
<y:GroupNode>
|
||||
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
|
||||
<y:Fill color="#F5F5F5" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
|
||||
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.201171875" x="-7.6005859375" xml:space="preserve" y="0.0">Folder 3</y:NodeLabel>
|
||||
<y:Shape type="roundrectangle"/>
|
||||
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
|
||||
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
|
||||
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
</y:GroupNode>
|
||||
</y:Realizers>
|
||||
</y:ProxyAutoBoundsNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0::n2:">
|
||||
<node id="n0::n2::n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="170.75" x="185.6005859375" y="303.5374999999998"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="145.703125" x="12.5234375" xml:space="preserve" y="4.03125">Simulation
|
||||
(application entrypoint)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n2::n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.small_entity">
|
||||
<y:Geometry height="40.0" width="120.5" x="510.7255859375" y="303.5374999999998"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="75.291015625" x="22.6044921875" xml:space="preserve" y="11.015625">Thread Pool<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n2::n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.entityRelationship.attribute">
|
||||
<y:Geometry height="40.0" width="135.5" x="-74.2744140625" y="303.5374999999998"/>
|
||||
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="91.662109375" x="21.9189453125" xml:space="preserve" y="4.03125">Command-line
|
||||
Arguments<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.lang.Boolean" name="y.view.ShadowNodePainter.SHADOW_PAINTING" value="true"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
<edge id="n0::n0::e0" source="n0::n0::n0" target="n0::n0::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="-39.9921875" sy="-15.0" tx="40.0" ty="-15.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.8203125" x="-106.96532401596204" xml:space="preserve" y="-23.148641887091173">push(Event)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.164265361212278" distanceToCenter="true" position="right" ratio="0.456316513747448" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e1" source="n0::n0::n1" target="n0::n0::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="-40.0" sy="-0.0" tx="40.0" ty="-0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.064453125" x="-158.50537109375" xml:space="preserve" y="6.393724510768351">onEvent(Event)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="15.378101036647253" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e2" source="n0::n0::n1" target="n0::n0::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="40.0" sy="-0.0" tx="-39.990234375" ty="0.0">
|
||||
<y:Point x="487.5" y="117.1109375"/>
|
||||
</y:Path>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.064453125" x="25.279576967607" xml:space="preserve" y="3.5336611574833228">onEvent(Event)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.518037683362223" distanceToCenter="true" position="right" ratio="0.3591354100414985" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e3" source="n0::n0::n1" target="n0::n0::n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="-20.0" tx="0.0" ty="20.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.064453125" x="-101.1700125556344" xml:space="preserve" y="-40.92421095460432">onEvent(Event)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="52.6377859931344" distanceToCenter="true" position="left" ratio="0.5605606846041107" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e4" source="n0::n0::n2" target="n0::n0::n3">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="39.986667698095786" sy="-18.50191778352601" tx="0.0" ty="14.990234375"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="standard" target="none"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="115.966796875" x="4.045482773729049" xml:space="preserve" y="-53.627383136070534">readNextPosition()<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="62.02888496088717" distanceToCenter="true" position="right" ratio="0.6131091106405417" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e5" source="n0::n0::n2" target="n0::n0::n4">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="-31.55812447741016" sy="-20.004475054172275" tx="0.0" ty="-14.990234375"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="standard" target="none"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="138.75390625" x="-107.70263864118957" xml:space="preserve" y="-48.60489807128906">registerTubeStations()<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="38.437291432820864" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e6" source="n0::n0::n2" target="n0::n0::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="40.0" sy="-15.0" tx="-40.0" ty="-15.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.8203125" x="84.32458489490324" xml:space="preserve" y="-23.10086681094097">push(Event)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.11649028506207" distanceToCenter="true" position="left" ratio="0.5956207465564389" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n0::e7" source="n0::n0::n5" target="n0::n0::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="11.658818683078778" sy="20.007812499999943" tx="11.658818683078778" ty="-19.982338222683524"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="76.8203125" x="6.043313370979263" xml:space="preserve" y="17.021148550569706">push(Event)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.043308164462964" distanceToCenter="false" position="left" ratio="0.3755383438501028" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n1::e0" source="n0::n1::n3" target="n0::n1::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="20.0" tx="0.0" ty="-20.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n1::e1" source="n0::n1::n3" target="n0::n1::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="-56.0" sy="-0.0" tx="71.5" ty="-0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n1::e2" source="n0::n1::n3" target="n0::n1::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="56.0" sy="-0.0" tx="-65.5" ty="-0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e0" source="n0::n0::n0" target="n0::n1::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="-20.009765625" tx="33.98343727074702" ty="19.97396408962939"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e1" source="n0::n0::n5" target="n0::n1::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="39.990234375" sy="0.0" tx="-33.5" ty="20.023437499999943">
|
||||
<y:Point x="492.0" y="17.110937500000006"/>
|
||||
</y:Path>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e2" source="n0::n0::n2" target="n0::n1::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="-20.009765625" tx="0.0" ty="20.009765625"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e3" source="n0::n0::n2" target="n0::n1::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="-20.009765625" tx="0.0" ty="20.009765625">
|
||||
<y:Point x="37.5" y="-79.35"/>
|
||||
<y:Point x="281.0" y="-79.35"/>
|
||||
</y:Path>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n1::e3" source="n0::n1::n3" target="n0::n1::n4">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e4" source="n0::n2::n0" target="n0::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="left" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="107.001953125" x="6.551316714554218" xml:space="preserve" y="-51.13534727848486">new Drone()
|
||||
new Dispatcher()<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="60.05229327705422" distanceToCenter="true" position="right" ratio="0.17608451826684918" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n2::e0" source="n0::n2::n0" target="n0::n2::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="118.36328125" x="15.982523501630794" xml:space="preserve" y="-28.98438110351583">execute(Runnable)<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="20.0" distanceToCenter="true" position="left" ratio="0.421782702570579" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n2::e1" source="n0::n2::n0" target="n0::n2::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="46.90234375" x="-83.49878455069066" xml:space="preserve" y="-26.91237681159015">parse()<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="17.92799570807438" distanceToCenter="true" position="right" ratio="0.46862072135568855" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n1::e4" source="n0::n1::n0" target="n0::n1::n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::n1::e5" source="n0::n1::n1" target="n0::n1::n6">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="-20.009765625" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
</graph>
|
||||
<data key="d7">
|
||||
<y:Resources/>
|
||||
</data>
|
||||
</graphml>
|
Binary file not shown.
After Width: | Height: | Size: 73 KiB |
|
@ -0,0 +1,545 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||
<!--Created by yEd 3.21.1-->
|
||||
<key attr.name="Description" attr.type="string" for="graph" id="d0"/>
|
||||
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||
<key for="graphml" id="d7" yfiles.type="resources"/>
|
||||
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||
<graph edgedefault="directed" id="G">
|
||||
<data key="d0"/>
|
||||
<node id="n0" yfiles.foldertype="group">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:TableNode configuration="com.yworks.bpmn.Pool">
|
||||
<y:Geometry height="787.710752688172" width="972.4580078125" x="-605.6126029065862" y="30.743010752688292"/>
|
||||
<y:Fill color="#FFF2BC" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="127.80859375" x="422.32470703125" xml:space="preserve" y="4.0">Route Data Flow</y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="40.50390625" x="105.6357421875" xml:space="preserve" y="33.0">Drone<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_0" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="60.466796875" x="302.5419921875" xml:space="preserve" y="33.0">EventBus<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_1" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.021484375" x="535.396484375" xml:space="preserve" y="33.0">Dispatcher<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_2" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="72.9765625" x="801.26025390625" xml:space="preserve" y="33.0">drone-*.csv<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_3" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_ROW_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4340" lineColor="#000000" lineType="line" lineWidth="1.0"/>
|
||||
</y:Property>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_COLUMN_SELECTION_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4380" lineColor="#000000" lineType="line" lineWidth="3.0"/>
|
||||
</y:Property>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_ROW_SELECTION_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4380" lineColor="#000000" lineType="line" lineWidth="3.0"/>
|
||||
</y:Property>
|
||||
<y:Property class="java.awt.Color" name="POOL_LANE_COLOR_ALTERNATING" value="#ffffff"/>
|
||||
<y:Property class="java.awt.Color" name="POOL_LANE_COLOR_MAIN" value="#ffffff"/>
|
||||
<y:Property class="java.lang.String" name="POOL_LANE_STYLE" value="LANE_STYLE_COLUMNS"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="POOL_TYPE_COLUMN"/>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_COLUMN_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4340" lineColor="#000000" lineType="line" lineWidth="1.0"/>
|
||||
</y:Property>
|
||||
</y:StyleProperties>
|
||||
<y:State autoResize="true" closed="false" closedHeight="80.0" closedWidth="100.0"/>
|
||||
<y:Insets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
<y:BorderInsets bottom="28" bottomF="28.11935483870957" left="22" leftF="21.9072265625" right="48" rightF="48.29594254032236" top="24" topF="23.5"/>
|
||||
<y:Table autoResizeTable="true" defaultColumnWidth="202.0" defaultMinimumColumnWidth="30.0" defaultMinimumRowHeight="30.0" defaultRowHeight="280.0">
|
||||
<y:DefaultColumnInsets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
<y:DefaultRowInsets bottom="3.0" left="20.0" right="3.0" top="3.0"/>
|
||||
<y:Insets bottom="0.0" left="0.0" right="0.0" top="30.0"/>
|
||||
<y:Columns>
|
||||
<y:Column id="column_0" minimumWidth="71.404296875" width="211.775390625">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_1" minimumWidth="71.404296875" width="202.0">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_2" minimumWidth="30.0" width="272.263671875">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_3" minimumWidth="30.0" width="263.4189453125">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
</y:Columns>
|
||||
<y:Rows>
|
||||
<y:Row height="734.710752688172" id="row_0" minimumHeight="30.0">
|
||||
<y:Insets bottom="3.0" left="20.0" right="3.0" top="3.0"/>
|
||||
</y:Row>
|
||||
</y:Rows>
|
||||
</y:Table>
|
||||
</y:TableNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0:">
|
||||
<node id="n0::n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="-563.7053763440862" y="197.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="115.59765625" x="23.201171875" xml:space="preserve" y="11.53125">Signals remaining
|
||||
route capacity<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="118.0" x="-330.3372122815861" y="197.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="96.759765625" x="10.6201171875" xml:space="preserve" y="11.53125">DroneCapacity
|
||||
(Event)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TRANSACTION"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="118.0" x="-109.46904821908612" y="197.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.248046875" x="9.8759765625" xml:space="preserve" y="11.53125">Capacity event
|
||||
recieved<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n3">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="-103.96904821908612" y="288.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.90625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.130859375" x="19.4345703125" xml:space="preserve" y="29.046875">Capacity
|
||||
under
|
||||
threashold<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n4">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="-163.96904821908612" y="325.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#DCBA00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_INTERMEDIATE_BOUNDARY_INTERRUPTING"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CANCEL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n5">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="156.0" x="159.54946236559152" y="453.2430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="127.802734375" x="14.0986328125" xml:space="preserve" y="11.53125">Read next waypoint
|
||||
from buffer (file)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TRANSACTION"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n6">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="-41.60775789650546" y="552.2860215053765"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.90625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="100.7265625" x="3.13671875" xml:space="preserve" y="29.046875">Waypoint buffer
|
||||
at
|
||||
threashold<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n7">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="136.0" x="-130.96904821908612" y="732.3344086021507"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="102.9765625" x="16.51171875" xml:space="preserve" y="11.53125">Send waypoints
|
||||
to Drone<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n8">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="118.0" x="-330.3372122815861" y="732.3344086021507"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="66.689453125" x="25.6552734375" xml:space="preserve" y="11.53125">PointData
|
||||
(Event)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TRANSACTION"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n9">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="-563.7053763440862" y="732.3344086021507"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="127.1171875" x="17.44140625" xml:space="preserve" y="11.53125">Drone recieves new
|
||||
waypoints<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n10">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="-563.7053763440862" y="104.24301075268829"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.90625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.07421875" x="8.962890625" xml:space="preserve" y="4.546875">Arrives at waypoint
|
||||
or
|
||||
has no more waypoints<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n11">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="-103.96904821908612" y="428.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.90625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="80.353515625" x="13.3232421875" xml:space="preserve" y="29.046875">Waypoint
|
||||
successfully
|
||||
read<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n12">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="-163.96904821908612" y="552.2860215053765"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="100.7265625" x="3.13671875" xml:space="preserve" y="36.03125">Waypoint buffer
|
||||
empty<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n13">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="-163.96904821908612" y="666.120430107527"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#DCBA00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_INTERMEDIATE_BOUNDARY_INTERRUPTING"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CANCEL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
<edge id="n0::e0" source="n0::n0" target="n0::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e1" source="n0::n2" target="n0::n3">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e2" source="n0::n1" target="n0::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e3" source="n0::n3" target="n0::n4">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="-14.6833502820744" xml:space="preserve" y="-31.984375721921083">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="23.0" distanceToCenter="true" position="right" ratio="-11.984375" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e4" source="n0::n6" target="n0::n7">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="5.960556547073665" xml:space="preserve" y="21.87250832178279">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="left" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e5" source="n0::n7" target="n0::n8">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e6" source="n0::n8" target="n0::n9">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e7" source="n0::n10" target="n0::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e8" source="n0::n3" target="n0::n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="27.033055549861103" xml:space="preserve" y="-11.980361882475222">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="19.969507268728137" distanceToCenter="true" position="left" ratio="0.02077989281985372" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e9" source="n0::n5" target="n0::n11">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e10" source="n0::n11" target="n0::n6">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="30.3958083726714" xml:space="preserve" y="9.386089708064446">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e11" source="n0::n12" target="n0::n7">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="13.942109329718122" xml:space="preserve" y="6.485062925277475">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="18.532535117922272" distanceToCenter="true" position="left" ratio="-11.165256983422077" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e12" source="n0::n11" target="n0::n12">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="-36.023473340333425" xml:space="preserve" y="-0.6547108460385971">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="19.62669837258659" distanceToCenter="true" position="right" ratio="-10.949874199886757" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e13" source="n0::n6" target="n0::n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="20.58158237088105" xml:space="preserve" y="-12.43259031383866">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.737761794698274" distanceToCenter="true" position="right" ratio="-4.947612364936866" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e14" source="n0::n12" target="n0::n13">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="-38.16465197254553" xml:space="preserve" y="0.23803755582162012">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="18.829496415896138" distanceToCenter="true" position="right" ratio="-5.180403556658304" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
</graph>
|
||||
<data key="d7">
|
||||
<y:Resources/>
|
||||
</data>
|
||||
</graphml>
|
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
|
@ -0,0 +1,568 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||
<!--Created by yEd 3.21.1-->
|
||||
<key attr.name="Description" attr.type="string" for="graph" id="d0"/>
|
||||
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||
<key for="graphml" id="d7" yfiles.type="resources"/>
|
||||
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||
<graph edgedefault="directed" id="G">
|
||||
<data key="d0"/>
|
||||
<node id="n0" yfiles.foldertype="group">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:TableNode configuration="com.yworks.bpmn.Pool">
|
||||
<y:Geometry height="770.429502688172" width="719.6319178427527" x="319.4517683131712" y="79.74301075268829"/>
|
||||
<y:Fill color="#FFF2BC" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="114.5517578125" x="302.54008001512636" xml:space="preserve" y="4.0">Shutdown flow</y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="40.50390625" x="78.6035565776213" xml:space="preserve" y="33.0">Drone<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_0" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="60.466796875" x="229.1026209677426" xml:space="preserve" y="33.0">EventBus<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_1" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.021484375" x="414.4571131552426" xml:space="preserve" y="33.0">Dispatcher<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_2" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="79.228515625" x="597.1890467489977" xml:space="preserve" y="33.0">drones-*.csv<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_3" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_ROW_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4340" lineColor="#000000" lineType="line" lineWidth="1.0"/>
|
||||
</y:Property>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_COLUMN_SELECTION_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4380" lineColor="#000000" lineType="line" lineWidth="3.0"/>
|
||||
</y:Property>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_ROW_SELECTION_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4380" lineColor="#000000" lineType="line" lineWidth="3.0"/>
|
||||
</y:Property>
|
||||
<y:Property class="java.awt.Color" name="POOL_LANE_COLOR_ALTERNATING" value="#ffffff"/>
|
||||
<y:Property class="java.awt.Color" name="POOL_LANE_COLOR_MAIN" value="#ffffff"/>
|
||||
<y:Property class="java.lang.String" name="POOL_LANE_STYLE" value="LANE_STYLE_COLUMNS"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="POOL_TYPE_COLUMN"/>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_COLUMN_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4340" lineColor="#000000" lineType="line" lineWidth="1.0"/>
|
||||
</y:Property>
|
||||
</y:StyleProperties>
|
||||
<y:State autoResize="true" closed="false" closedHeight="80.0" closedWidth="100.0"/>
|
||||
<y:Insets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
<y:BorderInsets bottom="6" bottomF="5.662231182795381" left="3" leftF="3.0" right="13" rightF="12.947753906260004" top="7" topF="7.256989247311708"/>
|
||||
<y:Table autoResizeTable="true" defaultColumnWidth="202.0" defaultMinimumColumnWidth="30.0" defaultMinimumRowHeight="30.0" defaultRowHeight="280.0">
|
||||
<y:DefaultColumnInsets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
<y:DefaultRowInsets bottom="3.0" left="20.0" right="3.0" top="3.0"/>
|
||||
<y:Insets bottom="0.0" left="0.0" right="0.0" top="30.0"/>
|
||||
<y:Columns>
|
||||
<y:Column id="column_0" minimumWidth="71.404296875" width="157.7110194052426">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_1" minimumWidth="71.404296875" width="163.25">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_2" minimumWidth="30.0" width="216.013671875">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_3" minimumWidth="30.0" width="159.65722656251012">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
</y:Columns>
|
||||
<y:Rows>
|
||||
<y:Row height="717.429502688172" id="row_0" minimumHeight="30.0">
|
||||
<y:Insets bottom="3.0" left="20.0" right="3.0" top="3.0"/>
|
||||
</y:Row>
|
||||
</y:Rows>
|
||||
</y:Table>
|
||||
</y:TableNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0:">
|
||||
<node id="n0::n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="693.8119035618281" y="182.71505376344146"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.65234375" x="31.673828125" xml:space="preserve" y="11.53125">Shutdown time
|
||||
occurred <y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="721.3119035618281" y="261.9790322580649"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="75.34375" x="15.828125" xml:space="preserve" y="36.03125">Drones still
|
||||
flying?<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="693.8119035618281" y="406.2430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.90625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="101.541015625" x="30.2294921875" xml:space="preserve" y="4.546875">Message drones
|
||||
to terminate at
|
||||
shutdown time<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n3">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="759.8119035618281" y="137.0"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_TIMER"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n4">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="116.25" x="525.0377877184137" y="406.2430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="100.7734375" x="7.73828125" xml:space="preserve" y="11.53125">ShutdownSignal
|
||||
(Event)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TRANSACTION"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n5">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="125.0" x="347.5136718749993" y="406.2430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="93.47265625" x="15.763671875" xml:space="preserve" y="11.53125">Register new
|
||||
shutdown time<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n6">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="130.0619035618281" x="342.4517683131712" y="553.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.65234375" x="15.704779905914052" xml:space="preserve" y="11.53125">Shutdown time
|
||||
occurred <y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n7">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="392.48272009408527" y="491.2430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#27AE27" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_START"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_TIMER"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n8">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="116.25" x="525.0377877184137" y="553.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="100.7734375" x="7.73828125" xml:space="preserve" y="11.53125">ShutdownSignal
|
||||
(Event)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TRANSACTION"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n9">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="693.8119035618281" y="553.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="113.875" x="24.0625" xml:space="preserve" y="11.53125">Register drone as
|
||||
no longer flying<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n10">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="721.3119035618281" y="638.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="75.34375" x="15.828125" xml:space="preserve" y="36.03125">Drones still
|
||||
flying?<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n11">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="661.3119035618281" y="675.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#DCBA00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_INTERMEDIATE_BOUNDARY_INTERRUPTING"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CANCEL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n12">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="759.8119035618281" y="789.5415322580649"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#B11F1F" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.716796875" x="-17.8583984375" xml:space="preserve" y="34.0">Terminate<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_END"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n13">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="392.48272009408527" y="638.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#B11F1F" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.716796875" x="-17.8583984375" xml:space="preserve" y="34.0">Terminate<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_END"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n14">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="678.6238071236562" y="298.9790322580649"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#B11F1F" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.716796875" x="-17.8583984375" xml:space="preserve" y="34.0">Terminate<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_END"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n15">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="125.0" x="898.1359322496639" y="553.9650537634415"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="111.560546875" x="6.7197265625" xml:space="preserve" y="18.515625">Close reader (file)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
<edge id="n0::e0" source="n0::n1" target="n0::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="-42.4824079616094" xml:space="preserve" y="11.130980001470334">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e1" source="n0::n3" target="n0::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e2" source="n0::n4" target="n0::n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e3" source="n0::n2" target="n0::n4">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e4" source="n0::n0" target="n0::n1">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e5" source="n0::n7" target="n0::n6">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e6" source="n0::n6" target="n0::n8">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e7" source="n0::n8" target="n0::n9">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e8" source="n0::n9" target="n0::n10">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e9" source="n0::n10" target="n0::n11">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="-36.4909528834844" xml:space="preserve" y="-38.98434809202729">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e10" source="n0::n10" target="n0::n12">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="-40.15916577410928" xml:space="preserve" y="14.312680217784418">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e11" source="n0::n6" target="n0::n13">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e12" source="n0::n1" target="n0::n14">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e13" source="n0::n9" target="n0::n15">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
</graph>
|
||||
<data key="d7">
|
||||
<y:Resources/>
|
||||
</data>
|
||||
</graphml>
|
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
|
@ -0,0 +1,577 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||
<!--Created by yEd 3.21.1-->
|
||||
<key attr.name="Description" attr.type="string" for="graph" id="d0"/>
|
||||
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||
<key for="graphml" id="d7" yfiles.type="resources"/>
|
||||
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||
<graph edgedefault="directed" id="G">
|
||||
<data key="d0"/>
|
||||
<node id="n0" yfiles.foldertype="group">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:TableNode configuration="com.yworks.bpmn.Pool">
|
||||
<y:Geometry height="850.210752688172" width="1185.714165406595" x="-226.16075268817235" y="24.243010752688292"/>
|
||||
<y:Fill color="#FFF2BC" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="21.4609375" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="t" textColor="#000000" verticalTextPosition="bottom" visible="true" width="207.4375" x="489.13833270329746" xml:space="preserve" y="4.0">Traffic Condition Data Flow</y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="40.50390625" x="120.78481707829309" xml:space="preserve" y="33.0">Drone<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_0" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="60.466796875" x="313.4651419690862" xml:space="preserve" y="33.0">EventBus<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_1" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="69.021484375" x="498.8196341565862" xml:space="preserve" y="33.0">Dispatcher<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_2" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="61.328125" x="718.6326224378363" xml:space="preserve" y="33.0">tubes.csv<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_3" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="63.021484375" x="900.1902396253365" xml:space="preserve" y="33.0">report.log<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_4" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="103.8671875" x="1042.4963919690908" xml:space="preserve" y="33.0">route-report.png<y:LabelModel><y:ColumnNodeLabelModel offset="3.0"/></y:LabelModel><y:ModelParameter><y:ColumnNodeLabelModelParameter id="column_5" inside="true" verticalPosition="0.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_ROW_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4340" lineColor="#000000" lineType="line" lineWidth="1.0"/>
|
||||
</y:Property>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_COLUMN_SELECTION_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4380" lineColor="#000000" lineType="line" lineWidth="3.0"/>
|
||||
</y:Property>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_ROW_SELECTION_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4380" lineColor="#000000" lineType="line" lineWidth="3.0"/>
|
||||
</y:Property>
|
||||
<y:Property class="java.awt.Color" name="POOL_LANE_COLOR_ALTERNATING" value="#ffffff"/>
|
||||
<y:Property class="java.awt.Color" name="POOL_LANE_COLOR_MAIN" value="#ffffff"/>
|
||||
<y:Property class="java.lang.String" name="POOL_LANE_STYLE" value="LANE_STYLE_COLUMNS"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="POOL_TYPE_COLUMN"/>
|
||||
<y:Property name="y.view.tabular.TableNodePainter.ALTERNATE_COLUMN_STYLE">
|
||||
<y:SimpleStyle fillColor="#474A4340" lineColor="#000000" lineType="line" lineWidth="1.0"/>
|
||||
</y:Property>
|
||||
</y:StyleProperties>
|
||||
<y:State autoResize="true" closed="false" closedHeight="80.0" closedWidth="100.0"/>
|
||||
<y:Insets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
|
||||
<y:BorderInsets bottom="35" bottomF="35.46774193548367" left="20" leftF="19.705376344086176" right="11" rightF="11.229193968422464" top="61" topF="60.97204301075317"/>
|
||||
<y:Table autoResizeTable="true" defaultColumnWidth="202.0" defaultMinimumColumnWidth="30.0" defaultMinimumRowHeight="30.0" defaultRowHeight="280.0">
|
||||
<y:DefaultColumnInsets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
<y:DefaultRowInsets bottom="3.0" left="20.0" right="3.0" top="3.0"/>
|
||||
<y:Insets bottom="0.0" left="0.0" right="0.0" top="30.0"/>
|
||||
<y:Columns>
|
||||
<y:Column id="column_0" minimumWidth="71.404296875" width="242.07354040658618">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_1" minimumWidth="71.404296875" width="163.25">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_2" minimumWidth="30.0" width="216.013671875">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_3" minimumWidth="30.0" width="215.9189453125001">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_4" minimumWidth="30.0" width="148.88964843750045">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
<y:Column id="column_5" minimumWidth="30.0" width="176.56835937500819">
|
||||
<y:Insets bottom="3.0" left="3.0" right="3.0" top="20.0"/>
|
||||
</y:Column>
|
||||
</y:Columns>
|
||||
<y:Rows>
|
||||
<y:Row height="797.210752688172" id="row_0" minimumHeight="30.0">
|
||||
<y:Insets bottom="3.0" left="20.0" right="3.0" top="3.0"/>
|
||||
</y:Row>
|
||||
</y:Rows>
|
||||
</y:Table>
|
||||
</y:TableNode>
|
||||
</data>
|
||||
<graph edgedefault="directed" id="n0:">
|
||||
<node id="n0::n0">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="-153.95537634408618" y="513.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="146.072265625" x="7.9638671875" xml:space="preserve" y="11.53125">Scans surroundings for
|
||||
Tube Station<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n1">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="-153.95537634408618" y="420.2430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="120.70703125" x="20.646484375" xml:space="preserve" y="18.515625">Arrives at waypoint<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n2">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="-126.45537634408618" y="604.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="84.2265625" x="11.38671875" xml:space="preserve" y="36.03125">Tube Station
|
||||
found<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n3">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="-126.45537634408618" y="731.9860215053766"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.90625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="84.2265625" x="11.38671875" xml:space="preserve" y="29.046875">Tube Station
|
||||
discoved
|
||||
before<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n4">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="118.0" x="58.66278771841394" y="756.4860215053766"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="103.076171875" x="7.4619140625" xml:space="preserve" y="11.53125">TrafficCondition
|
||||
(Event)<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TRANSACTION"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n5">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="-186.45537634408618" y="641.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#DCBA00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_INTERMEDIATE_BOUNDARY_INTERRUPTING"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CANCEL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n6">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="-186.45537634408618" y="768.9860215053766"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#DCBA00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_INTERMEDIATE_BOUNDARY_INTERRUPTING"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CANCEL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n7">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="226.03095178091405" y="756.4860215053766"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="113.2421875" x="24.37890625" xml:space="preserve" y="18.515625">Register condition<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n8">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="118.0" x="644.5954049059137" y="756.4860215053766"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="96.279296875" x="10.8603515625" xml:space="preserve" y="18.515625">Write to log file<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n9">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="145.0" x="800.32421875" y="756.4860215053766"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="111.63671875" x="16.681640625" xml:space="preserve" y="18.515625">Plot route on map<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n10">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="232.5619035618281" y="135.21505376344146"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="54.220703125" x="53.8896484375" xml:space="preserve" y="18.515625">Initialize<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n11">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="449.6238071236562" y="206.47903225806488"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="139.26953125" x="11.365234375" xml:space="preserve" y="18.515625">Read tube stations file<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n12">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Gateway.withShadow">
|
||||
<y:Geometry height="104.0" width="107.0" x="260.0619035618281" y="206.47903225806488"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#E38B00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="87.830078125" x="9.5849609375" xml:space="preserve" y="36.03125">Stations read
|
||||
successfully<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="GATEWAY_TYPE_PLAIN"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n13">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="-153.95537634408618" y="326.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="54.220703125" x="53.8896484375" xml:space="preserve" y="18.515625">Initialize<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n14">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow">
|
||||
<y:Geometry height="55.0" width="162.0" x="232.5619035618281" y="326.7430107526883"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="140.248046875" x="10.8759765625" xml:space="preserve" y="11.53125">Register tube stations
|
||||
with Drones<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
<node id="n0::n15">
|
||||
<data key="d5"/>
|
||||
<data key="d6">
|
||||
<y:GenericNode configuration="com.yworks.bpmn.Event.withShadow">
|
||||
<y:Geometry height="30.0" width="30.0" x="200.0619035618281" y="243.47903225806488"/>
|
||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/>
|
||||
<y:BorderStyle color="#DCBA00" type="line" width="1.0"/>
|
||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="13.0" y="34.0">
|
||||
<y:LabelModel>
|
||||
<y:SmartNodeLabelModel distance="4.0"/>
|
||||
</y:LabelModel>
|
||||
<y:ModelParameter>
|
||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="-0.5" nodeRatioX="0.0" nodeRatioY="0.5" offsetX="0.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
|
||||
</y:ModelParameter>
|
||||
</y:NodeLabel>
|
||||
<y:StyleProperties>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.EventCharEnum" name="com.yworks.bpmn.characteristic" value="EVENT_CHARACTERISTIC_INTERMEDIATE_BOUNDARY_INTERRUPTING"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/>
|
||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/>
|
||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="EVENT_TYPE_CANCEL"/>
|
||||
</y:StyleProperties>
|
||||
</y:GenericNode>
|
||||
</data>
|
||||
</node>
|
||||
</graph>
|
||||
</node>
|
||||
<edge id="n0::e0" source="n0::n1" target="n0::n0">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e1" source="n0::n0" target="n0::n2">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e2" source="n0::n2" target="n0::n3">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="-42.48242254769946" xml:space="preserve" y="3.1650532384073813">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e3" source="n0::n3" target="n0::n4">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="24.981135795913175" xml:space="preserve" y="-21.984376443842166">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.999999999999991" distanceToCenter="true" position="left" ratio="0.3862709632379776" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e4" source="n0::n2" target="n0::n5">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="-19.167725282074457" xml:space="preserve" y="-25.984345204342958">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="17.0" distanceToCenter="true" position="right" ratio="-7.5" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e5" source="n0::n3" target="n0::n6">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="-21.490967469574457" xml:space="preserve" y="-25.984376443842166">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="17.0" distanceToCenter="true" position="right" ratio="-7.5" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e6" source="n0::n4" target="n0::n7">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e7" source="n0::n7" target="n0::n8">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e8" source="n0::n8" target="n0::n9">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e9" source="n0::n10" target="n0::n11">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e10" source="n0::n11" target="n0::n12">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e11" source="n0::n12" target="n0::n14">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="24.96484375" x="-42.4824079616094" xml:space="preserve" y="-0.3959975375921658">Yes<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e12" source="n0::n14" target="n0::n13">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="64.27959509408618" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
<edge id="n0::e13" source="n0::n12" target="n0::n15">
|
||||
<data key="d9"/>
|
||||
<data key="d10">
|
||||
<y:PolyLineEdge>
|
||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||
<y:Arrows source="none" target="standard"/>
|
||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="20.318359375" x="-11.667710695984397" xml:space="preserve" y="-28.98437716576325">No<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="20.0" distanceToCenter="true" position="right" ratio="-15.0" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||
<y:BendStyle smoothed="false"/>
|
||||
</y:PolyLineEdge>
|
||||
</data>
|
||||
</edge>
|
||||
</graph>
|
||||
<data key="d7">
|
||||
<y:Resources/>
|
||||
</data>
|
||||
</graphml>
|
Binary file not shown.
After Width: | Height: | Size: 94 KiB |
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
|
@ -0,0 +1,185 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
exec "$JAVACMD" "$@"
|
|
@ -0,0 +1,89 @@
|
|||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
|
@ -0,0 +1,21 @@
|
|||
package drones;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* Convenience class for retrieving translated strings
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public interface I18N {
|
||||
|
||||
/**
|
||||
* Get a translated string
|
||||
*
|
||||
* @param key the translation key
|
||||
* @return the translated message
|
||||
*/
|
||||
static String get(String key) {
|
||||
return ResourceBundle.getBundle("drones-messages").getString(key);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,259 @@
|
|||
package drones.dispatcher;
|
||||
|
||||
import drones.I18N;
|
||||
import drones.drone.Drone;
|
||||
import drones.geo.Point;
|
||||
import drones.geo.TubeStation;
|
||||
import drones.messages.EventBus;
|
||||
import drones.messages.EventBus.Listener;
|
||||
import drones.messages.Message;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A Drone dispatcher for controlling {@link Drone}'s
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public class Dispatcher implements Runnable, Listener<Message> {
|
||||
|
||||
public static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern(I18N.get("date.format"));
|
||||
|
||||
private static final DecimalFormat REPORT_NUMBER_FORMAT = new DecimalFormat(I18N.get("number.format"));
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger("Dispatcher");
|
||||
private static final Logger REPORT_LOGGER = LoggerFactory.getLogger("Report");
|
||||
|
||||
private final LocalDateTime shutdownTime;
|
||||
private final Map<Long, BufferedReader> dataReaders = new HashMap<>();
|
||||
private final double simulatedTimeFactor;
|
||||
private LocalDateTime currentTime;
|
||||
|
||||
private final EventBus eventBus;
|
||||
private final List<TubeStation> tubeStations = new ArrayList<>();
|
||||
|
||||
private final Set<String> tubeStationsFound = new HashSet<>();
|
||||
private int tuneStationReports = 0;
|
||||
private final Map<Long, Long> waypointsSent = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Creates a new dispatcher
|
||||
*
|
||||
* @param currentTime the current time of the dispatcher
|
||||
* @param shutdownTime the time when the dispatcher should terminate
|
||||
* @param simulatedTimeFactor used for controlling simulated time. Should be between 0-1.
|
||||
*/
|
||||
public Dispatcher(LocalDateTime currentTime, LocalDateTime shutdownTime, double simulatedTimeFactor) {
|
||||
this.currentTime = currentTime;
|
||||
this.shutdownTime = shutdownTime;
|
||||
this.simulatedTimeFactor = Math.max(0.0001, simulatedTimeFactor);
|
||||
this.eventBus = new EventBus(simulatedTimeFactor);
|
||||
this.eventBus.register(this);
|
||||
LOGGER.info(I18N.get("dispatcher.running.stats.1"));
|
||||
LOGGER.info(I18N.get("dispatcher.running.stats.2"), this.currentTime);
|
||||
LOGGER.info(I18N.get("dispatcher.running.stats.3"), this.shutdownTime);
|
||||
LOGGER.info(I18N.get("dispatcher.running.stats.4"), this.simulatedTimeFactor);
|
||||
LOGGER.info("");
|
||||
}
|
||||
|
||||
/**
|
||||
* Register tube stations to report on.
|
||||
* <p>
|
||||
* The format is:
|
||||
* "<Station name>",<latitude>,<longitude>
|
||||
*
|
||||
* @param reader A reader referencing a file and another data stream
|
||||
* @throws IOException if reading the file fails
|
||||
*/
|
||||
public void registerTubeStations(BufferedReader reader) throws IOException {
|
||||
try (reader) {
|
||||
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
|
||||
var scanner = new Scanner(line).useDelimiter(",");
|
||||
var name = scanner.next().replace("\"", "");
|
||||
var lat = Double.parseDouble(scanner.next().replace("\"", ""));
|
||||
var lon = Double.parseDouble(scanner.next().replace("\"", ""));
|
||||
var tb = new TubeStation(new Point(lat, lon, null), name);
|
||||
LOGGER.info("Registered Tube Station: {}", tb);
|
||||
tubeStations.add(tb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a new drone with the dispatcher.
|
||||
*
|
||||
* @param id the drone id
|
||||
* @param reader the data source reader, can point to a file or another data stream.
|
||||
* The format is:
|
||||
* <drone id>,"<latitude>","<longitude>","<time>"
|
||||
* The time format is:
|
||||
* 2011-03-22 07:49:10
|
||||
* @return returns a representation of the drone
|
||||
*/
|
||||
public Runnable registerDroneWithReader(long id, BufferedReader reader) {
|
||||
dataReaders.put(id, reader);
|
||||
var drone = new Drone(id, currentTime, simulatedTimeFactor, eventBus, tubeStations);
|
||||
eventBus.register(drone);
|
||||
LOGGER.info(I18N.get("dispatcher.drone.registration"), drone.getId());
|
||||
return drone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
LOGGER.info(I18N.get("dispatcher.started"));
|
||||
|
||||
while (dataReaders.size() > 0) {
|
||||
if (currentTime.isEqual(shutdownTime)) {
|
||||
LOGGER.info(I18N.get("dispatcher.send.shutdown.signals"), dataReaders.size());
|
||||
for (Long droneId : dataReaders.keySet()) {
|
||||
LOGGER.info(I18N.get("dispatcher.event.drone.shutdown"), droneId);
|
||||
eventBus.push(new Message.ShutdownSignal(droneId, droneId, shutdownTime));
|
||||
}
|
||||
}
|
||||
|
||||
if (Thread.currentThread().isInterrupted()) {
|
||||
LOGGER.info(I18N.get("dispatcher.shutdown"));
|
||||
break;
|
||||
}
|
||||
|
||||
incrementTime();
|
||||
}
|
||||
|
||||
LOGGER.info(I18N.get("dispatcher.terminating"));
|
||||
LOGGER.info(I18N.get("dispatcher.termination.stats.1"), tubeStationsFound);
|
||||
LOGGER.info(I18N.get("dispatcher.termination.stats.2"), tuneStationReports);
|
||||
LOGGER.info(I18N.get("dispatcher.termination.stats.3"));
|
||||
waypointsSent.forEach((k, v) -> LOGGER.info(I18N.get("dispatcher.termination.stats.4"), k, v));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(Message message) {
|
||||
|
||||
// No more drones
|
||||
if (dataReaders.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure we are only processing our messages
|
||||
if (message.targetId() != Message.DISPATCHER_ID) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Received shutdown confirmation from Drone, cleanup resources
|
||||
if (message instanceof Message.ShutdownSignal shutdown) {
|
||||
try {
|
||||
if (dataReaders.containsKey(shutdown.droneId())) {
|
||||
dataReaders.get(shutdown.droneId()).close();
|
||||
dataReaders.remove(shutdown.droneId());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOGGER.warn(I18N.get("dispatcher.event.drone.data.stream.error"), shutdown.droneId());
|
||||
}
|
||||
}
|
||||
|
||||
// Is drone request route waypoints?
|
||||
if (message instanceof Message.DroneCapacity droneCapacity) {
|
||||
LOGGER.info(I18N.get("dispatcher.event.drone.capacity.request"), droneCapacity.droneId(), droneCapacity.capacity());
|
||||
updateDroneRoute(droneCapacity.droneId(), droneCapacity.capacity());
|
||||
return;
|
||||
}
|
||||
|
||||
// Has drone sent a traffic condition?
|
||||
if (message instanceof Message.TrafficCondition condition) {
|
||||
tubeStationsFound.add(condition.tubeStation());
|
||||
tuneStationReports++;
|
||||
REPORT_LOGGER.info(I18N.get("dispatcher.event.drone.traffic.report"),
|
||||
condition.tubeStation(),
|
||||
condition.time().toLocalTime(),
|
||||
condition.condition().toString(),
|
||||
condition.droneId(), REPORT_NUMBER_FORMAT.format(condition.speed() * 3.6),
|
||||
REPORT_NUMBER_FORMAT.format(condition.distanceToStation()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the next waypoint from the data source.
|
||||
*
|
||||
* @param id The id of the drone
|
||||
* @return If no waypoint can be read, either by reaching the end-of-file or by an error, an empty Optional is
|
||||
* returned. Otherwise the read point is returned.
|
||||
*/
|
||||
private Optional<Point> readNextPosition(long id) {
|
||||
try {
|
||||
var reader = dataReaders.get(id);
|
||||
if (reader == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
var line = reader.readLine();
|
||||
if (line == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
var scanner = new Scanner(line).useDelimiter(",");
|
||||
if (scanner.nextLong(10) != id) {
|
||||
throw new IllegalStateException(I18N.get("dispatcher.data.file.id.mismatch"));
|
||||
}
|
||||
|
||||
var lat = Double.parseDouble(scanner.next().replace("\"", ""));
|
||||
var lon = Double.parseDouble(scanner.next().replace("\"", ""));
|
||||
var time = LocalDateTime.parse(scanner.next().replace("\"", ""), DATE_FORMAT);
|
||||
|
||||
if (time.isAfter(shutdownTime)) {
|
||||
// Ignore points after shutdown time
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
return Optional.of(new Point(lat, lon, time));
|
||||
} catch (IOException e) {
|
||||
LOGGER.warn(I18N.get("dispatcher.data.file.stream.error"));
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a drone with new waypoints if there is capacity
|
||||
*
|
||||
* @param droneId the id of the drone to update
|
||||
* @param fillCapacity the amount of waypoints to send
|
||||
*/
|
||||
private void updateDroneRoute(long droneId, int fillCapacity) {
|
||||
var addedWaypoints = 0;
|
||||
while (fillCapacity > 0) {
|
||||
var wp = readNextPosition(droneId);
|
||||
if (wp.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
eventBus.push(new Message.PointData(droneId, wp.get()));
|
||||
waypointsSent.computeIfPresent(droneId, (k, v) -> ++v);
|
||||
waypointsSent.putIfAbsent(droneId, 1L);
|
||||
addedWaypoints++;
|
||||
fillCapacity--;
|
||||
}
|
||||
if (addedWaypoints > 0) {
|
||||
LOGGER.info(I18N.get("dispatcher.waypoints.sent"), addedWaypoints, droneId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulates latency of the dispatcher
|
||||
* <p>
|
||||
* Controlled by the {@link #simulatedTimeFactor} property. If using real-time (factor 1) then there is a 10
|
||||
* second latency.
|
||||
*/
|
||||
private void incrementTime() {
|
||||
try {
|
||||
currentTime = currentTime.plusSeconds(1);
|
||||
Thread.sleep(Math.round(simulatedTimeFactor * 1000));
|
||||
} catch (InterruptedException e) {
|
||||
LOGGER.debug(I18N.get("dispatcher.thread.sleep.error"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,322 @@
|
|||
package drones.drone;
|
||||
|
||||
import drones.I18N;
|
||||
import drones.geo.Point;
|
||||
import drones.geo.TubeStation;
|
||||
import drones.messages.EventBus;
|
||||
import drones.messages.EventBus.Listener;
|
||||
import drones.messages.Message;
|
||||
import drones.messages.Message.TrafficCondition.Condition;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentLinkedDeque;
|
||||
|
||||
/**
|
||||
* Drone implementation to be controlled by a {@link drones.dispatcher.Dispatcher}
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public class Drone implements Runnable, Listener<Message> {
|
||||
|
||||
private static final int ROUTE_CAPACITY = 10;
|
||||
private static final int REQUEST_WAYPOINT_THRESHOLD = 3; // 30% capacity remaining
|
||||
public static final int TUBE_STATION_RANGE = 350;
|
||||
|
||||
private final long id;
|
||||
private double speed = 0;
|
||||
private Point position;
|
||||
private final Deque<Point> route = new ConcurrentLinkedDeque<>();
|
||||
private DroneState state = DroneState.HOLDING;
|
||||
private LocalDateTime currentTime;
|
||||
private final double simulatedTimeFactor;
|
||||
private final EventBus eventBus;
|
||||
private final Collection<TubeStation> tubeStations;
|
||||
private final Set<TubeStation> tubeStationsInRange = new HashSet<>();
|
||||
private final Set<TubeStation> tubeStationsFound = new HashSet<>();
|
||||
private LocalDateTime shutdownTime;
|
||||
|
||||
private int waypointsVisited = 0;
|
||||
private double longestDistanceTraveled = 0;
|
||||
private double fastestSpeed = 0;
|
||||
|
||||
/**
|
||||
* Creates a new drone
|
||||
*
|
||||
* @param id the id of the drone. Must be unique
|
||||
* @param currentTime the current time
|
||||
* @param simulatedTimeFactor time factor to simulate time. Should be between 0-1.
|
||||
* @param eventBus the event bus for sending and recieving messages
|
||||
* @param tubeStations the tube stations to report on
|
||||
*/
|
||||
public Drone(long id, LocalDateTime currentTime, double simulatedTimeFactor, EventBus eventBus,
|
||||
Collection<TubeStation> tubeStations) {
|
||||
this.id = id;
|
||||
this.currentTime = currentTime;
|
||||
this.simulatedTimeFactor = Math.max(0.0001, simulatedTimeFactor);
|
||||
this.eventBus = eventBus;
|
||||
this.tubeStations = tubeStations;
|
||||
this.position = new Point(0, 0, currentTime);
|
||||
getLogger().info(I18N.get("drone.running.stats.1"));
|
||||
getLogger().info(I18N.get("drone.running.stats.2"), this.currentTime);
|
||||
getLogger().info(I18N.get("drone.running.stats.3"), this.simulatedTimeFactor);
|
||||
getLogger().info("");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the id of the drone. Must be unique.
|
||||
*
|
||||
* @return the drone id
|
||||
*/
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current position of the drone.
|
||||
* <p>
|
||||
* If the drone has not yet recieved any waypoints then this is <code>null</code>. This will be set initially to
|
||||
* the first waypoint and then updated as the drone flies.
|
||||
* </p>
|
||||
*
|
||||
* @return the current position
|
||||
*/
|
||||
public Point getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get how many waypoints remain on the current route. Might be updated by the dispatcher.
|
||||
*
|
||||
* @return the amount of waypoints remaining
|
||||
*/
|
||||
public int getWaypointsRemaining() {
|
||||
return route.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* The current state of the drone.
|
||||
*
|
||||
* <ul>
|
||||
* <li>{@link DroneState#HOLDING}: The drone is currently holding at the same position</li>
|
||||
* <li>{@link DroneState#MOVING}: The drone is currently moving to a waypoint</li>
|
||||
* <li>{@link DroneState#TERMINATED}: The drone has terminated operation. No more waypoints will be
|
||||
* processed</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return the current drone state.
|
||||
*/
|
||||
public DroneState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns how many waypoints have been visited by the drone
|
||||
*
|
||||
* @return the number of waypoints visited
|
||||
*/
|
||||
public int getWaypointsVisited() {
|
||||
return waypointsVisited;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns which tube stations have been found while operating
|
||||
*
|
||||
* @return the names of the tube stations found
|
||||
*/
|
||||
public Set<TubeStation> getTubeStationsFound() {
|
||||
return Collections.unmodifiableSet(tubeStationsFound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
getLogger().info(I18N.get("drone.started"));
|
||||
|
||||
// Request initial waypoints
|
||||
requestWaypoints();
|
||||
|
||||
while (state != DroneState.TERMINATED) {
|
||||
|
||||
// Received termination signal
|
||||
if (Thread.currentThread().isInterrupted()) {
|
||||
getLogger().info(this.toString());
|
||||
break;
|
||||
}
|
||||
|
||||
// Shutdown
|
||||
if (shutdownTime != null && (currentTime.isEqual(shutdownTime) || currentTime.isAfter(shutdownTime))) {
|
||||
if (route.isEmpty()) {
|
||||
setState(DroneState.TERMINATED);
|
||||
getLogger().info(this.toString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Log current location and drone details
|
||||
getLogger().info(this.toString());
|
||||
|
||||
// Check if we have any more waypoints, if not hold position
|
||||
var nextWaypoint = route.peekFirst();
|
||||
if (nextWaypoint == null) {
|
||||
getLogger().info(I18N.get("drone.holding.position"));
|
||||
setState(DroneState.HOLDING);
|
||||
speed = 0.0;
|
||||
incrementTime();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if we received our first waypoint, adjust dummy position
|
||||
if (position.latitude() == 0 && nextWaypoint.time().isBefore(currentTime)) {
|
||||
getLogger().info(I18N.get("drone.holding.position"));
|
||||
setState(DroneState.HOLDING);
|
||||
speed = 0.0;
|
||||
incrementTime();
|
||||
continue;
|
||||
} else if (position.latitude() == 0) {
|
||||
position = Point.adjustTime(nextWaypoint, position.time());
|
||||
}
|
||||
|
||||
// Check for tube stations
|
||||
tubeStationsInRange.removeIf(tb -> !tb.point().isInRange(position, TUBE_STATION_RANGE));
|
||||
tubeStations.stream()
|
||||
.filter(tb -> !tubeStationsInRange.contains(tb))
|
||||
.filter(tb -> tb.point().isInRange(position, TUBE_STATION_RANGE))
|
||||
.peek(tubeStationsInRange::add)
|
||||
.peek(tubeStationsFound::add)
|
||||
.forEach(tb -> eventBus.push(new Message.TrafficCondition(
|
||||
Message.DISPATCHER_ID, getId(), tb.name(),
|
||||
position.time(), speed,
|
||||
Condition.values()[new Random().nextInt(Condition.values().length)],
|
||||
position.distanceTo(tb.point()))));
|
||||
|
||||
// Check if we are at the destination waypoint
|
||||
if (nextWaypoint.equals(position)) {
|
||||
setState(DroneState.HOLDING);
|
||||
speed = 0.0;
|
||||
currentTime = nextWaypoint.time();
|
||||
waypointsVisited++;
|
||||
getLogger().info(I18N.get("drone.arrived.at.waypoint"), nextWaypoint);
|
||||
position = route.removeFirst();
|
||||
requestWaypoints();
|
||||
incrementTime();
|
||||
continue;
|
||||
}
|
||||
|
||||
// Calculate new speed if we are departing to a new waypoint
|
||||
var distanceToNextWaypoint = position.distanceTo(nextWaypoint);
|
||||
longestDistanceTraveled = Math.max(longestDistanceTraveled, distanceToNextWaypoint);
|
||||
if (state == DroneState.HOLDING) {
|
||||
var timeToNextWaypoint = position.timeTo(nextWaypoint);
|
||||
speed = distanceToNextWaypoint / timeToNextWaypoint.getSeconds();
|
||||
getLogger().debug(I18N.get("drone.speed.calculation"), timeToNextWaypoint.getSeconds(), distanceToNextWaypoint);
|
||||
}
|
||||
|
||||
// Prevent overshooting the waypoint by reducing speed as we approach the waypoint
|
||||
if (speed > distanceToNextWaypoint) {
|
||||
speed = distanceToNextWaypoint;
|
||||
getLogger().info(I18N.get("drone.speed.reduced"), speed);
|
||||
}
|
||||
|
||||
// Start moving to the new waypoint
|
||||
fastestSpeed = Math.max(fastestSpeed, speed);
|
||||
position = position.moveTowards(nextWaypoint, speed, 1);
|
||||
setState(DroneState.MOVING);
|
||||
getLogger().debug(I18N.get("drone.next.waypoint.leg"), position);
|
||||
incrementTime();
|
||||
}
|
||||
|
||||
getLogger().info(I18N.get("drone.shutdown"), position);
|
||||
eventBus.push(new Message.ShutdownSignal(Message.DISPATCHER_ID, id, shutdownTime));
|
||||
|
||||
getLogger().info(I18N.get("drone.termination.stats.1"), waypointsVisited);
|
||||
getLogger().info(I18N.get("drone.termination.stats.2"), tubeStationsFound);
|
||||
getLogger().info(String.format(I18N.get("drone.termination.stats.3"), longestDistanceTraveled / 1000.0));
|
||||
getLogger().info(String.format(I18N.get("drone.termination.stats.4"), fastestSpeed * 3.6));
|
||||
}
|
||||
|
||||
private void requestWaypoints() {
|
||||
var capacity = availableRouteCapacity();
|
||||
if (capacity > ROUTE_CAPACITY - REQUEST_WAYPOINT_THRESHOLD) {
|
||||
eventBus.push(new Message.DroneCapacity(Message.DISPATCHER_ID, getId(), capacity));
|
||||
getLogger().info(I18N.get("drone.new.route.request"), capacity);
|
||||
}
|
||||
}
|
||||
|
||||
private void setState(DroneState state) {
|
||||
if (this.state == DroneState.TERMINATED) {
|
||||
return;
|
||||
}
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
var lat = position.latitude();
|
||||
var lon = position.longitude();
|
||||
var time = position.time();
|
||||
return String.format(I18N.get("drone.position"), speed, state, lat, lon, route.size(), waypointsVisited,
|
||||
time.toLocalTime());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(Message message) {
|
||||
|
||||
// Check that the message is for this drone
|
||||
if (message.targetId() != id) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for signals
|
||||
if (message instanceof Message.ShutdownSignal signal) {
|
||||
getLogger().info(I18N.get("drone.event.signal"), signal);
|
||||
shutdownTime = signal.time();
|
||||
getLogger().info(I18N.get("drone.event.signal.shutdown"));
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for new waypoints
|
||||
if (message instanceof Message.PointData data) {
|
||||
var point = data.point();
|
||||
if (availableRouteCapacity() > 0) {
|
||||
getLogger().info(I18N.get("drone.event.new.waypoint"), point);
|
||||
route.add(point);
|
||||
} else {
|
||||
getLogger().warn(I18N.get("drone.event.new.waypoint.cache.full"), point);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of points we can load in the waypoint cache
|
||||
*
|
||||
* @return number of points we can load
|
||||
*/
|
||||
private int availableRouteCapacity() {
|
||||
return ROUTE_CAPACITY - route.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the named logger for the drone (allows us to split the logs into different files)
|
||||
*
|
||||
* @return the logger
|
||||
*/
|
||||
private Logger getLogger() {
|
||||
return LoggerFactory.getLogger("Drone." + id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulates latency and delay while flying. Allows us to model in real-time the fight path
|
||||
*/
|
||||
private void incrementTime() {
|
||||
try {
|
||||
currentTime = currentTime.plusSeconds(1);
|
||||
position = Point.adjustTime(position, currentTime);
|
||||
Thread.sleep(Math.round(simulatedTimeFactor * 1000));
|
||||
} catch (InterruptedException e) {
|
||||
getLogger().debug(I18N.get("drone.thread.sleep.error"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package drones.drone;
|
||||
|
||||
/**
|
||||
* The state of the drone
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public enum DroneState {
|
||||
|
||||
/**
|
||||
* The drone is moving in some direction
|
||||
*/
|
||||
MOVING,
|
||||
|
||||
/**
|
||||
* The drone is holding at a location
|
||||
*/
|
||||
HOLDING,
|
||||
|
||||
/**
|
||||
* The drone has terminated operation
|
||||
*/
|
||||
TERMINATED
|
||||
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
package drones.geo;
|
||||
|
||||
import drones.I18N;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Represents a point in the world.
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public record Point(double latitude, double longitude, LocalDateTime time) {
|
||||
|
||||
private static final double EARTH_RADIUS = 6371.01;
|
||||
private static final double ACCURACY = 0.00001;
|
||||
|
||||
/**
|
||||
* Measures the distance between this point and another point.
|
||||
*
|
||||
* @param point the point to measure distance to
|
||||
* @return the distance in meters
|
||||
*/
|
||||
public double distanceTo(Point point) {
|
||||
var lat1 = Math.toRadians(latitude());
|
||||
var lon1 = Math.toRadians(longitude());
|
||||
var lat2 = Math.toRadians(point.latitude());
|
||||
var lon2 = Math.toRadians(point.longitude());
|
||||
double earthRadius = EARTH_RADIUS * 1000; //Meters
|
||||
return earthRadius * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if another point is withing a certain bounds
|
||||
*
|
||||
* @param point the point to check
|
||||
* @param meters the range to check for
|
||||
* @return <code>true</code> if it is within range, <code>false</code> otherwise.
|
||||
*/
|
||||
public boolean isInRange(Point point, double meters) {
|
||||
return distanceTo(point) <= meters;
|
||||
}
|
||||
|
||||
/**
|
||||
* The amount of time between two point timestamps
|
||||
*
|
||||
* @param point the other point to compare to
|
||||
* @return the duraction between the points
|
||||
*/
|
||||
public Duration timeTo(Point point) {
|
||||
var time = Duration.between(time(), point.time().plusSeconds(1)).abs();
|
||||
return time.isZero() ? Duration.ofSeconds(1) : time;
|
||||
}
|
||||
|
||||
/**
|
||||
* The bearing, measured in radians, to another points
|
||||
*
|
||||
* @param point the other point to point to
|
||||
* @return the bearing in radians
|
||||
*/
|
||||
public double bearingTo(Point point) {
|
||||
var dL = point.longitude() - longitude();
|
||||
var x = Math.cos(point.latitude()) * Math.sin(dL);
|
||||
var y = Math.cos(latitude()) * Math.sin(point.latitude()) -
|
||||
Math.sin(latitude()) * Math.cos(point.latitude()) * Math.cos(dL);
|
||||
return Math.atan2(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates what the next point would be if we would move (meters) amount
|
||||
* for (seconds) toward another point.
|
||||
*
|
||||
* @param destination The destination point to head for
|
||||
* @param meters the amount of meters to travel
|
||||
* @param seconds the amount of time it should take
|
||||
* @return the next point we would reach
|
||||
*/
|
||||
public Point moveTowards(Point destination, double meters, long seconds) {
|
||||
if (meters <= 0) {
|
||||
throw new IllegalArgumentException(I18N.get("point.meters.positive.value"));
|
||||
}
|
||||
if (seconds <= 0) {
|
||||
throw new IllegalArgumentException(I18N.get("point.seconds.positive.value"));
|
||||
}
|
||||
var brng = bearingTo(destination);
|
||||
var d = meters / 1000.0;
|
||||
var lat1 = Math.toRadians(latitude());
|
||||
var lon1 = Math.toRadians(longitude());
|
||||
var lat2 = Math.asin(Math.sin(lat1) * Math.cos(d / EARTH_RADIUS) +
|
||||
Math.cos(lat1) * Math.sin(d / EARTH_RADIUS) * Math.cos(brng));
|
||||
var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(d / EARTH_RADIUS) * Math.cos(lat1),
|
||||
Math.cos(d / EARTH_RADIUS) - Math.sin(lat1) * Math.sin(lat2));
|
||||
return new Point(Math.toDegrees(lat2), Math.toDegrees(lon2), time());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new point where the time has been adjusted to the new time
|
||||
*
|
||||
* @param point the point to use as basis
|
||||
* @param time the time to set
|
||||
* @return a new point using the old point but with changed time
|
||||
*/
|
||||
public static Point adjustTime(Point point, LocalDateTime time) {
|
||||
return new Point(point.latitude(), point.longitude(), time);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
var point = (Point) o;
|
||||
var latDiff = Math.abs(point.latitude - latitude);
|
||||
var lonDiff = Math.abs(point.longitude - longitude);
|
||||
return latDiff < ACCURACY && lonDiff < ACCURACY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(latitude, longitude);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("(lat=%f, lon=%f, time=%s)", latitude, longitude, time);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package drones.geo;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Represents a tube station
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public record TubeStation(Point point, String name) {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
TubeStation that = (TubeStation) o;
|
||||
return Objects.equals(name, that.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("(name=%s, lat=%f, lon=%f)", name, point.latitude(), point.longitude());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package drones.messages;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
/**
|
||||
* Represent a simple event bus between the {@link drones.drone.Drone} and the {@link drones.dispatcher.Dispatcher}
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public class EventBus {
|
||||
|
||||
private final List<Listener<Message>> listeners = new CopyOnWriteArrayList<>();
|
||||
private final double simulatedTimeFactor;
|
||||
|
||||
public EventBus(double simulatedTimeFactor) {
|
||||
this.simulatedTimeFactor = simulatedTimeFactor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Push a new message to the event bus
|
||||
*
|
||||
* @param message the message to send
|
||||
*/
|
||||
public void push(Message message) {
|
||||
latency();
|
||||
listeners.forEach(l -> l.onEvent(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a receiver for the messages
|
||||
*
|
||||
* @param listener the listener
|
||||
*/
|
||||
public void register(Listener<Message> listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulates a slight latency in the event bus (messages moving over the air)
|
||||
*/
|
||||
private void latency() {
|
||||
try {
|
||||
Thread.sleep(Math.round(simulatedTimeFactor * 300));
|
||||
} catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener interface for receiving messages from the event bus
|
||||
*
|
||||
* @param <Message> messsage on the buss
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface Listener<Message> {
|
||||
|
||||
/**
|
||||
* Triggered when a new message is published on the bus
|
||||
*
|
||||
* @param message the message that was published
|
||||
*/
|
||||
void onEvent(Message message);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
package drones.messages;
|
||||
|
||||
import drones.geo.Point;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* Represent a message on the {@link EventBus}
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public interface Message {
|
||||
|
||||
long DISPATCHER_ID = 0;
|
||||
|
||||
/**
|
||||
* The recipient of the message
|
||||
*/
|
||||
long targetId();
|
||||
|
||||
/**
|
||||
* Represent a message with point data for the drone
|
||||
*/
|
||||
record PointData(long targetId, Point point) implements Message {
|
||||
}
|
||||
|
||||
/**
|
||||
* Shutdown signal for the drone. Published by the {@link drones.dispatcher.Dispatcher}
|
||||
*/
|
||||
record ShutdownSignal(long targetId, long droneId, LocalDateTime time) implements Message {
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the traffic condition at a tube station
|
||||
*/
|
||||
record TrafficCondition(long targetId, long droneId, String tubeStation, LocalDateTime time,
|
||||
double speed, Condition condition, double distanceToStation) implements Message {
|
||||
|
||||
/**
|
||||
* The condition of the traffic
|
||||
*/
|
||||
public enum Condition {
|
||||
/**
|
||||
* Heavy traffic
|
||||
*/
|
||||
HEAVY,
|
||||
/**
|
||||
* Light traffic
|
||||
*/
|
||||
LIGHT,
|
||||
/**
|
||||
* Moderate traffic
|
||||
*/
|
||||
MODERATE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents a drone capacity message posted by the drone to request more waypoints
|
||||
*/
|
||||
record DroneCapacity(long targetId, long droneId, int capacity) implements Message {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
date.format=yyyy-MM-dd HH:mm:ss
|
||||
number.format=0
|
||||
# Dispatcher
|
||||
dispatcher.running.stats.1=Running with the following settings:
|
||||
dispatcher.running.stats.2=Start time:\t{}
|
||||
dispatcher.running.stats.3=Shutdown time:\t{}
|
||||
dispatcher.running.stats.4=Simulated time factor:\t{}
|
||||
dispatcher.drone.registration=Registered drone {}
|
||||
dispatcher.started=Started
|
||||
dispatcher.shutdown=Shutting down dispatcher
|
||||
dispatcher.terminating=No more drones, terminating...
|
||||
dispatcher.send.shutdown.signals=Sending shutdown signal to {} drones
|
||||
dispatcher.event.drone.shutdown=Sending shutdown signal for drone {}
|
||||
dispatcher.event.drone.data.stream.error=Failed to close drone {} data stream
|
||||
dispatcher.event.drone.capacity.request=Received capacity request from drone {} (capacity: {})
|
||||
dispatcher.event.drone.traffic.report={} @ {}: {} (drone: {},speed: {}km/h, distanceToStation: {}m)
|
||||
dispatcher.data.file.id.mismatch=Data file is corrupt, id mismatch
|
||||
dispatcher.data.file.stream.error=Failed to read data stream
|
||||
dispatcher.waypoints.sent=Sent {} waypoints to drone {}
|
||||
dispatcher.thread.sleep.error=Sleep interrupted
|
||||
dispatcher.termination.stats.1=Tube stations found: {}
|
||||
dispatcher.termination.stats.2=Tube station reports:\t{}
|
||||
dispatcher.termination.stats.3=Waypoints sent:
|
||||
dispatcher.termination.stats.4=Drone {}: {}
|
||||
# Drone
|
||||
drone.running.stats.1=Running with the following settings:
|
||||
drone.running.stats.3=Start time:\t{}
|
||||
drone.running.stats.2=Simulated time factor:\t{}
|
||||
drone.started=Started
|
||||
drone.shutdown=Shutdown at {}
|
||||
drone.holding.position=Holding position, no new waypoints to go to...
|
||||
drone.arrived.at.waypoint=Arrived to waypoint {}
|
||||
drone.new.route.request=Requested new route information ({} waypoints)
|
||||
drone.speed.calculation=Re-calculated speed for next waypoint (time: {} seconds, distance: {}m)
|
||||
drone.speed.reduced=Reduced speed to {} m/s
|
||||
drone.next.waypoint.leg=Selected next position on waypoint leg {}
|
||||
drone.position=speed=%.2f m/s, state=%s, lat=%f, lon=%f, pointsRemaining=%d, pointsVisited=%d, time=%s
|
||||
drone.event.signal=Received signal {}
|
||||
drone.event.signal.shutdown=Received shutdown, stopping processing thread...
|
||||
drone.event.new.waypoint=Received new waypoint {}
|
||||
drone.event.new.waypoint.cache.full=Drone cache was full!, skipped waypoint {}
|
||||
drone.thread.sleep.error=Sleep interrupted
|
||||
drone.termination.stats.1=Waypoints visited:\t\t{}
|
||||
drone.termination.stats.2=Tube stations found:\t{}
|
||||
drone.termination.stats.3=Longest leg travelled:\t%.2f km
|
||||
drone.termination.stats.4=Fastest speed:\t\t%.2f km/h
|
||||
# Point
|
||||
point.meters.positive.value=Meters must be a positive value
|
||||
point.seconds.positive.value=Seconds must be a positive value
|
|
@ -0,0 +1,102 @@
|
|||
package drones.dispatcher;
|
||||
|
||||
import drones.drone.Drone;
|
||||
import drones.drone.DroneState;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public class DispatcherTest {
|
||||
|
||||
@Test
|
||||
public void setupDrone() {
|
||||
var start = LocalDateTime.parse("2011-03-22 07:55:20", Dispatcher.DATE_FORMAT);
|
||||
var end = LocalDateTime.parse("2011-03-22 07:55:40", Dispatcher.DATE_FORMAT);
|
||||
var route = """
|
||||
5937,"51.476105","-0.100224","2011-03-22 07:55:26"
|
||||
5937,"51.475967","-0.100368","2011-03-22 07:55:40"
|
||||
""";
|
||||
|
||||
var dispatcher = new Dispatcher(start, end, 0);
|
||||
var drone = (Drone) dispatcher.registerDroneWithReader(5937, new BufferedReader(new StringReader(route)));
|
||||
assertEquals(drone.getPosition().time(), start);
|
||||
assertEquals(0, drone.getWaypointsRemaining());
|
||||
assertEquals(5937, drone.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pushDataToDrone() throws InterruptedException {
|
||||
var start = LocalDateTime.parse("2011-03-22 07:55:20", Dispatcher.DATE_FORMAT);
|
||||
var end = LocalDateTime.parse("2011-03-22 07:56:00", Dispatcher.DATE_FORMAT);
|
||||
var route = """
|
||||
5937,"51.476105","-0.100224","2011-03-22 07:55:26"
|
||||
5937,"51.475967","-0.100368","2011-03-22 07:55:27"
|
||||
5937,"51.476021","-0.100246","2011-03-22 07:55:28"
|
||||
5937,"51.476051","-0.100078","2011-03-22 07:55:29"
|
||||
5937,"51.476009","-0.099922","2011-03-22 07:55:30"
|
||||
5937,"51.476044","-0.099775","2011-03-22 07:55:31"
|
||||
5937,"51.476074","-0.099968","2011-03-22 07:55:42"
|
||||
5937,"51.476086","-0.100047","2011-03-22 07:55:43"
|
||||
5937,"51.476074","-0.100123","2011-03-22 07:55:44"
|
||||
5937,"51.476089","-0.10019","2011-03-22 07:55:45"
|
||||
5937,"51.476112","-0.100246","2011-03-22 07:55:46"
|
||||
5937,"51.476112","-0.100264","2011-03-22 07:55:47"
|
||||
5937,"51.476116","-0.10028","2011-03-22 07:55:48"
|
||||
5937,"51.476112","-0.100356","2011-03-22 07:55:49"
|
||||
5937,"51.476135","-0.100378","2011-03-22 07:55:50"
|
||||
5937,"51.476154","-0.100392","2011-03-22 07:55:51"
|
||||
5937,"51.476189","-0.100396","2011-03-22 07:55:52"
|
||||
5937,"51.476219","-0.100387","2011-03-22 07:55:53"
|
||||
5937,"51.476257","-0.100379","2011-03-22 07:55:54"
|
||||
""";
|
||||
|
||||
var dispatcher = new Dispatcher(start, end, 0);
|
||||
|
||||
var drone = (Drone) dispatcher.registerDroneWithReader(5937, new BufferedReader(new StringReader(route)));
|
||||
var droneRunner = new Thread(drone);
|
||||
|
||||
droneRunner.start();
|
||||
dispatcher.run();
|
||||
droneRunner.join();
|
||||
|
||||
assertEquals(route.lines().count(), drone.getWaypointsVisited());
|
||||
assertEquals(0, drone.getWaypointsRemaining());
|
||||
assertEquals(DroneState.TERMINATED, drone.getState());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void registerTubeStations() throws IOException, InterruptedException {
|
||||
var start = LocalDateTime.parse("2011-03-22 07:55:20", Dispatcher.DATE_FORMAT);
|
||||
var end = LocalDateTime.parse("2011-03-22 07:56:00", Dispatcher.DATE_FORMAT);
|
||||
var dispatcher = new Dispatcher(start, end, 0);
|
||||
var stations = """
|
||||
"Acton Town",51.503071,-0.280303
|
||||
"Aldgate",51.514342,-0.075627
|
||||
"Aldgate East",51.51503,-0.073162
|
||||
"All Saints (DLR)",51.510477,-0.012625
|
||||
""";
|
||||
dispatcher.registerTubeStations(new BufferedReader(new StringReader(stations)));
|
||||
|
||||
var route = """
|
||||
5937,"51.476105","-0.100224","2011-03-22 07:55:26"
|
||||
5937,"51.51503","-0.073162","2011-03-22 07:55:27"
|
||||
5937,"51.476021","-0.100246","2011-03-22 07:55:28"
|
||||
""";
|
||||
var drone = (Drone) dispatcher.registerDroneWithReader(5937, new BufferedReader(new StringReader(route)));
|
||||
var droneRunner = new Thread(drone);
|
||||
|
||||
droneRunner.start();
|
||||
dispatcher.run();
|
||||
droneRunner.join();
|
||||
|
||||
var foundTubeStations = drone.getTubeStationsFound();
|
||||
assertTrue(foundTubeStations.stream().anyMatch(tb -> tb.name().equals("Aldgate")));
|
||||
assertTrue(foundTubeStations.stream().anyMatch(tb -> tb.name().equals("Aldgate East")));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
package drones.drone;
|
||||
|
||||
import drones.dispatcher.Dispatcher;
|
||||
import drones.geo.Point;
|
||||
import drones.messages.EventBus;
|
||||
import drones.messages.Message;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class DroneTest {
|
||||
|
||||
@Test
|
||||
public void setupDrone() {
|
||||
var points = generatePoints();
|
||||
var eventBus = new EventBus(0);
|
||||
|
||||
var drone = new Drone(1L, getStartTime(), 1, eventBus, Collections.emptyList());
|
||||
eventBus.register(drone);
|
||||
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(0)));
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(1)));
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(2)));
|
||||
|
||||
assertEquals(3, drone.getWaypointsRemaining());
|
||||
assertEquals(0, drone.getWaypointsVisited());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void initialWaypointIsSetAsPosition() throws InterruptedException {
|
||||
var points = generatePoints();
|
||||
var eventBus = new EventBus(0);
|
||||
|
||||
var drone = new Drone(1L, getStartTime(), 0, eventBus, Collections.emptyList());
|
||||
eventBus.register(drone);
|
||||
|
||||
var droneThread = new Thread(drone);
|
||||
droneThread.start();
|
||||
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(0)));
|
||||
eventBus.push(new Message.ShutdownSignal(drone.getId(), drone.getId(), getEndTime()));
|
||||
|
||||
droneThread.join();
|
||||
|
||||
assertEquals(drone.getPosition(), points.get(0));
|
||||
assertEquals(drone.getWaypointsVisited(), 1);
|
||||
assertEquals(drone.getWaypointsRemaining(), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void travelBetweenWaypoints() throws InterruptedException {
|
||||
var points = generatePoints();
|
||||
var eventBus = new EventBus(0);
|
||||
|
||||
var drone = new Drone(1L, getStartTime(), 0, eventBus, Collections.emptyList());
|
||||
eventBus.register(drone);
|
||||
|
||||
var droneThread = new Thread(drone);
|
||||
droneThread.start();
|
||||
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(0)));
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(1)));
|
||||
eventBus.push(new Message.PointData(drone.getId(), points.get(2)));
|
||||
eventBus.push(new Message.ShutdownSignal(drone.getId(), drone.getId(), getEndTime()));
|
||||
|
||||
droneThread.join();
|
||||
|
||||
assertEquals(DroneState.TERMINATED, drone.getState());
|
||||
assertEquals(getEndTime(), drone.getPosition().time());
|
||||
assertEquals(0, drone.getWaypointsRemaining());
|
||||
assertEquals(3, drone.getWaypointsVisited());
|
||||
}
|
||||
|
||||
private List<Point> generatePoints() {
|
||||
var point1 = new Point(51.476105, -0.100224, LocalDateTime.parse("2011-03-22 07:55:26", Dispatcher.DATE_FORMAT));
|
||||
var point2 = new Point(51.475967, -0.100368, LocalDateTime.parse("2011-03-22 07:55:30", Dispatcher.DATE_FORMAT));
|
||||
var point3 = new Point(51.476021, -0.100246, LocalDateTime.parse("2011-03-22 07:55:34", Dispatcher.DATE_FORMAT));
|
||||
return List.of(point1, point2, point3);
|
||||
}
|
||||
|
||||
private LocalDateTime getStartTime() {
|
||||
return LocalDateTime.parse("2011-03-22 07:55:20", Dispatcher.DATE_FORMAT);
|
||||
}
|
||||
|
||||
private LocalDateTime getEndTime() {
|
||||
return LocalDateTime.parse("2011-03-22 07:55:40", Dispatcher.DATE_FORMAT);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package drones.messages;
|
||||
|
||||
import drones.geo.Point;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class EventBusTest {
|
||||
|
||||
@Test
|
||||
public void listenerTriggeredOnEvent() {
|
||||
var triggered = new ArrayList<Message>();
|
||||
var eventBus = new EventBus(0);
|
||||
eventBus.register(triggered::add);
|
||||
|
||||
eventBus.push(new Message.PointData(1L, new Point(1, 2, LocalDateTime.now())));
|
||||
eventBus.push(new Message.ShutdownSignal(2, 2, LocalDateTime.now()));
|
||||
|
||||
assertEquals(2, triggered.size());
|
||||
assertEquals(1, triggered.get(0).targetId());
|
||||
assertEquals(2, triggered.get(1).targetId());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
rootProject.name = 'drone-simulation'
|
||||
|
||||
include 'library'
|
||||
project(":library").name= 'drone-lib'
|
||||
|
||||
include 'simulation'
|
||||
project(":simulation").name= 'drone-simulator'
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import java.nio.file.Paths
|
||||
|
||||
plugins {
|
||||
id 'application'
|
||||
}
|
||||
|
||||
application {
|
||||
mainClassName = 'simulation.Simulation'
|
||||
}
|
||||
|
||||
installDist.destinationDir = Paths.get(rootProject.rootDir.canonicalPath, 'dist', "drone-simulator-$version").toFile()
|
||||
distZip.destinationDir = Paths.get(rootProject.rootDir.canonicalPath, 'dist').toFile()
|
||||
distTar.destinationDir = Paths.get(rootProject.rootDir.canonicalPath, 'dist').toFile()
|
||||
run.workingDir = rootProject.rootDir
|
||||
|
||||
dependencies {
|
||||
implementation project(':drone-lib')
|
||||
implementation 'info.picocli:picocli:4.6.1'
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package simulation;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* Convenience class for retrieving translated strings
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public interface I18N {
|
||||
|
||||
/**
|
||||
* Get a translated string
|
||||
*
|
||||
* @param key the translation key
|
||||
* @return the translated message
|
||||
*/
|
||||
static String get(String key) {
|
||||
return ResourceBundle.getBundle("simulation-messages").getString(key);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,110 @@
|
|||
package simulation;
|
||||
|
||||
import drones.dispatcher.Dispatcher;
|
||||
import picocli.CommandLine;
|
||||
import picocli.CommandLine.Command;
|
||||
import picocli.CommandLine.Help.Visibility;
|
||||
import picocli.CommandLine.ITypeConverter;
|
||||
import picocli.CommandLine.Option;
|
||||
import picocli.CommandLine.Parameters;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Simulates flying drones by using data form the ./data directory
|
||||
* <p>
|
||||
* Creates log files to the logs/ directory:
|
||||
* - dispatcher.log: Logs from the dispatcher controlling the drones
|
||||
* - drone-<id>.log: Logs from the drones
|
||||
* <p>
|
||||
* The output of the simulation that is printed in the console is a report for traffic conditions of the provided
|
||||
* tube stations. Every line represents the condition of the traffic at a certain point in time and from a certain
|
||||
* waypoint viewpoint.
|
||||
*/
|
||||
|
||||
@Command(name = "drone-simulator", mixinStandardHelpOptions = true,
|
||||
version = "1.0", resourceBundle = Simulation.RESOURCE_BUNDLE, showDefaultValues = true)
|
||||
public class Simulation implements Callable<Integer> {
|
||||
|
||||
public static final String RESOURCE_BUNDLE = "simulation-messages";
|
||||
|
||||
@Parameters(arity = "1", paramLabel = "DRONES", showDefaultValue = Visibility.NEVER)
|
||||
private List<Long> droneIds;
|
||||
|
||||
@Option(names = {"-d", "--data-dir"}, defaultValue = ".")
|
||||
private Path dataDir;
|
||||
|
||||
@Option(names = {"-t", "--tube-stations"}, defaultValue = "./tube.csv")
|
||||
private Path tubeStationsFile;
|
||||
|
||||
@Option(names = {"-b", "--start-time"}, defaultValue = "2011-03-22 07:47:00", converter = TimeConverter.class)
|
||||
private LocalDateTime currentTime;
|
||||
|
||||
@Option(names = {"-e", "--shut-down-time"}, defaultValue = "2011-03-22 08:10:00", converter = TimeConverter.class)
|
||||
private LocalDateTime shutDownTime;
|
||||
|
||||
@Option(names = {"-p", "--simulation-speed"}, defaultValue = "0.0")
|
||||
private double simulationSpeed;
|
||||
|
||||
@Override
|
||||
public Integer call() throws Exception {
|
||||
System.out.println(I18N.get("starting.message"));
|
||||
System.out.println();
|
||||
|
||||
// Use default location for tube file (in the data directory) if not explicitly set
|
||||
if (!tubeStationsFile.toFile().exists()) {
|
||||
tubeStationsFile = dataDir.resolve(Path.of("tube.csv"));
|
||||
}
|
||||
|
||||
final var executor = Executors.newFixedThreadPool(droneIds.size() + 1);
|
||||
try {
|
||||
|
||||
// Setup dispatcher
|
||||
var dispatcher = new Dispatcher(currentTime, shutDownTime, simulationSpeed);
|
||||
dispatcher.registerTubeStations(Files.newBufferedReader(tubeStationsFile));
|
||||
|
||||
// Setup Drones
|
||||
var drones = new ArrayList<Runnable>();
|
||||
for (long id : droneIds) {
|
||||
var droneData = Files.newBufferedReader(dataDir.resolve(Path.of(id + ".csv")));
|
||||
drones.add(dispatcher.registerDroneWithReader(id, droneData));
|
||||
}
|
||||
|
||||
// Power them on
|
||||
executor.execute(dispatcher);
|
||||
drones.forEach(executor::execute);
|
||||
|
||||
} finally {
|
||||
executor.shutdown();
|
||||
executor.awaitTermination(20, TimeUnit.MINUTES);
|
||||
}
|
||||
System.out.println(I18N.get("ended.message"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Main entrypoint of the simulation
|
||||
*
|
||||
* @param args program arguments
|
||||
*/
|
||||
public static void main(String... args) {
|
||||
int exitCode = new CommandLine(new Simulation()).execute(args);
|
||||
System.exit(exitCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date formats for input times
|
||||
*/
|
||||
static class TimeConverter implements ITypeConverter<LocalDateTime> {
|
||||
public LocalDateTime convert(String value) throws Exception {
|
||||
return LocalDateTime.parse(value, Dispatcher.DATE_FORMAT);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package simulation.logging;
|
||||
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.core.sift.AbstractDiscriminator;
|
||||
|
||||
/**
|
||||
* Provides capability for the logger to log drone logs to different files
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public class DroneLogPerFile extends AbstractDiscriminator<ILoggingEvent> {
|
||||
@Override
|
||||
public String getDiscriminatingValue(ILoggingEvent event) {
|
||||
return event.getLoggerName().split("\\.")[1];
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return "droneId";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,277 @@
|
|||
package simulation.logging;
|
||||
|
||||
import ch.qos.logback.classic.spi.LoggingEvent;
|
||||
import ch.qos.logback.core.AppenderBase;
|
||||
import drones.drone.Drone;
|
||||
import drones.geo.Point;
|
||||
import drones.geo.TubeStation;
|
||||
import drones.messages.Message.TrafficCondition.Condition;
|
||||
import simulation.I18N;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Combines logs to form a map of the flow route and tube stations
|
||||
*
|
||||
* @author John Ahlroos
|
||||
*/
|
||||
public class RouteMapGenerator<E> extends AppenderBase<E> {
|
||||
|
||||
private static final int IMAGE_PIXEL_SIZE = 800;
|
||||
private static final String DRONE_LOGGER = "Drone";
|
||||
private static final String DISPATCHER_LOGGER = "Dispatcher";
|
||||
private static final String REPORT_LOGGER = "Report";
|
||||
private static final String REPORT_FILE_NAME = "traffic-report.png";
|
||||
|
||||
private static final Pattern ALL_TUBE_STATIONS_PATTERN = Pattern.compile(
|
||||
"Registered\sTube\sStation.*(name=(.*),\\slat=([\\d+\\.]+)),\\s(lon=([\\d+\\.-]+))");
|
||||
private static final Pattern VISITED_TUBE_STATIONS_PATTERN = Pattern.compile(
|
||||
"(.*) @ (\\d\\d:\\d\\d:\\d\\d): (.*) \\(drone: (\\d*),speed: (\\d*)km/h, distanceToStation: (\\d*)m\\)");
|
||||
private static final Pattern ROUTE_POINT_PATTERN = Pattern.compile(
|
||||
"Arrived.*(lat=([\\d+\\.]+)),\\s(lon=([\\d+\\.-]+))");
|
||||
|
||||
private double min_lat = Double.MAX_VALUE;
|
||||
private double min_lon = Double.MAX_VALUE;
|
||||
private double max_lat = Double.MIN_VALUE;
|
||||
private double max_lon = Double.MIN_VALUE;
|
||||
|
||||
private final Map<Long, List<Point>> points = new ConcurrentHashMap<>();
|
||||
private final List<TubeStation> stations = new ArrayList<>();
|
||||
private final Set<TubeStationWithCondition> foundStations = new HashSet<>();
|
||||
private final List<Long> terminated = new ArrayList<>();
|
||||
private boolean mapRendered = false;
|
||||
|
||||
@Override
|
||||
protected void append(E event) {
|
||||
if (simulationTerminated()) {
|
||||
if (!mapRendered) {
|
||||
var file = renderMap();
|
||||
System.out.println();
|
||||
System.out.println(String.format(I18N.get("map.generation.message"), file.toAbsolutePath()));
|
||||
System.out.println();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var loggingEvent = (LoggingEvent) event;
|
||||
var message = loggingEvent.getFormattedMessage();
|
||||
var loggerName = loggingEvent.getLoggerName();
|
||||
|
||||
if (DISPATCHER_LOGGER.equals(loggerName)) {
|
||||
collectAllTubeStation(message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (REPORT_LOGGER.equals(loggerName)) {
|
||||
collectVisitedTubeStation(message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (loggerName.startsWith(DRONE_LOGGER)) {
|
||||
var droneId = Long.parseLong(loggerName.substring(loggerName.indexOf(".") + 1));
|
||||
registerDroneTerminated(droneId, message);
|
||||
collectRoutePoint(droneId, message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void collectAllTubeStation(String message) {
|
||||
var m2 = ALL_TUBE_STATIONS_PATTERN.matcher(message);
|
||||
while (m2.find()) {
|
||||
var name = m2.group(2);
|
||||
var lat = Double.parseDouble(m2.group(3));
|
||||
var lon = Double.parseDouble(m2.group(5));
|
||||
var tb = new TubeStation(new Point(lat, lon, null), name);
|
||||
stations.add(tb);
|
||||
}
|
||||
}
|
||||
|
||||
private void collectVisitedTubeStation(String message) {
|
||||
var m = VISITED_TUBE_STATIONS_PATTERN.matcher(message);
|
||||
while (m.find()) {
|
||||
var name = m.group(1);
|
||||
var time = m.group(2);
|
||||
var condition = m.group(3);
|
||||
var droneId = Long.parseLong(m.group(4));
|
||||
var speed = Integer.parseInt(m.group(5));
|
||||
stations.stream()
|
||||
.filter(tb -> tb.name().equals(name))
|
||||
.map(tb -> new TubeStationWithCondition(tb, time, condition, speed, droneId))
|
||||
.forEach(foundStations::add);
|
||||
}
|
||||
}
|
||||
|
||||
private void collectRoutePoint(long droneId, String message) {
|
||||
var m = ROUTE_POINT_PATTERN.matcher(message);
|
||||
while (m.find()) {
|
||||
var lat = Double.parseDouble(m.group(2));
|
||||
min_lat = Math.min(min_lat, lat);
|
||||
max_lat = Math.max(max_lat, lat);
|
||||
var lon = Double.parseDouble(m.group(4));
|
||||
min_lon = Math.min(min_lon, lon);
|
||||
max_lon = Math.max(max_lon, lon);
|
||||
points.putIfAbsent(droneId, new ArrayList<>());
|
||||
points.get(droneId).add(new Point(lat, lon, null));
|
||||
}
|
||||
}
|
||||
|
||||
private void registerDroneTerminated(long droneId, String message) {
|
||||
if (message.contains("state=TERMINATED")) {
|
||||
terminated.add(droneId);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean simulationTerminated() {
|
||||
return !points.keySet().isEmpty() && terminated.containsAll(points.keySet());
|
||||
}
|
||||
|
||||
private Path renderMap() {
|
||||
mapRendered = true;
|
||||
|
||||
var colors = new ArrayDeque<>(List.of(Color.BLUE, Color.ORANGE));
|
||||
var map = new BufferedImage(IMAGE_PIXEL_SIZE, IMAGE_PIXEL_SIZE, BufferedImage.TYPE_INT_ARGB);
|
||||
var graphics = (Graphics2D) map.getGraphics();
|
||||
|
||||
var font1 = new Font("Arial", Font.ITALIC, 18);
|
||||
var font2 = new Font("Arial", Font.BOLD, 16);
|
||||
var font3 = new Font("Arial", Font.PLAIN, 14);
|
||||
|
||||
// Apply Zoom factor
|
||||
min_lon -= 0.006;
|
||||
max_lon += 0.006;
|
||||
min_lat -= 0.006;
|
||||
max_lat += 0.006;
|
||||
|
||||
renderBackground(graphics);
|
||||
stations.forEach(tb -> renderStation(tb, graphics));
|
||||
foundStations.forEach(tb -> renderFoundStation(tb, graphics, font2, font3));
|
||||
points.forEach((droneId, points) -> renderRoute(droneId, points, graphics, font1, font2, colors));
|
||||
|
||||
try {
|
||||
var file = Path.of(REPORT_FILE_NAME);
|
||||
ImageIO.write(map, "png", file.toFile());
|
||||
return file;
|
||||
} catch (IOException e) {
|
||||
System.err.println(I18N.get("map.file.generation.failed"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void renderBackground(Graphics graphics) {
|
||||
graphics.setColor(Color.LIGHT_GRAY);
|
||||
graphics.fillRect(0, 0, IMAGE_PIXEL_SIZE - 1, IMAGE_PIXEL_SIZE - 1);
|
||||
}
|
||||
|
||||
private void renderStation(TubeStation tb, Graphics graphics) {
|
||||
if (foundStations.stream().map(TubeStationWithCondition::tubeStation).anyMatch(tb::equals)) {
|
||||
return;
|
||||
}
|
||||
var x = getXCoordinate(tb.point());
|
||||
var y = getYCoordinate(tb.point());
|
||||
graphics.setColor(new Color(170, 170, 170));
|
||||
graphics.fillRect(x - 5, y - 5, 10, 10);
|
||||
graphics.drawString(tb.name(), x + 10, y + 5);
|
||||
}
|
||||
|
||||
private void renderFoundStation(TubeStationWithCondition tb, Graphics graphics, Font font2, Font font3) {
|
||||
var x = getXCoordinate(tb.tubeStation.point());
|
||||
var y = getYCoordinate(tb.tubeStation.point());
|
||||
|
||||
graphics.setColor(switch (Condition.valueOf(tb.condition)) {
|
||||
case LIGHT -> Color.GREEN;
|
||||
case MODERATE -> Color.YELLOW;
|
||||
case HEAVY -> Color.RED;
|
||||
});
|
||||
|
||||
graphics.setFont(font2);
|
||||
graphics.fillRect(x - 5, y - 5, 10, 10);
|
||||
graphics.drawString(String.format("%s@%s %s", tb.tubeStation.name(), tb.time, tb.condition), x + 10, y + 5);
|
||||
graphics.setColor(Color.DARK_GRAY);
|
||||
graphics.setFont(font3);
|
||||
graphics.drawString(String.format("(%s@%skm/h)", tb.droneId, tb.speed), x + 10, y + 20);
|
||||
graphics.setFont(font2);
|
||||
}
|
||||
|
||||
private void renderRoute(long droneId, List<Point> data, Graphics graphics, Font font1, Font font2,
|
||||
Deque<Color> colors) {
|
||||
|
||||
// Convert range to pixels
|
||||
var range = data.get(0).moveTowards(data.get(1), Drone.TUBE_STATION_RANGE, 1);
|
||||
var rangeX = Math.abs(getXCoordinate(data.get(0)) - getXCoordinate(range));
|
||||
var rangeY = Math.abs(getYCoordinate(data.get(0)) - getYCoordinate(range));
|
||||
var rangeW = Math.max(rangeX, rangeY);
|
||||
|
||||
var routeColor = colors.poll();
|
||||
var prevPoint = data.get(0);
|
||||
|
||||
var prevX = getXCoordinate(prevPoint);
|
||||
var prevY = getYCoordinate(prevPoint);
|
||||
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
var point = data.get(i);
|
||||
var x = getXCoordinate(point);
|
||||
var y = getYCoordinate(point);
|
||||
|
||||
var rangeAlpha = (Math.abs(x - prevX + y - prevY) + 255) % 255;
|
||||
var rangeColor = new Color(0, 30, 254, rangeAlpha);
|
||||
|
||||
graphics.setColor(rangeColor);
|
||||
graphics.fillOval(prevX - rangeW / 2, prevY - rangeW / 2, rangeW, rangeW);
|
||||
|
||||
graphics.setColor(routeColor);
|
||||
graphics.drawLine(prevX, prevY, x, y);
|
||||
|
||||
if (i == 0) {
|
||||
graphics.setFont(font1);
|
||||
graphics.fillOval(x - 5, y - 5, 10, 10);
|
||||
graphics.drawString(String.format(I18N.get("map.drone.start"), droneId), x - 20, y - 10);
|
||||
graphics.setFont(font2);
|
||||
} else if (i == data.size() - 1) {
|
||||
graphics.setFont(font1);
|
||||
graphics.fillOval(x - 5, y - 5, 10, 10);
|
||||
graphics.drawString(String.format(I18N.get("map.drone.end"), droneId), x - 20, y + 30);
|
||||
graphics.setFont(font2);
|
||||
}
|
||||
|
||||
prevPoint = point;
|
||||
prevX = getXCoordinate(prevPoint);
|
||||
prevY = getYCoordinate(prevPoint);
|
||||
}
|
||||
}
|
||||
|
||||
private int getXCoordinate(Point p) {
|
||||
var lonExtent = max_lon - min_lon;
|
||||
return (int) ((IMAGE_PIXEL_SIZE * (p.longitude() - min_lon)) / lonExtent);
|
||||
}
|
||||
|
||||
private int getYCoordinate(Point p) {
|
||||
var latExtent = max_lat - min_lat;
|
||||
return (int) ((IMAGE_PIXEL_SIZE * (p.latitude() - min_lat)) / latExtent);
|
||||
}
|
||||
|
||||
private record TubeStationWithCondition(
|
||||
TubeStation tubeStation, String time, String condition, int speed, long droneId) {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
var that = (TubeStationWithCondition) o;
|
||||
return Objects.equals(tubeStation.name(), that.tubeStation.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(tubeStation.name());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
<configuration debug="false" scan="true">
|
||||
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
|
||||
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<withJansi>false</withJansi>
|
||||
<encoder>
|
||||
<pattern>%msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="REPORT_LOG_FILE" class="ch.qos.logback.core.FileAppender">
|
||||
<file>logs/report.log</file>
|
||||
<append>false</append>
|
||||
<encoder>
|
||||
<pattern>%msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="ROUTE_MAP" class="simulation.logging.RouteMapGenerator">
|
||||
<encoder>
|
||||
<pattern>%msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="DISPATCHER_LOG" class="ch.qos.logback.core.FileAppender">
|
||||
<file>logs/dispatcher.log</file>
|
||||
<append>false</append>
|
||||
<encoder>
|
||||
<pattern>Dispatcher - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="DRONE_LOG" class="ch.qos.logback.classic.sift.SiftingAppender">
|
||||
<discriminator class="simulation.logging.DroneLogPerFile">
|
||||
<defaultValue></defaultValue>
|
||||
</discriminator>
|
||||
<sift>
|
||||
<appender name="DRONE_LOG_${contextName}" class="ch.qos.logback.core.FileAppender">
|
||||
<file>logs/drone-${droneId}.log</file>
|
||||
<append>false</append>
|
||||
<encoder>
|
||||
<pattern>Drone-${droneId} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
</sift>
|
||||
</appender>
|
||||
|
||||
<root level="OFF"/>
|
||||
|
||||
<logger name="Dispatcher" level="INFO">
|
||||
<appender-ref ref="DISPATCHER_LOG"/>
|
||||
<appender-ref ref="ROUTE_MAP"/>
|
||||
</logger>
|
||||
|
||||
<logger name="Report" level="INFO">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
<appender-ref ref="REPORT_LOG_FILE"/>
|
||||
<appender-ref ref="ROUTE_MAP"/>
|
||||
</logger>
|
||||
|
||||
<logger name="Drone" level="INFO">
|
||||
<appender-ref ref="DRONE_LOG"/>
|
||||
<appender-ref ref="ROUTE_MAP"/>
|
||||
</logger>
|
||||
|
||||
|
||||
</configuration>
|
|
@ -0,0 +1,23 @@
|
|||
# General
|
||||
usage.headerHeading=A Simulator for simulating drone routes.%n
|
||||
# Options
|
||||
d=The path to the drone data
|
||||
t=The path to the tube stations data
|
||||
s=At what time should the simulation terminate
|
||||
p.0=The speed of the simulation time.
|
||||
p.1=0 (no time simulation) -> 1.0 (full time simulation)
|
||||
w.0=Should tube conditions only be reported at waypoints
|
||||
w.1=If false then tube conditions will also be reported along the route to a waypoint when a tube station is within range
|
||||
# Parameters
|
||||
DRONES.0=The drones id's to include in the simulation.
|
||||
DRONES.1=Drone data files must exist for these " +"ids in the --data-dir folder
|
||||
# General
|
||||
starting.message=Waiting for traffic reports...
|
||||
ended.message=Simulation complete.
|
||||
# Errors
|
||||
data.file.not.found.error=Data file for drone %d not found in %s
|
||||
# Route Map
|
||||
map.drone.start=Start @ drone-%d
|
||||
map.drone.end=End @ drone-%d
|
||||
map.file.generation.failed=Image generation failed.
|
||||
map.generation.message=The route map was rendered to %s
|
Loading…
Reference in New Issue