Przeglądaj źródła

raw UI + Module prototype

Willi Zschiebsch 4 lat temu
commit
c9a9909e0e
62 zmienionych plików z 1522 dodań i 0 usunięć
  1. BIN
      .gradle/6.5.1/executionHistory/executionHistory.bin
  2. BIN
      .gradle/6.5.1/executionHistory/executionHistory.lock
  3. BIN
      .gradle/6.5.1/fileChanges/last-build.bin
  4. BIN
      .gradle/6.5.1/fileContent/fileContent.lock
  5. BIN
      .gradle/6.5.1/fileHashes/fileHashes.bin
  6. BIN
      .gradle/6.5.1/fileHashes/fileHashes.lock
  7. BIN
      .gradle/6.5.1/fileHashes/resourceHashesCache.bin
  8. 0 0
      .gradle/6.5.1/gc.properties
  9. BIN
      .gradle/6.5.1/javaCompile/classAnalysis.bin
  10. BIN
      .gradle/6.5.1/javaCompile/jarAnalysis.bin
  11. BIN
      .gradle/6.5.1/javaCompile/javaCompile.lock
  12. BIN
      .gradle/6.5.1/javaCompile/taskHistory.bin
  13. BIN
      .gradle/buildOutputCleanup/buildOutputCleanup.lock
  14. 2 0
      .gradle/buildOutputCleanup/cache.properties
  15. BIN
      .gradle/buildOutputCleanup/outputFiles.bin
  16. BIN
      .gradle/checksums/checksums.lock
  17. BIN
      .gradle/checksums/md5-checksums.bin
  18. BIN
      .gradle/checksums/sha1-checksums.bin
  19. 0 0
      .gradle/vcs-1/gc.properties
  20. 3 0
      .idea/.gitignore
  21. 6 0
      .idea/compiler.xml
  22. 22 0
      .idea/gradle.xml
  23. 20 0
      .idea/jarRepositories.xml
  24. 7 0
      .idea/misc.xml
  25. 28 0
      build.gradle
  26. BIN
      build/classes/java/main/mdd/client/Connectable$1.class
  27. BIN
      build/classes/java/main/mdd/client/Connectable.class
  28. BIN
      build/classes/java/main/mdd/client/FXMLDocumentController.class
  29. BIN
      build/classes/java/main/mdd/client/HelloWorldServer.class
  30. BIN
      build/classes/java/main/mdd/client/Input.class
  31. BIN
      build/classes/java/main/mdd/client/Main.class
  32. BIN
      build/classes/java/main/mdd/client/Module.class
  33. BIN
      build/classes/java/main/mdd/client/Output.class
  34. BIN
      build/classes/java/main/mdd/client/WorkBench.class
  35. BIN
      build/classes/java/test/SampleTest.class
  36. 96 0
      build/reports/tests/test/classes/SampleTest.html
  37. 179 0
      build/reports/tests/test/css/base-style.css
  38. 84 0
      build/reports/tests/test/css/style.css
  39. 133 0
      build/reports/tests/test/index.html
  40. 194 0
      build/reports/tests/test/js/report.js
  41. 103 0
      build/reports/tests/test/packages/default-package.html
  42. 70 0
      build/resources/main/mdd/client/dark-theme.css
  43. 62 0
      build/resources/main/mdd/client/main.fxml
  44. 7 0
      build/test-results/test/TEST-SampleTest.xml
  45. 0 0
      build/test-results/test/binary/output.bin
  46. BIN
      build/test-results/test/binary/output.bin.idx
  47. BIN
      build/test-results/test/binary/results.bin
  48. 17 0
      build/tmp/compileJava/source-classes-mapping.txt
  49. 2 0
      build/tmp/compileTestJava/source-classes-mapping.txt
  50. 1 0
      gradle.properties
  51. 2 0
      settings.gradle
  52. 53 0
      src/main/java/mdd/client/Connectable.java
  53. 50 0
      src/main/java/mdd/client/FXMLDocumentController.java
  54. 31 0
      src/main/java/mdd/client/HelloWorldServer.java
  55. 28 0
      src/main/java/mdd/client/Input.java
  56. 44 0
      src/main/java/mdd/client/Main.java
  57. 107 0
      src/main/java/mdd/client/Module.java
  58. 20 0
      src/main/java/mdd/client/Output.java
  59. 10 0
      src/main/java/mdd/client/WorkBench.java
  60. 70 0
      src/main/resources/mdd/client/dark-theme.css
  61. 62 0
      src/main/resources/mdd/client/main.fxml
  62. 9 0
      src/test/java/SampleTest.java

BIN
.gradle/6.5.1/executionHistory/executionHistory.bin


BIN
.gradle/6.5.1/executionHistory/executionHistory.lock


BIN
.gradle/6.5.1/fileChanges/last-build.bin


BIN
.gradle/6.5.1/fileContent/fileContent.lock


BIN
.gradle/6.5.1/fileHashes/fileHashes.bin


BIN
.gradle/6.5.1/fileHashes/fileHashes.lock


BIN
.gradle/6.5.1/fileHashes/resourceHashesCache.bin


+ 0 - 0
.gradle/6.5.1/gc.properties


BIN
.gradle/6.5.1/javaCompile/classAnalysis.bin


BIN
.gradle/6.5.1/javaCompile/jarAnalysis.bin


BIN
.gradle/6.5.1/javaCompile/javaCompile.lock


BIN
.gradle/6.5.1/javaCompile/taskHistory.bin


BIN
.gradle/buildOutputCleanup/buildOutputCleanup.lock


+ 2 - 0
.gradle/buildOutputCleanup/cache.properties

@@ -0,0 +1,2 @@
+#Wed Jul 08 12:07:50 CEST 2020
+gradle.version=6.5.1

BIN
.gradle/buildOutputCleanup/outputFiles.bin


BIN
.gradle/checksums/checksums.lock


BIN
.gradle/checksums/md5-checksums.bin


BIN
.gradle/checksums/sha1-checksums.bin


+ 0 - 0
.gradle/vcs-1/gc.properties


+ 3 - 0
.idea/.gitignore

@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml

+ 6 - 0
.idea/compiler.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="14" />
+  </component>
+</project>

+ 22 - 0
.idea/gradle.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="delegatedBuild" value="true" />
+        <option name="testRunner" value="GRADLE" />
+        <option name="distributionType" value="LOCAL" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleHome" value="D:/gradle/gradle-6.5.1" />
+        <option name="gradleJvm" value="14" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+          </set>
+        </option>
+        <option name="useQualifiedModuleNames" value="true" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>

+ 20 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
+  </component>
+</project>

+ 7 - 0
.idea/misc.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_14" default="true" project-jdk-name="14" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 28 - 0
build.gradle

@@ -0,0 +1,28 @@
+plugins {
+    id 'java'
+    id 'application'
+    id 'org.openjfx.javafxplugin' version '0.0.7'
+}
+
+group 'leobots.de'
+version '1.0'
+
+sourceCompatibility = 14
+
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testCompile group: 'junit', name: 'junit', version: '4.12'
+    compile group: 'org.zeromq', name: 'jeromq', version: '0.5.2'
+    compile 'org.json:json:20171018'
+}
+
+javafx {
+    modules = ['javafx.controls', 'javafx.fxml']
+    version = '14.0.1'
+}
+
+mainClassName = 'mdd.client.Main'

BIN
build/classes/java/main/mdd/client/Connectable$1.class


BIN
build/classes/java/main/mdd/client/Connectable.class


BIN
build/classes/java/main/mdd/client/FXMLDocumentController.class


BIN
build/classes/java/main/mdd/client/HelloWorldServer.class


BIN
build/classes/java/main/mdd/client/Input.class


BIN
build/classes/java/main/mdd/client/Main.class


BIN
build/classes/java/main/mdd/client/Module.class


BIN
build/classes/java/main/mdd/client/Output.class


BIN
build/classes/java/main/mdd/client/WorkBench.class


BIN
build/classes/java/test/SampleTest.class


+ 96 - 0
build/reports/tests/test/classes/SampleTest.html

@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Class SampleTest</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Class SampleTest</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; 
+<a href="../packages/default-package.html">default-package</a> &gt; SampleTest</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">1</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.001s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Tests</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Tests</h2>
+<table>
+<thead>
+<tr>
+<th>Test</th>
+<th>Duration</th>
+<th>Result</th>
+</tr>
+</thead>
+<tr>
+<td class="success">test</td>
+<td class="success">0.001s</td>
+<td class="success">passed</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 6.5.1</a> at 08.07.2020, 13:10:42</p>
+</div>
+</div>
+</body>
+</html>

+ 179 - 0
build/reports/tests/test/css/base-style.css

@@ -0,0 +1,179 @@
+
+body {
+    margin: 0;
+    padding: 0;
+    font-family: sans-serif;
+    font-size: 12pt;
+}
+
+body, a, a:visited {
+    color: #303030;
+}
+
+#content {
+    padding-left: 50px;
+    padding-right: 50px;
+    padding-top: 30px;
+    padding-bottom: 30px;
+}
+
+#content h1 {
+    font-size: 160%;
+    margin-bottom: 10px;
+}
+
+#footer {
+    margin-top: 100px;
+    font-size: 80%;
+    white-space: nowrap;
+}
+
+#footer, #footer a {
+    color: #a0a0a0;
+}
+
+#line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+#label-for-line-wrapping-toggle {
+    vertical-align: middle;
+}
+
+ul {
+    margin-left: 0;
+}
+
+h1, h2, h3 {
+    white-space: nowrap;
+}
+
+h2 {
+    font-size: 120%;
+}
+
+ul.tabLinks {
+    padding-left: 0;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    overflow: auto;
+    min-width: 800px;
+    width: auto !important;
+    width: 800px;
+}
+
+ul.tabLinks li {
+    float: left;
+    height: 100%;
+    list-style: none;
+    padding-left: 10px;
+    padding-right: 10px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    margin-bottom: 0;
+    -moz-border-radius: 7px;
+    border-radius: 7px;
+    margin-right: 25px;
+    border: solid 1px #d4d4d4;
+    background-color: #f0f0f0;
+}
+
+ul.tabLinks li:hover {
+    background-color: #fafafa;
+}
+
+ul.tabLinks li.selected {
+    background-color: #c5f0f5;
+    border-color: #c5f0f5;
+}
+
+ul.tabLinks a {
+    font-size: 120%;
+    display: block;
+    outline: none;
+    text-decoration: none;
+    margin: 0;
+    padding: 0;
+}
+
+ul.tabLinks li h2 {
+    margin: 0;
+    padding: 0;
+}
+
+div.tab {
+}
+
+div.selected {
+    display: block;
+}
+
+div.deselected {
+    display: none;
+}
+
+div.tab table {
+    min-width: 350px;
+    width: auto !important;
+    width: 350px;
+    border-collapse: collapse;
+}
+
+div.tab th, div.tab table {
+    border-bottom: solid #d0d0d0 1px;
+}
+
+div.tab th {
+    text-align: left;
+    white-space: nowrap;
+    padding-left: 6em;
+}
+
+div.tab th:first-child {
+    padding-left: 0;
+}
+
+div.tab td {
+    white-space: nowrap;
+    padding-left: 6em;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+div.tab td:first-child {
+    padding-left: 0;
+}
+
+div.tab td.numeric, div.tab th.numeric {
+    text-align: right;
+}
+
+span.code {
+    display: inline-block;
+    margin-top: 0em;
+    margin-bottom: 1em;
+}
+
+span.code pre {
+    font-size: 11pt;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    padding-left: 10px;
+    padding-right: 10px;
+    margin: 0;
+    background-color: #f7f7f7;
+    border: solid 1px #d0d0d0;
+    min-width: 700px;
+    width: auto !important;
+    width: 700px;
+}
+
+span.wrapped pre {
+    word-wrap: break-word;
+    white-space: pre-wrap;
+    word-break: break-all;
+}
+
+label.hidden {
+    display: none;
+}

+ 84 - 0
build/reports/tests/test/css/style.css

@@ -0,0 +1,84 @@
+
+#summary {
+    margin-top: 30px;
+    margin-bottom: 40px;
+}
+
+#summary table {
+    border-collapse: collapse;
+}
+
+#summary td {
+    vertical-align: top;
+}
+
+.breadcrumbs, .breadcrumbs a {
+    color: #606060;
+}
+
+.infoBox {
+    width: 110px;
+    padding-top: 15px;
+    padding-bottom: 15px;
+    text-align: center;
+}
+
+.infoBox p {
+    margin: 0;
+}
+
+.counter, .percent {
+    font-size: 120%;
+    font-weight: bold;
+    margin-bottom: 8px;
+}
+
+#duration {
+    width: 125px;
+}
+
+#successRate, .summaryGroup {
+    border: solid 2px #d0d0d0;
+    -moz-border-radius: 10px;
+    border-radius: 10px;
+}
+
+#successRate {
+    width: 140px;
+    margin-left: 35px;
+}
+
+#successRate .percent {
+    font-size: 180%;
+}
+
+.success, .success a {
+    color: #008000;
+}
+
+div.success, #successRate.success {
+    background-color: #bbd9bb;
+    border-color: #008000;
+}
+
+.failures, .failures a {
+    color: #b60808;
+}
+
+.skipped, .skipped a {
+    color: #c09853;
+}
+
+div.failures, #successRate.failures {
+    background-color: #ecdada;
+    border-color: #b60808;
+}
+
+ul.linkList {
+    padding-left: 0;
+}
+
+ul.linkList li {
+    list-style: none;
+    margin-bottom: 5px;
+}

+ 133 - 0
build/reports/tests/test/index.html

@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Test Summary</title>
+<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="css/style.css" rel="stylesheet" type="text/css"/>
+<script src="js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Test Summary</h1>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">1</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.001s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Packages</a>
+</li>
+<li>
+<a href="#tab1">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Packages</h2>
+<table>
+<thead>
+<tr>
+<th>Package</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="success">
+<a href="packages/default-package.html">default-package</a>
+</td>
+<td>1</td>
+<td>0</td>
+<td>0</td>
+<td>0.001s</td>
+<td class="success">100%</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div id="tab1" class="tab">
+<h2>Classes</h2>
+<table>
+<thead>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="success">
+<a href="classes/SampleTest.html">SampleTest</a>
+</td>
+<td>1</td>
+<td>0</td>
+<td>0</td>
+<td>0.001s</td>
+<td class="success">100%</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 6.5.1</a> at 08.07.2020, 13:10:42</p>
+</div>
+</div>
+</body>
+</html>

+ 194 - 0
build/reports/tests/test/js/report.js

@@ -0,0 +1,194 @@
+(function (window, document) {
+    "use strict";
+
+    var tabs = {};
+
+    function changeElementClass(element, classValue) {
+        if (element.getAttribute("className")) {
+            element.setAttribute("className", classValue);
+        } else {
+            element.setAttribute("class", classValue);
+        }
+    }
+
+    function getClassAttribute(element) {
+        if (element.getAttribute("className")) {
+            return element.getAttribute("className");
+        } else {
+            return element.getAttribute("class");
+        }
+    }
+
+    function addClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element) + " " + classValue);
+    }
+
+    function removeClass(element, classValue) {
+        changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+    }
+
+    function initTabs() {
+        var container = document.getElementById("tabs");
+
+        tabs.tabs = findTabs(container);
+        tabs.titles = findTitles(tabs.tabs);
+        tabs.headers = findHeaders(container);
+        tabs.select = select;
+        tabs.deselectAll = deselectAll;
+        tabs.select(0);
+
+        return true;
+    }
+
+    function getCheckBox() {
+        return document.getElementById("line-wrapping-toggle");
+    }
+
+    function getLabelForCheckBox() {
+        return document.getElementById("label-for-line-wrapping-toggle");
+    }
+
+    function findCodeBlocks() {
+        var spans = document.getElementById("tabs").getElementsByTagName("span");
+        var codeBlocks = [];
+        for (var i = 0; i < spans.length; ++i) {
+            if (spans[i].className.indexOf("code") >= 0) {
+                codeBlocks.push(spans[i]);
+            }
+        }
+        return codeBlocks;
+    }
+
+    function forAllCodeBlocks(operation) {
+        var codeBlocks = findCodeBlocks();
+
+        for (var i = 0; i < codeBlocks.length; ++i) {
+            operation(codeBlocks[i], "wrapped");
+        }
+    }
+
+    function toggleLineWrapping() {
+        var checkBox = getCheckBox();
+
+        if (checkBox.checked) {
+            forAllCodeBlocks(addClass);
+        } else {
+            forAllCodeBlocks(removeClass);
+        }
+    }
+
+    function initControls() {
+        if (findCodeBlocks().length > 0) {
+            var checkBox = getCheckBox();
+            var label = getLabelForCheckBox();
+
+            checkBox.onclick = toggleLineWrapping;
+            checkBox.checked = false;
+
+            removeClass(label, "hidden");
+         }
+    }
+
+    function switchTab() {
+        var id = this.id.substr(1);
+
+        for (var i = 0; i < tabs.tabs.length; i++) {
+            if (tabs.tabs[i].id === id) {
+                tabs.select(i);
+                break;
+            }
+        }
+
+        return false;
+    }
+
+    function select(i) {
+        this.deselectAll();
+
+        changeElementClass(this.tabs[i], "tab selected");
+        changeElementClass(this.headers[i], "selected");
+
+        while (this.headers[i].firstChild) {
+            this.headers[i].removeChild(this.headers[i].firstChild);
+        }
+
+        var h2 = document.createElement("H2");
+
+        h2.appendChild(document.createTextNode(this.titles[i]));
+        this.headers[i].appendChild(h2);
+    }
+
+    function deselectAll() {
+        for (var i = 0; i < this.tabs.length; i++) {
+            changeElementClass(this.tabs[i], "tab deselected");
+            changeElementClass(this.headers[i], "deselected");
+
+            while (this.headers[i].firstChild) {
+                this.headers[i].removeChild(this.headers[i].firstChild);
+            }
+
+            var a = document.createElement("A");
+
+            a.setAttribute("id", "ltab" + i);
+            a.setAttribute("href", "#tab" + i);
+            a.onclick = switchTab;
+            a.appendChild(document.createTextNode(this.titles[i]));
+
+            this.headers[i].appendChild(a);
+        }
+    }
+
+    function findTabs(container) {
+        return findChildElements(container, "DIV", "tab");
+    }
+
+    function findHeaders(container) {
+        var owner = findChildElements(container, "UL", "tabLinks");
+        return findChildElements(owner[0], "LI", null);
+    }
+
+    function findTitles(tabs) {
+        var titles = [];
+
+        for (var i = 0; i < tabs.length; i++) {
+            var tab = tabs[i];
+            var header = findChildElements(tab, "H2", null)[0];
+
+            header.parentNode.removeChild(header);
+
+            if (header.innerText) {
+                titles.push(header.innerText);
+            } else {
+                titles.push(header.textContent);
+            }
+        }
+
+        return titles;
+    }
+
+    function findChildElements(container, name, targetClass) {
+        var elements = [];
+        var children = container.childNodes;
+
+        for (var i = 0; i < children.length; i++) {
+            var child = children.item(i);
+
+            if (child.nodeType === 1 && child.nodeName === name) {
+                if (targetClass && child.className.indexOf(targetClass) < 0) {
+                    continue;
+                }
+
+                elements.push(child);
+            }
+        }
+
+        return elements;
+    }
+
+    // Entry point.
+
+    window.onload = function() {
+        initTabs();
+        initControls();
+    };
+} (window, window.document));

+ 103 - 0
build/reports/tests/test/packages/default-package.html

@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<meta http-equiv="x-ua-compatible" content="IE=edge"/>
+<title>Test results - Default package</title>
+<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
+<link href="../css/style.css" rel="stylesheet" type="text/css"/>
+<script src="../js/report.js" type="text/javascript"></script>
+</head>
+<body>
+<div id="content">
+<h1>Default package</h1>
+<div class="breadcrumbs">
+<a href="../index.html">all</a> &gt; default-package</div>
+<div id="summary">
+<table>
+<tr>
+<td>
+<div class="summaryGroup">
+<table>
+<tr>
+<td>
+<div class="infoBox" id="tests">
+<div class="counter">1</div>
+<p>tests</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="failures">
+<div class="counter">0</div>
+<p>failures</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="ignored">
+<div class="counter">0</div>
+<p>ignored</p>
+</div>
+</td>
+<td>
+<div class="infoBox" id="duration">
+<div class="counter">0.001s</div>
+<p>duration</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</td>
+<td>
+<div class="infoBox success" id="successRate">
+<div class="percent">100%</div>
+<p>successful</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div id="tabs">
+<ul class="tabLinks">
+<li>
+<a href="#tab0">Classes</a>
+</li>
+</ul>
+<div id="tab0" class="tab">
+<h2>Classes</h2>
+<table>
+<thread>
+<tr>
+<th>Class</th>
+<th>Tests</th>
+<th>Failures</th>
+<th>Ignored</th>
+<th>Duration</th>
+<th>Success rate</th>
+</tr>
+</thread>
+<tr>
+<td class="success">
+<a href="../classes/SampleTest.html">SampleTest</a>
+</td>
+<td>1</td>
+<td>0</td>
+<td>0</td>
+<td>0.001s</td>
+<td class="success">100%</td>
+</tr>
+</table>
+</div>
+</div>
+<div id="footer">
+<p>
+<div>
+<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
+<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
+</label>
+</div>Generated by 
+<a href="http://www.gradle.org">Gradle 6.5.1</a> at 08.07.2020, 13:10:42</p>
+</div>
+</div>
+</body>
+</html>

+ 70 - 0
build/resources/main/mdd/client/dark-theme.css

@@ -0,0 +1,70 @@
+.root {
+    -fx-accent: #1e74c6;
+    -fx-focus-color: -fx-accent;
+    -fx-base: #373e43;
+    -fx-control-inner-background: derive(-fx-base, 35%);
+    -fx-control-inner-background-alt: -fx-control-inner-background ;
+}
+
+.label{
+    -fx-text-fill: lightgray;
+}
+
+.text-field {
+    -fx-prompt-text-fill: gray;
+}
+
+.titulo{
+    -fx-font-weight: bold;
+    -fx-font-size: 18px;
+}
+
+.button{
+    -fx-focus-traversable: false;
+}
+
+.button:hover{
+    -fx-text-fill: white;
+}
+
+.separator *.line {
+    -fx-background-color: #3C3C3C;
+    -fx-border-style: solid;
+    -fx-border-width: 1px;
+}
+
+.scroll-bar{
+    -fx-background-color: derive(-fx-base,45%)
+}
+
+.button:default {
+    -fx-base: -fx-accent ;
+}
+
+.table-view{
+    /*-fx-background-color: derive(-fx-base, 10%);*/
+    -fx-selection-bar-non-focused: derive(-fx-base, 50%);
+}
+
+.table-view .column-header .label{
+    -fx-alignment: CENTER_LEFT;
+    -fx-font-weight: none;
+}
+
+.list-cell:even,
+.list-cell:odd,
+.table-row-cell:even,
+.table-row-cell:odd{
+    -fx-control-inner-background: derive(-fx-base, 15%);
+}
+
+.list-cell:empty,
+.table-row-cell:empty {
+    -fx-background-color: transparent;
+}
+
+.list-cell,
+.table-row-cell{
+    -fx-border-color: transparent;
+    -fx-table-cell-border-color:transparent;
+}

+ 62 - 0
build/resources/main/mdd/client/main.fxml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+
+<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mdd.client.FXMLDocumentController">
+   <children>
+       <MenuBar>
+           <Menu fx:id="mMain" text="Main">
+               <MenuItem text="Exit" />
+           </Menu>
+
+           <Menu fx:id="mAbout" text="About">
+           </Menu>
+       </MenuBar>
+      <SplitPane fx:id="sPane" dividerPositions="0.2591973244147157, 0.8010033444816054" prefHeight="${sPane.parent.height}" prefWidth="600.0">
+        <items>
+            <Accordion>
+              <panes>
+                <TitledPane animated="false" text="untitled 1">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 2">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 3">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+              </panes>
+            </Accordion>
+            <TabPane fx:id="tabPane" prefHeight="238.0" prefWidth="318.0" tabClosingPolicy="UNAVAILABLE">
+
+            </TabPane>
+            <Accordion>
+              <panes>
+                <TitledPane animated="false" text="untitled 1">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 2">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 3">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+              </panes>
+            </Accordion>
+        </items>
+      </SplitPane>
+   </children>
+</VBox>

+ 7 - 0
build/test-results/test/TEST-SampleTest.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite name="SampleTest" tests="1" skipped="0" failures="0" errors="0" timestamp="2020-07-08T11:10:42" hostname="DESKTOP-4P32VSF" time="0.001">
+  <properties/>
+  <testcase name="test" classname="SampleTest" time="0.001"/>
+  <system-out><![CDATA[]]></system-out>
+  <system-err><![CDATA[]]></system-err>
+</testsuite>

+ 0 - 0
build/test-results/test/binary/output.bin


BIN
build/test-results/test/binary/output.bin.idx


BIN
build/test-results/test/binary/results.bin


+ 17 - 0
build/tmp/compileJava/source-classes-mapping.txt

@@ -0,0 +1,17 @@
+mdd/client/Main.java
+ mdd.client.Main
+mdd/client/HelloWorldServer.java
+ mdd.client.HelloWorldServer
+mdd/client/WorkBench.java
+ mdd.client.WorkBench
+mdd/client/Output.java
+ mdd.client.Output
+mdd/client/Connectable.java
+ mdd.client.Connectable
+ mdd.client.Connectable$1
+mdd/client/Input.java
+ mdd.client.Input
+mdd/client/FXMLDocumentController.java
+ mdd.client.FXMLDocumentController
+mdd/client/Module.java
+ mdd.client.Module

+ 2 - 0
build/tmp/compileTestJava/source-classes-mapping.txt

@@ -0,0 +1,2 @@
+SampleTest.java
+ SampleTest

+ 1 - 0
gradle.properties

@@ -0,0 +1 @@
+org.gradle.warning.mode=all

+ 2 - 0
settings.gradle

@@ -0,0 +1,2 @@
+rootProject.name = 'mdd_client'
+

+ 53 - 0
src/main/java/mdd/client/Connectable.java

@@ -0,0 +1,53 @@
+package mdd.client;
+
+import javafx.event.EventHandler;
+import javafx.scene.Group;
+import javafx.scene.control.TextField;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Circle;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+
+public class Connectable extends Group {
+    private Circle _border;
+    private Circle _circle;
+    private boolean _connected = false;
+    private boolean _optimizable = false;
+
+    public Connectable(){
+        _border = new Circle(0,0, 7);
+        _border.setFill(Color.BLACK);
+        _circle = new Circle(0,0,5);
+        _circle.setFill(Color.WHITE);
+
+        _circle.setOnMouseClicked(new EventHandler<MouseEvent>()
+        {
+            @Override
+            public void handle(MouseEvent e) {
+                if(e.getButton() == MouseButton.SECONDARY) {
+                    if (!_connected){
+                        _optimizable = !_optimizable;
+                        updateCircle();
+                    }
+                }
+
+            }
+        });
+
+        getChildren().addAll(_border, _circle);
+    }
+
+    private void updateCircle(){
+        if (_connected){
+            _circle.setFill(Color.YELLOW);
+        } else if (_optimizable) {
+            _circle.setFill(Color.GREEN);
+        } else {
+            _circle.setFill(Color.WHITE);
+        }
+    }
+
+}

+ 50 - 0
src/main/java/mdd/client/FXMLDocumentController.java

@@ -0,0 +1,50 @@
+package mdd.client;
+
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Tab;
+import javafx.scene.control.TabPane;
+import javafx.scene.layout.AnchorPane;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+
+import java.net.URL;
+import java.util.ResourceBundle;
+
+public class FXMLDocumentController implements Initializable {
+    @FXML
+    private TabPane tabPane;
+
+    @Override
+    public void initialize(URL location, ResourceBundle resources) {
+        System.out.println("Loading...");
+
+        Tab tab = new Tab();
+        tab.setText("new tab");
+
+        AnchorPane pane = new AnchorPane(new Module());
+        pane.setMinHeight(0.0f);
+        pane.setMinWidth(0.0f);
+        pane.setPrefHeight(1800.0f);
+        pane.setPrefWidth(2000.0f);
+
+        WorkBench bench = new WorkBench();
+        bench.setPrefSize(200.0f, 200.0f);
+
+        bench.setContent(pane);
+        /*pane.setMinHeight(0.0f);
+        pane.setMinWidth(0.0f);
+        pane.setPrefHeight(180.0f);
+        pane.setPrefWidth(200.0f);//*/
+                // minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0"
+        tab.setContent(bench);
+        tabPane.getTabs().add(tab);
+        //tabPane.getTabs().get(0).setContent(new Rectangle(200,200, Color.LIGHTSTEELBLUE));
+    }
+
+    //@FXML private TabPane tabPane;
+
+    /*public FXMLDocumentController() {
+
+    }//*/
+}

+ 31 - 0
src/main/java/mdd/client/HelloWorldServer.java

@@ -0,0 +1,31 @@
+package mdd.client;
+
+import org.zeromq.SocketType;
+import org.zeromq.ZMQ;
+import org.zeromq.ZContext;
+
+public class HelloWorldServer
+{
+    public static void main(String[] args) throws Exception
+    {
+        try (ZContext context = new ZContext()) {
+            // Socket to talk to clients
+            ZMQ.Socket socket = context.createSocket(SocketType.REP);
+            socket.bind("tcp://*:5555");
+
+            while (!Thread.currentThread().isInterrupted()) {
+                // Block until a message is received
+                byte[] reply = socket.recv(0);
+
+                // Print the message
+                System.out.println(
+                        "Received: [" + new String(reply, ZMQ.CHARSET) + "]"
+                );
+
+                // Send a response
+                String response = "Hello, world!";
+                socket.send(response.getBytes(ZMQ.CHARSET), 0);
+            }
+        }
+    }
+}

+ 28 - 0
src/main/java/mdd/client/Input.java

@@ -0,0 +1,28 @@
+package mdd.client;
+
+import javafx.scene.control.TextField;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+
+public class Input  extends Connectable {
+    private Text _label;
+    private TextField _input;
+
+    public Input(){
+        super();
+        _label = new Text("TEST");
+        _label.setFont(new Font("Arial", 15));
+        _label.setFill(Color.WHITE);
+
+        _input = new TextField("{1, 2, 3}");
+        _input.setPrefWidth(50);
+
+        VBox vbox = new VBox(_label, _input);
+        vbox.setTranslateX(10);
+        vbox.setTranslateY(-10);
+
+        getChildren().add(vbox);
+    }
+}

+ 44 - 0
src/main/java/mdd/client/Main.java

@@ -0,0 +1,44 @@
+package mdd.client;
+
+import javafx.application.Application;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.Tab;
+import javafx.scene.control.TabPane;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import javafx.stage.Stage;
+import org.zeromq.SocketType;
+import org.zeromq.ZContext;
+import org.zeromq.ZMQ;
+import zmq.socket.Sockets;
+
+import java.io.IOException;
+
+public class Main extends Application {
+
+
+
+    public static void main(String[] args) {
+        launch(args);
+    }
+
+    @Override
+    public void start(Stage primaryStage){
+        Parent root = null;
+        try {
+            root = FXMLLoader.load(getClass().getResource("main.fxml"));
+        } catch (IOException e) {
+           throw new RuntimeException(e);
+        }
+
+        Scene scene = new Scene(root);
+        scene.getStylesheets().add(String.valueOf(getClass().getResource("dark-theme.css")));
+        primaryStage.setFullScreen(true);
+        primaryStage.setMaximized(true);
+        primaryStage.setScene(scene);
+        primaryStage.show();
+    }
+}

+ 107 - 0
src/main/java/mdd/client/Module.java

@@ -0,0 +1,107 @@
+package mdd.client;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Point2D;
+import com.sun.javafx.geom.RoundRectangle2D;
+import javafx.scene.Group;
+import javafx.scene.control.Label;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+import org.json.JSONObject;
+
+
+public class Module extends Group {
+    private boolean _dragged = false;
+    private Point2D _old_pos;
+    private Point2D _pos = new Point2D(0.0f,0.0f);
+
+    public Module(){
+        Rectangle titlebar;
+        Rectangle background;
+        Text caption;
+        VBox inputs = new VBox(new Input(), new Input(), new Input());
+        VBox outputs = new VBox(new Output(), new Output(), new Output());
+
+        inputs.setSpacing(10);
+
+        outputs.setSpacing(10);
+
+
+        HBox hbox = new HBox(inputs, outputs);
+        hbox.setSpacing(20);
+        hbox.setTranslateX(-7);
+        hbox.setTranslateY(30);
+
+        System.out.println(hbox.getPrefWidth());
+
+        //JSONObject parameters
+        titlebar = new Rectangle(0.0f, 0.0f, 150-20, 20.0f);
+        titlebar.setArcWidth(10.0f);
+        titlebar.setArcHeight(10.0f);
+        titlebar.setFill(Color.ROYALBLUE);
+        background = new Rectangle(0.0f, 0.0f, 150-20, 150 + 40);
+        background.setArcWidth(10.0f);
+        background.setArcHeight(10.0f);
+        background.setFill(Color.GRAY);
+        caption = new Text("TEST");
+        caption.setFont(new Font("Arial", 15));
+        caption.setFill(Color.WHITE);
+        caption.setX(10);
+        caption.setY(15);
+
+
+        getChildren().addAll( background, titlebar, caption, hbox);
+
+        addEventFilter(MouseEvent.MOUSE_CLICKED, e -> {
+            if(e.getButton() == MouseButton.PRIMARY) {
+
+            }
+            if(e.getButton() == MouseButton.SECONDARY) {
+
+            }
+        });
+
+        addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
+            System.out.println("[Module]: press event detected!");
+            if(e.getButton() == MouseButton.PRIMARY) {
+                if (!_dragged){
+                    _old_pos = new Point2D(e.getSceneX(), e.getSceneY());
+                }
+            }
+            if(e.getButton() == MouseButton.SECONDARY) {
+
+            }
+        });
+
+        addEventFilter(MouseEvent.MOUSE_DRAGGED, e -> {
+            //System.out.println("[Module]: dragg event detected!");
+            if(e.getButton() == MouseButton.PRIMARY) {
+                _dragged = true;
+            }
+            if(e.getButton() == MouseButton.SECONDARY) {
+
+            }
+        });
+
+        addEventFilter(MouseEvent.MOUSE_RELEASED, e -> {
+            System.out.println("[Module]: release event detected!");
+            if(e.getButton() == MouseButton.PRIMARY) {
+                _dragged = false;
+                System.out.print("[Module]: got: "); System.out.print(e.getSceneX()); System.out.print(" | "); System.out.print(e.getSceneY());
+                System.out.println();
+                _pos = new Point2D(_pos.getX()+ e.getSceneX() - _old_pos.getX(), _pos.getY() + e.getSceneY() - _old_pos.getY());
+                setTranslateX(_pos.getX());
+                setTranslateY(_pos.getY());
+            }
+            if(e.getButton() == MouseButton.SECONDARY) {
+
+            }
+        });
+    }
+}

+ 20 - 0
src/main/java/mdd/client/Output.java

@@ -0,0 +1,20 @@
+package mdd.client;
+
+import javafx.scene.paint.Color;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+
+public class Output extends Connectable {
+    private Text _label;
+
+    public Output(){
+        super();
+        _label = new Text("TEST");
+        _label.setFont(new Font("Arial", 15));
+        _label.setFill(Color.WHITE);
+        _label.setTranslateX(-50);
+        _label.setTranslateY(7);
+        getChildren().add(_label);
+    }
+
+}

+ 10 - 0
src/main/java/mdd/client/WorkBench.java

@@ -0,0 +1,10 @@
+package mdd.client;
+
+import javafx.scene.control.ScrollPane;
+
+public class WorkBench extends ScrollPane {
+
+    public WorkBench(){
+        super();
+    }
+}

+ 70 - 0
src/main/resources/mdd/client/dark-theme.css

@@ -0,0 +1,70 @@
+.root {
+    -fx-accent: #1e74c6;
+    -fx-focus-color: -fx-accent;
+    -fx-base: #373e43;
+    -fx-control-inner-background: derive(-fx-base, 35%);
+    -fx-control-inner-background-alt: -fx-control-inner-background ;
+}
+
+.label{
+    -fx-text-fill: lightgray;
+}
+
+.text-field {
+    -fx-prompt-text-fill: gray;
+}
+
+.titulo{
+    -fx-font-weight: bold;
+    -fx-font-size: 18px;
+}
+
+.button{
+    -fx-focus-traversable: false;
+}
+
+.button:hover{
+    -fx-text-fill: white;
+}
+
+.separator *.line {
+    -fx-background-color: #3C3C3C;
+    -fx-border-style: solid;
+    -fx-border-width: 1px;
+}
+
+.scroll-bar{
+    -fx-background-color: derive(-fx-base,45%)
+}
+
+.button:default {
+    -fx-base: -fx-accent ;
+}
+
+.table-view{
+    /*-fx-background-color: derive(-fx-base, 10%);*/
+    -fx-selection-bar-non-focused: derive(-fx-base, 50%);
+}
+
+.table-view .column-header .label{
+    -fx-alignment: CENTER_LEFT;
+    -fx-font-weight: none;
+}
+
+.list-cell:even,
+.list-cell:odd,
+.table-row-cell:even,
+.table-row-cell:odd{
+    -fx-control-inner-background: derive(-fx-base, 15%);
+}
+
+.list-cell:empty,
+.table-row-cell:empty {
+    -fx-background-color: transparent;
+}
+
+.list-cell,
+.table-row-cell{
+    -fx-border-color: transparent;
+    -fx-table-cell-border-color:transparent;
+}

+ 62 - 0
src/main/resources/mdd/client/main.fxml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+
+<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="mdd.client.FXMLDocumentController">
+   <children>
+       <MenuBar>
+           <Menu fx:id="mMain" text="Main">
+               <MenuItem text="Exit" />
+           </Menu>
+
+           <Menu fx:id="mAbout" text="About">
+           </Menu>
+       </MenuBar>
+      <SplitPane fx:id="sPane" dividerPositions="0.2591973244147157, 0.8010033444816054" prefHeight="${sPane.parent.height}" prefWidth="600.0">
+        <items>
+            <Accordion>
+              <panes>
+                <TitledPane animated="false" text="untitled 1">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 2">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 3">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+              </panes>
+            </Accordion>
+            <TabPane fx:id="tabPane" prefHeight="238.0" prefWidth="318.0" tabClosingPolicy="UNAVAILABLE">
+
+            </TabPane>
+            <Accordion>
+              <panes>
+                <TitledPane animated="false" text="untitled 1">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 2">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+                <TitledPane animated="false" text="untitled 3">
+                  <content>
+                    <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
+                  </content>
+                </TitledPane>
+              </panes>
+            </Accordion>
+        </items>
+      </SplitPane>
+   </children>
+</VBox>

+ 9 - 0
src/test/java/SampleTest.java

@@ -0,0 +1,9 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SampleTest {
+    @Test
+    public void test(){
+        Assert.assertTrue(true);
+    }
+}