Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Okonkwo2020-10-27 09:18:19 +0000
committerPhilip Okonkwo2020-10-28 10:09:15 +0000
commit97e78d74dbf86fbca74b77916f766d63fdd89d60 (patch)
treede40052f2cffaead58c86757ec0bdde945a6677c
parent77b8c1e16996f8b587b9b45b3899258a99fc8ed7 (diff)
downloadorg.eclipse.app4mc.cloud-97e78d74dbf86fbca74b77916f766d63fdd89d60.tar.gz
org.eclipse.app4mc.cloud-97e78d74dbf86fbca74b77916f766d63fdd89d60.tar.xz
org.eclipse.app4mc.cloud-97e78d74dbf86fbca74b77916f766d63fdd89d60.zip
Bug 568236 - User interface improvement for APP4MC Cloud
The user interface for the web service on the cloud could use a better look. This should be a change to the look of all the pages (index, workflow, administration, login etc...) It also adds an about page. Change-Id: I5d050a57809c95c6b19fa2382441dffb73e3d724 Signed-off-by: Philip Okonkwo <philipcokonkwo@yahoo.com>
-rw-r--r--manager/pom.xml10
-rw-r--r--manager/src/main/java/org/eclipse/app4mc/cloud/manager/AboutPageController.java29
-rw-r--r--manager/src/main/resources/static/css/styles.css146
-rw-r--r--manager/src/main/resources/static/images/Logo_Panorama_small.pngbin0 -> 14600 bytes
-rw-r--r--manager/src/main/resources/static/images/app4mc-logo_small.pngbin0 -> 16638 bytes
-rw-r--r--manager/src/main/resources/static/images/bg-header2.jpgbin0 -> 2949701 bytes
-rw-r--r--manager/src/main/resources/static/index.html39
-rw-r--r--manager/src/main/resources/static/js/admin.js11
-rw-r--r--manager/src/main/resources/static/js/workflow.js39
-rw-r--r--manager/src/main/resources/templates/about.html113
-rw-r--r--manager/src/main/resources/templates/admin.html168
-rw-r--r--manager/src/main/resources/templates/error.html58
-rw-r--r--manager/src/main/resources/templates/fragment.html30
-rw-r--r--manager/src/main/resources/templates/index.html29
-rw-r--r--manager/src/main/resources/templates/login.html69
-rw-r--r--manager/src/main/resources/templates/selectedServices.html4
-rw-r--r--manager/src/main/resources/templates/status.html4
-rw-r--r--manager/src/main/resources/templates/workflow.html123
18 files changed, 568 insertions, 304 deletions
diff --git a/manager/pom.xml b/manager/pom.xml
index 64f0ad7..43a6362 100644
--- a/manager/pom.xml
+++ b/manager/pom.xml
@@ -80,6 +80,16 @@
<artifactId>bootstrap</artifactId>
<version>4.5.2</version>
</dependency>
+
+ <dependency>
+ <groupId>org.webjars</groupId>
+ <artifactId>font-awesome</artifactId>
+ <version>5.13.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.thymeleaf.extras</groupId>
+ <artifactId>thymeleaf-extras-springsecurity5</artifactId>
+ </dependency>
</dependencies>
<build>
diff --git a/manager/src/main/java/org/eclipse/app4mc/cloud/manager/AboutPageController.java b/manager/src/main/java/org/eclipse/app4mc/cloud/manager/AboutPageController.java
new file mode 100644
index 0000000..054f389
--- /dev/null
+++ b/manager/src/main/java/org/eclipse/app4mc/cloud/manager/AboutPageController.java
@@ -0,0 +1,29 @@
+/*********************************************************************************
+ * Copyright (c) 2020 Robert Bosch GmbH and others.
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+package org.eclipse.app4mc.cloud.manager;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@Controller
+public class AboutPageController {
+
+ @GetMapping("/about")
+ public String workflow(Model model) {
+ // render the form view
+ return "about";
+ }
+
+} \ No newline at end of file
diff --git a/manager/src/main/resources/static/css/styles.css b/manager/src/main/resources/static/css/styles.css
new file mode 100644
index 0000000..dbeec43
--- /dev/null
+++ b/manager/src/main/resources/static/css/styles.css
@@ -0,0 +1,146 @@
+html, body{
+ height:100%;
+}
+
+h1{
+ color: black;
+}
+
+.custom-file-label{
+ border-radius : 40px;
+ -moz-border-radius:40px;
+ -webkit-border-radius:40px;
+}
+
+.custom-file-label::after{
+ border-radius : 40px;
+ -moz-border-radius:40px;
+ -webkit-border-radius:40px;
+}
+
+.form-control{
+ border-radius : 40px;
+ -moz-border-radius:40px;
+ -webkit-border-radius:40px;
+}
+
+#wf-fm-group{
+ padding:0;
+}
+
+.hero{
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ background-image: linear-gradient(rgba(220, 220, 220, 0.9) 50%, rgba(220, 220, 220, 0.9) 50%), url("../images/bg-header2.jpg");
+ background-color: #cccccc;
+ background-size: cover;
+}
+
+.left-btn, .right-btn{
+ border-radius: 40px;
+ padding-left: 30px;
+ padding-right: 30px;
+}
+.list-group{
+ border-radius : 40px;
+}
+
+.banner{
+ margin: 0;
+ padding: 0;
+ background-image: linear-gradient(rgba(220, 220, 220, 0.9) 50%, rgba(220, 220, 220, 0.9) 50%), url("../images/bg-header2.jpg");
+ background-color: #cccccc;
+ background-size: cover;
+ height: 300px;
+ width:100%;
+ z-index: -1;
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+.list-group-item{
+ border-radius : 40px;
+ -moz-border-radius:40px;
+ -webkit-border-radius:40px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-right: 5px;
+}
+
+.btn-rmv{
+ background-color: Black;
+ border: none;
+ color: white;
+ padding: 10px 14px;
+ font-size: 16px;
+ cursor: pointer;
+ border-radius : 50%;
+}
+
+.navcon{
+ margin: 0;
+ padding: 0;
+}
+
+.nav-item{
+ margin-left: 30px;
+}
+
+.nav-brand{
+ width: 150px;
+ display: block;
+}
+
+.plist {
+ margin: auto 0;
+}
+
+.fm-ctrl-left{
+ border-radius : 40px 0px 0px 40px;
+ -moz-border-radius:40px 0px 0px 40px;
+ -webkit-border-radius:40px 0px 0px 40px;
+}
+
+.fm-ctrl-center{
+ border-radius : 0;
+ -moz-border-radius:0;
+ -webkit-border-radius:0;
+}
+
+.fm-ctrl-right{
+ border-radius : 0px 40px 40px 0px;
+ -moz-border-radius:0px 40px 40px 0px;
+ -webkit-border-radius:0px 40px 40px 0px;
+}
+
+.btn-save{
+ border: none;
+ color: white;
+ padding: 10px 14px;
+ font-size: 16px;
+ cursor: pointer;
+}
+
+.half-btn{
+ width: 100px
+}
+
+/* Scroll Bar */
+::-webkit-scrollbar {
+ width: 10px;
+}
+
+::-webkit-scrollbar-track {
+ background: #f1f1f1;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #888;
+ border-radius: 5px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: #555;
+} \ No newline at end of file
diff --git a/manager/src/main/resources/static/images/Logo_Panorama_small.png b/manager/src/main/resources/static/images/Logo_Panorama_small.png
new file mode 100644
index 0000000..c89af0d
--- /dev/null
+++ b/manager/src/main/resources/static/images/Logo_Panorama_small.png
Binary files differ
diff --git a/manager/src/main/resources/static/images/app4mc-logo_small.png b/manager/src/main/resources/static/images/app4mc-logo_small.png
new file mode 100644
index 0000000..2b3992e
--- /dev/null
+++ b/manager/src/main/resources/static/images/app4mc-logo_small.png
Binary files differ
diff --git a/manager/src/main/resources/static/images/bg-header2.jpg b/manager/src/main/resources/static/images/bg-header2.jpg
new file mode 100644
index 0000000..3ef6259
--- /dev/null
+++ b/manager/src/main/resources/static/images/bg-header2.jpg
Binary files differ
diff --git a/manager/src/main/resources/static/index.html b/manager/src/main/resources/static/index.html
deleted file mode 100644
index feeebf7..0000000
--- a/manager/src/main/resources/static/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML>
-<html xmlns:th="https://www.thymeleaf.org">
-<head>
-<title>APP4MC Cloud Manager</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link href="webjars/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
-<script src="webjars/jquery/3.5.1/jquery.min.js"></script>
-<script type="module" src="webjars/popper.js/1.16.0/popper.min.js"></script>
-<script src="webjars/bootstrap/4.5.2/js/bootstrap.min.js"></script>
-</head>
-<body>
- <div class="container">
- <div class="row justify-content-center">
- <div class="col text-center" style="height:200px">
- <img class="img-fluid" style="height:100%" src="/images/Logo_Panorama.png"/>
- </div>
- </div>
- <div class="row align-items-end">
- <div class="col" style="height:100px">
- <img class="img-fluid float-right" style="height:100%; margin-right:10px;" src="/images/app4mc-logo.png"/>
- </div>
- <div class="col">
- <div class="content-heading"><h1>Cloud Manager</h1></div>
- </div>
- </div>
- <div class="row mt-3">
- <div class="col text-center text-danger"><h2><em>(under development)</em></h2></div>
- </div>
- <div class="row mt-3">
- <div class="col">
- <a class="btn btn-primary float-right" href="/workflow">Start Workflow</a>
- </div>
- <div class="col">
- <a class="btn btn-secondary" href="/admin">Administration</a>
- </div>
- </div>
- </div>
-</body>
-</html>
diff --git a/manager/src/main/resources/static/js/admin.js b/manager/src/main/resources/static/js/admin.js
new file mode 100644
index 0000000..0ece8dc
--- /dev/null
+++ b/manager/src/main/resources/static/js/admin.js
@@ -0,0 +1,11 @@
+function removeService(service) {
+ var token = $('#_csrf').attr('content');
+ var header = $('#_csrf_header').attr('content');
+ $.ajax({
+ type: 'POST',
+ url: '/admin/remove/' + service,
+ success: function(result) {
+ location.reload();
+ }
+ });
+} \ No newline at end of file
diff --git a/manager/src/main/resources/static/js/workflow.js b/manager/src/main/resources/static/js/workflow.js
new file mode 100644
index 0000000..45eee51
--- /dev/null
+++ b/manager/src/main/resources/static/js/workflow.js
@@ -0,0 +1,39 @@
+function clearWorkflow() {
+ $.ajax({
+ type : 'POST',
+ url : '/clear',
+ success : function(result) {
+ $('#selectedServicesBlock').load('/selectedServices');
+ $('#messagesBlock').load('/messages');
+ $('#errorsBlock').load('/errors');
+ $('#resultsBlock').load('/results');
+ }
+ });
+ }
+
+ function updateSelectedServices(service) {
+ $.ajax({
+ type : 'POST',
+ url : '/select/' + service,
+ success : function(result) {
+ $('#selectedServicesBlock').load('/selectedServices');
+ }
+ });
+ }
+
+ function removeSelectedServices(service) {
+ $.ajax({
+ type : 'POST',
+ url : '/remove/' + service,
+ success : function(result) {
+ $('#selectedServicesBlock').load('/selectedServices');
+ }
+ });
+ }
+
+ $(document).ready(function() {
+ $('#selectedServicesBlock').load('/selectedServices');
+ $('#messagesBlock').load('/messages');
+ $('#errorsBlock').load('/errors');
+ $('#resultsBlock').load('/results');
+ });
diff --git a/manager/src/main/resources/templates/about.html b/manager/src/main/resources/templates/about.html
new file mode 100644
index 0000000..c1e1dd2
--- /dev/null
+++ b/manager/src/main/resources/templates/about.html
@@ -0,0 +1,113 @@
+<html xmlns:th="https://www.thymeleaf.org">
+<head th:include="fragment :: fragment_head">
+</head>
+<body>
+ <div th:replace="fragment :: fragment_nav"></div>
+ <div class="banner"></div>
+ <div class="container col-md-7">
+ <div class="row" style="margin-top: 100px">
+ <div class="col text-center">
+ <div class="content-heading">
+ <h1>About Eclipse APP4MC</h1>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-18 padding-bottom-30" style="margin-top: 130px; margin-bottom:100px">
+ <p>
+ <br>
+ </p>
+
+ <p>
+ <strong>Eclipse APP4MC</strong> is a platform for engineering
+ embedded multi- and many-core software systems. The platform enables
+ the creation and management of complex tool chains including
+ simulation and validation. As an open platform, proven in the
+ automotive sector by Bosch and their partners, it supports
+ interoperability and extensibility and unifies data exchange in
+ cross-organizational projects.<span id="dots">...</span>
+ </p>
+
+ <div id="more" style="display: none;">
+ <p>
+ <img src="https://www.eclipse.org/app4mc/images/system-model.png"
+ class="img-responsive" style="width: 100%">
+ </p>
+
+ <p>
+ <strong><em>Multi- and Many-Core Development Process
+ Support</em></strong>
+ </p>
+
+ <p>The Amalthea platform allows users to distribute data and
+ tasks to the target hardware platforms, with the focus on
+ optimization of timing and scheduling. It addresses the need for
+ new tools and techniques to make effective use of the level of
+ parallelism in this environment.</p>
+
+ <p>
+ <strong><em>Common Data Exchange and Simulation</em></strong>
+ </p>
+
+ <p>The System Model contains the information required to
+ simulate, analyze and optimize performance. It contains extensive
+ information about software, hardware, timing behavior, and
+ constraints for the system under development.</p>
+
+ <p>
+ Based on the <a href="http://www.eclipse.org/modeling/emf/">Eclipse
+ Modeling Framework</a>, its capabilities not only include hardware and
+ software modelling but in addition, tools for visualization and
+ processing. The unified data model enables tool interoperability
+ and data exchange with other systems such as <a
+ href="http://www.autosar.org">Autosar</a> and simplifies the
+ exchange and storage of data.
+ </p>
+
+ <p>
+ <strong><em>Event Tracing</em></strong>
+ </p>
+
+ <p>The AMALTHEA definitions of task states and transitions
+ provides the basis for evaluating systems with tracing tools,
+ identifying problems and discovering improvements. These
+ definitions are already in use in both commercial and open source
+ tools.</p>
+
+ <p>
+ <strong><em>Customizable Workflow</em></strong>
+ </p>
+
+ <p>
+ The AMALTHEA workflow engine supports a continuous development
+ workflow, allowing data exchange along the entire toolchain.
+ Workflow elements can be customized and extended according to user
+ needs. As a basis, a standard workflow developed with <a
+ href="http://www.eclipse.org/Xtext/documentation/306_mwe2.html">Eclipse
+ Xtext(MWE2)</a> is included.
+ </p>
+
+ </div>
+ <button onclick="readMoreOrLess()" id="myBtn" class= "btn btn-secondary" style="border-radius: 40px">Read more</button>
+ </div>
+
+ </div>
+ <script>
+ function readMoreOrLess() {
+ var dots = document.getElementById("dots");
+ var moreText = document.getElementById("more");
+ var btnText = document.getElementById("myBtn");
+
+ if (dots.style.display === "none") {
+ dots.style.display = "inline";
+ btnText.innerHTML = "Read more";
+ moreText.style.display = "none";
+ } else {
+ dots.style.display = "none";
+ btnText.innerHTML = "Read less";
+ moreText.style.display = "inline";
+ }
+ }
+ </script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/manager/src/main/resources/templates/admin.html b/manager/src/main/resources/templates/admin.html
index 107c8a6..e2461b1 100644
--- a/manager/src/main/resources/templates/admin.html
+++ b/manager/src/main/resources/templates/admin.html
@@ -1,138 +1,122 @@
-<html xmlns:th="https://www.thymeleaf.org"
- xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
-<head>
-<title>APP4MC Cloud Manager - Administration</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link href="webjars/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
-<script src="webjars/jquery/3.5.1/jquery.min.js"></script>
-<script type="module" src="webjars/popper.js/1.16.0/popper.min.js"></script>
-<script src="webjars/bootstrap/4.5.2/js/bootstrap.min.js"></script>
-<script type="text/javascript">
-function removeService(service) {
- var token = $('#_csrf').attr('content');
- var header = $('#_csrf_header').attr('content');
- $.ajax({
- type: 'POST',
- url: '/admin/remove/' + service,
- success: function(result) {
- location.reload();
- }
- });
-}
-</script>
+<html xmlns:th="https://www.thymeleaf.org">
+<head th:include="fragment :: fragment_head">
</head>
<body>
- <div class="container">
- <div class="row justify-content-center">
- <div class="col text-center" style="height:200px">
- <img class="img-fluid" style="height:100%" src="/images/Logo_Panorama.png"/>
- </div>
- </div>
- <div class="row">
+ <div th:replace="fragment :: fragment_nav"></div>
+ <div class="banner"></div>
+ <div class="container col-md-7">
+ <div class="row" style="margin-top: 100px">
<div class="col text-center">
- <div class="content-heading"><h2>Configure available cloud services</h2></div>
+ <div class="content-heading">
+ <h1>Configure Available Services</h1>
+ </div>
</div>
</div>
- <form action="#" th:action="@{/admin/save}" th:object="${dto}" method="POST">
- <fieldset>
+ <form action="#" th:action="@{/admin/save}" th:object="${dto}"
+ method="POST">
+ <fieldset>
- <div class="row mt-3">
+ <div class="row" style="margin-top: 100px">
<div class="col text-center">
- <table class="table table-sm">
- <thead>
- <tr>
- <th>Service Name</th>
- <th>Service Base URL</th>
- <th>Service Description</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr th:each="service, stat : *{services}">
- <td><input th:field="*{services[__${stat.index}__].name}" class="form-control"/></td>
- <td><input th:field="*{services[__${stat.index}__].baseUrl}" class="form-control"/></td>
- <td><input th:field="*{services[__${stat.index}__].description}" class="form-control"/></td>
- <td>
- <a th:if="*{services[__${stat.index}__].name != null}"
- th:attr="onclick=|removeService('*{services[__${stat.index}__].name}')|"
- class="btn btn-secondary btn-sm">remove</a>
- </td>
- </tr>
- </tbody>
- </table>
+ <table class="table table-sm">
+ <thead>
+ <tr>
+ <th>Service Name</th>
+ <th>Service Base URL</th>
+ <th>Service Description</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr th:each="service, stat : *{services}">
+ <td><input th:field="*{services[__${stat.index}__].name}"
+ class="form-control fm-ctrl-left" /></td>
+ <td><input
+ th:field="*{services[__${stat.index}__].baseUrl}"
+ class="form-control fm-ctrl-center" /></td>
+ <td><input
+ th:field="*{services[__${stat.index}__].description}"
+ class="form-control fm-ctrl-right" /></td>
+ <td><a th:if="*{services[__${stat.index}__].name != null}"
+ th:attr="onclick=|removeService('*{services[__${stat.index}__].name}')|"
+ class="btn btn-secondary btn-sm btn-rmv"><i
+ class="fas fa-times"></i></a>
+ <button
+ th:unless="*{services[__${stat.index}__].name != null}"
+ type="submit" id="submitServicesButton" th:value="Save"
+ class="btn btn-primary btn-save">
+ <i class="fas fa-save"></i>
+ </button></td>
+ </tr>
+ </tbody>
+ </table>
</div>
</div>
<div class="row">
- <div class="col text-right" style="padding-right:2px">
- <input type="submit" id="submitServicesButton" th:value="Save" class="btn btn-primary"/>
- </div>
- <div class="col" style="padding-left:2px">
- <input type="reset" id="resetServicesButton" name="reset" th:value="Reset" class="btn btn-secondary"/>
+ <div class="col text-center" style="padding-left: 2px">
+ <input type="reset" id="resetServicesButton" name="reset"
+ th:value="Reset" class="btn btn-secondary" />
</div>
</div>
- </fieldset>
+ </fieldset>
</form>
<div class="row mb-3 mt-5">
<div class="col text-center">
- <div class="content-heading"><h2>Configure Proxy</h2></div>
+ <div class="content-heading">
+ <h2>Configure Proxy</h2>
+ </div>
</div>
</div>
<form action="/admin/saveProxy" method="POST">
- <fieldset>
+ <fieldset>
<div class="form-row">
<div class="form-group col">
- <label for="proxy_host">Host</label>
- <input type="text" id="proxy_host" name="proxy_host" th:value="${proxy_host}" class="form-control"/>
+ <label for="proxy_host">Host</label> <input type="text"
+ id="proxy_host" name="proxy_host" th:value="${proxy_host}"
+ class="form-control" />
</div>
</div>
<div class="form-row">
<div class="form-group col">
- <label for="proxy_port">Port</label>
- <input type="text" id="proxy_port" name="proxy_port" th:value="${proxy_port}" class="form-control"/>
+ <label for="proxy_port">Port</label> <input type="text"
+ id="proxy_port" name="proxy_port" th:value="${proxy_port}"
+ class="form-control" />
</div>
</div>
<div class="form-row">
<div class="form-group col">
- <label for="proxy_user">User</label>
- <input type="text" id="proxy_user" name="proxy_user" th:value="${proxy_user}" class="form-control"/>
+ <label for="proxy_user">User</label> <input type="text"
+ id="proxy_user" name="proxy_user" th:value="${proxy_user}"
+ class="form-control" />
</div>
</div>
<div class="form-row">
<div class="form-group col">
- <label for="proxy_pwd">Password</label>
- <input type="password" id="proxy_pwd" name="proxy_pwd" th:value="${proxy_pwd}" class="form-control"/>
+ <label for="proxy_pwd">Password</label> <input type="password"
+ id="proxy_pwd" name="proxy_pwd" th:value="${proxy_pwd}"
+ class="form-control" />
</div>
</div>
- <div class="row">
- <div class="col text-right" style="padding-right:2px">
- <input type="submit" id="submitProxyButton" th:value="Save" class="btn btn-primary mt-2"/>
+ <div class="row" style="margin-top: 20px; margin-bottom: 100px">
+ <div class="col text-right" style="padding-right: 2px">
+ <input type="reset" id="resetProxyButton" name="reset"
+ th:value="Reset"
+ class="btn btn-secondary mt-2 fm-ctrl-left half-btn" />
</div>
- <div class="col" style="padding-left:2px">
- <input type="reset" id="resetProxyButton" name="reset" th:value="Reset" class="btn btn-secondary mt-2"/>
+ <div class="col" style="padding-left: 2px">
+ <input type="submit" id="submitProxyButton" th:value="Save"
+ class="btn btn-primary mt-2 fm-ctrl-right half-btn" />
</div>
</div>
- </fieldset>
+ </fieldset>
</form>
-
- <div class="row">
- <div class="col">
- <form th:action="@{/logout}" method="post">
- <input class="btn btn-secondary mb-1" type="submit" value="Sign Out"/>
- </form>
- </div>
- </div>
- <div class="row">
- <div class="col">
- <a th:href="@{/}" class="btn btn-dark mb-5">Go back</a>
- </div>
- </div>
- </div>
-
+ </div>
+ <script type="text/javascript" src="js/admin.js"></script>
</body>
</html> \ No newline at end of file
diff --git a/manager/src/main/resources/templates/error.html b/manager/src/main/resources/templates/error.html
index c968adf..7484746 100644
--- a/manager/src/main/resources/templates/error.html
+++ b/manager/src/main/resources/templates/error.html
@@ -1,86 +1,60 @@
<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
-<head>
-<title>APP4MC Cloud Manager - Error</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link href="webjars/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
-<script src="webjars/jquery/3.5.1/jquery.min.js"></script>
-<script type="module" src="webjars/popper.js/1.16.0/popper.min.js"></script>
-<script src="webjars/bootstrap/4.5.2/js/bootstrap.min.js"></script>
+<head th:include="fragment :: fragment_head">
</head>
<body>
- <div class="container">
- <div class="row justify-content-center">
- <div class="col text-center" style="height:200px">
- <img class="img-fluid" style="height:100%" src="/images/Logo_Panorama.png"/>
- </div>
- </div>
- <div class="row align-items-end">
+ <div th:replace="fragment :: fragment_nav"></div>
+ <div class="banner"></div>
+ <div class="container" style="margin-bottom: 100px">
+ <div class="row align-items-end" style="margin-top: 230px">
<div class="col">
- <div class="content-heading"><h1>An error occured</h1></div>
+ <div class="content-heading">
+ <h1>An error occured</h1>
+ </div>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Date
- </div>
+ <div class="col-2">Date</div>
<div class="col">
<span th:text="${timestamp}"></span>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Path
- </div>
+ <div class="col-2">Path</div>
<div class="col">
<span th:text="${path}"></span>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Error
- </div>
+ <div class="col-2">Error</div>
<div class="col">
<span th:text="${error}"></span>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Status
- </div>
+ <div class="col-2">Status</div>
<div class="col">
<span th:text="${status}"></span>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Message
- </div>
+ <div class="col-2">Message</div>
<div class="col">
<span th:text="${message}"></span>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Exception
- </div>
+ <div class="col-2">Exception</div>
<div class="col">
<span th:text="${exception}"></span>
</div>
</div>
<div class="row mt-3">
- <div class="col-2">
- Trace
- </div>
+ <div class="col-2">Trace</div>
<div class="col">
<pre th:text="${trace}"></pre>
</div>
</div>
- <div class="row">
- <div class="col">
- <a th:href="@{/}" class="btn btn-dark mt-5 mb-5">Go back</a>
- </div>
- </div>
- </div>
+ </div>
</body>
</html>
diff --git a/manager/src/main/resources/templates/fragment.html b/manager/src/main/resources/templates/fragment.html
new file mode 100644
index 0000000..e15a340
--- /dev/null
+++ b/manager/src/main/resources/templates/fragment.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML>
+<html xmlns:th="https://www.thymeleaf.org"
+ xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
+<head th:fragment="fragment_head">
+<title>APP4MC Cloud Manager</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link href="webjars/bootstrap/4.5.2/css/bootstrap.min.css"
+ rel="stylesheet">
+<link href="css/styles.css" rel="stylesheet" />
+<script src="webjars/jquery/3.5.1/jquery.min.js"></script>
+<script type="module" src="webjars/popper.js/1.16.0/popper.min.js"></script>
+<script src="webjars/bootstrap/4.5.2/js/bootstrap.min.js"></script>
+<script src="webjars/font-awesome/5.13.0/js/all.min.js"></script>
+</head>
+<body>
+ <div class="container-fluid navcon" th:fragment="fragment_nav">
+ <nav class="navbar navbar-expand-sm bg-light">
+ <a class="nav-brand" th:href="@{/}"><img style="width: 100%"
+ src="/images/Logo_Panorama_small.png" /></a>
+ <ul class="navbar-nav col-md-10 justify-content-end">
+ <li class="nav-item"><a class="nav-link" th:href="@{/}">Home</a></li>
+ <li class="nav-item"><a class="nav-link" th:href="@{/admin}">Admin</a></li>
+ <li class="nav-item" sec:authorize="isAuthenticated()"><a class="nav-link" th:href="@{/logout}">Logout</a></li>
+ <li class="nav-item" sec:authorize="isAnonymous()"><a class="nav-link" th:href="@{/login}">Login</a></li>
+ <li class="nav-item"><a class="nav-link" th:href="@{/about}">About</a></li>
+ </ul>
+ </nav>
+ </div>
+</body>
+</html>
diff --git a/manager/src/main/resources/templates/index.html b/manager/src/main/resources/templates/index.html
new file mode 100644
index 0000000..7750e6e
--- /dev/null
+++ b/manager/src/main/resources/templates/index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<html xmlns:th="https://www.thymeleaf.org"
+ xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
+<head th:replace="fragment :: fragment_head">
+</head>
+<body>
+ <div class="container-fluid hero">
+ <div th:replace="fragment :: fragment_nav"></div>
+ <div class="container cta">
+ <div class="row justify-content-center"
+ style="height: 100px; margin-top: 150px">
+ <img class="img-fluid" style="height: 100%; margin-right: 10px;"
+ src="/images/app4mc-logo.png" />
+ </div>
+ <div class="row justify-content-center">
+ <div class="content-heading">
+ <h1>Cloud Manager</h1>
+ </div>
+ </div>
+ <div class="row" style="margin-top: 30px">
+ <div class="col text-center">
+ <a class="btn btn-primary left-btn" href="/workflow">Start
+ Workflow</a>
+ </div>
+ </div>
+ </div>
+ </div>
+</body>
+</html>
diff --git a/manager/src/main/resources/templates/login.html b/manager/src/main/resources/templates/login.html
index 0ac12f1..0a6f60b 100644
--- a/manager/src/main/resources/templates/login.html
+++ b/manager/src/main/resources/templates/login.html
@@ -1,65 +1,58 @@
<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
- xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
-<head>
-<title>APP4MC Cloud Manager - Login</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link href="webjars/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
-<script src="webjars/jquery/3.5.1/jquery.min.js"></script>
-<script type="module" src="webjars/popper.js/1.16.0/popper.min.js"></script>
-<script src="webjars/bootstrap/4.5.2/js/bootstrap.min.js"></script>
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:th="https://www.thymeleaf.org"
+ xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
+<head th:include="fragment :: fragment_head">
</head>
<body>
- <div class="container">
- <div class="row justify-content-center">
- <div class="col text-center" style="height:200px">
- <img class="img-fluid" style="height:100%" src="/images/Logo_Panorama.png"/>
- </div>
- </div>
- <div class="row">
+ <div th:replace="fragment :: fragment_nav"></div>
+ <div class="banner"></div>
+ <div class="container col-md-7">
+ <div class="row" style="margin-top: 100px">
<div class="col text-center">
- <div class="content-heading"><h1>Login</h1></div>
+ <div class="content-heading">
+ <h1>Login</h1>
+ </div>
</div>
</div>
- <div class="row mt-3 mb-3">
+ <div class="row" style="margin: 130px 0px 0px 0px;">
<div th:if="${param.error}">
- <div class="content-heading"><h2>Invalid username and password.</h2></div>
+ <div class="content-heading">
+ <h3>Invalid username and password.</h3>
+ </div>
</div>
</div>
<div class="row mt-3 mb-3">
- <div th:if="${param.logout}">
- <div class="content-heading"><h2>You have been logged out.</h2></div>
- </div>
+ <div th:if="${param.logout}">
+ <div class="content-heading">
+ <h3>You have been logged out.</h3>
+ </div>
+ </div>
</div>
-
- <form th:action="@{/login}" method="post">
- <fieldset>
+
+ <form th:action="@{/login}" method="post">
+ <fieldset>
<div class="form-row">
<div class="form-group col">
- <label for="username">User Name</label>
- <input type="text" id="username" name="username"class="form-control"/>
+ <label for="username">User Name</label> <input type="text"
+ id="username" name="username" class="form-control" />
</div>
</div>
<div class="form-row">
<div class="form-group col">
- <label for="password">Password</label>
- <input type="password" id="password" name="password" class="form-control"/>
+ <label for="password">Password</label> <input type="password"
+ id="password" name="password" class="form-control" />
</div>
</div>
<div class="form-row">
<div class="col text-center">
- <input type="submit" value="Sign In" class="btn btn-primary mt-2"/>
+ <input type="submit" value="Sign In"
+ class="btn btn-primary mt-2 left-btn" />
</div>
</div>
</fieldset>
- </form>
-
- <div class="row">
- <div class="col">
- <a th:href="@{/}" class="btn btn-dark">Go back</a>
- </div>
- </div>
- </div>
+ </form>
+ </div>
</body>
</html> \ No newline at end of file
diff --git a/manager/src/main/resources/templates/selectedServices.html b/manager/src/main/resources/templates/selectedServices.html
index 66a5b11..ca71761 100644
--- a/manager/src/main/resources/templates/selectedServices.html
+++ b/manager/src/main/resources/templates/selectedServices.html
@@ -8,8 +8,8 @@
<div th:fragment="servicesList" id="selectedServices" th:object="${workflowStatus}">
<ul class="list-group">
<li th:each="selected : ${workflowStatus.selectedServices}" class="list-group-item d-flex justify-content-between">
- <p class="p-0 m-0 flex-grow-1" th:text="${selected}">Service</p>
- <a th:attr="onclick=|removeSelectedServices('${selected}')|" class="btn btn-secondary btn-sm">remove</a>
+ <p class="p-0 flex-grow-1 plist" th:text="${selected}">Service</p>
+ <a th:attr="onclick=|removeSelectedServices('${selected}')|" class="btn btn-primary btn-sm btn-rmv"><i class="fas fa-times"></i></a>
</li>
</ul>
<select name="services" id="services" onchange="updateSelectedServices(this.value)" class="form-control">
diff --git a/manager/src/main/resources/templates/status.html b/manager/src/main/resources/templates/status.html
index 537c584..0626bf5 100644
--- a/manager/src/main/resources/templates/status.html
+++ b/manager/src/main/resources/templates/status.html
@@ -26,8 +26,8 @@
<ul class="list-group">
<li th:each="result : ${workflowStatus.results}" class="list-group-item d-flex justify-content-between">
<p class="p-0 m-0 flex-grow-1" th:text="${result.key}">Result</p>
- <a class="btn btn-primary btn-sm mr-1" th:href="${result.value}">View</a>
- <a class="btn btn-secondary btn-sm" th:href="${result.value + '?download=true'}">Download</a>
+ <a class="btn btn-primary btn-sm mr-1 btn-save" th:href="${result.value}"><i class="fas fa-eye"></i></a>
+ <a class="btn btn-secondary btn-sm btn-rmv" th:href="${result.value + '?download=true'}"><i class="fas fa-download"></i></a>
</li>
</ul>
<a th:href="@{/{uuid}/delete(uuid=${workflowStatus.uuid})}" class="btn btn-danger mt-4 mb-4">Delete</a>
diff --git a/manager/src/main/resources/templates/workflow.html b/manager/src/main/resources/templates/workflow.html
index de9203f..77ca235 100644
--- a/manager/src/main/resources/templates/workflow.html
+++ b/manager/src/main/resources/templates/workflow.html
@@ -1,115 +1,60 @@
<html xmlns:th="https://www.thymeleaf.org">
-<head>
-<title>APP4MC Cloud Manager - Workflow</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<link href="webjars/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
-<script src="webjars/jquery/3.5.1/jquery.min.js"></script>
-<script type="module" src="webjars/popper.js/1.16.0/popper.min.js"></script>
-<script src="webjars/bootstrap/4.5.2/js/bootstrap.min.js"></script>
-<script type="text/javascript">
-function clearWorkflow() {
- $.ajax({
- type: 'POST',
- url: '/clear',
- success: function(result) {
- $('#selectedServicesBlock').load('/selectedServices');
- $('#messagesBlock').load('/messages');
- $('#errorsBlock').load('/errors');
- $('#resultsBlock').load('/results');
- }
- });
-}
-
-function updateSelectedServices(service) {
- $.ajax({
- type: 'POST',
- url: '/select/' + service,
- success: function(result) {
- $('#selectedServicesBlock').load('/selectedServices');
- }
- });
-}
-
-function removeSelectedServices(service) {
- $.ajax({
- type: 'POST',
- url: '/remove/' + service,
- success: function(result) {
- $('#selectedServicesBlock').load('/selectedServices');
- }
- });
-}
-
-$(document).ready(function(){
- $('#selectedServicesBlock').load('/selectedServices');
- $('#messagesBlock').load('/messages');
- $('#errorsBlock').load('/errors');
- $('#resultsBlock').load('/results');
-});
-</script>
+<head th:include="fragment :: fragment_head">
</head>
<body>
- <div class="container">
- <div class="row justify-content-center">
- <div class="col text-center" style="height:200px">
- <img class="img-fluid" style="height:100%" src="/images/Logo_Panorama.png"/>
- </div>
- </div>
- <div class="row mb-4">
+ <div th:replace="fragment :: fragment_nav"></div>
+ <div class="banner"></div>
+ <div class="container col-md-7">
+ <div class="row mb-4" style="margin-top: 100px">
<div class="col text-center">
- <div class="content-heading"><h1>Cloud Service Workflow</h1></div>
+ <div class="content-heading">
+ <h1>Cloud Service Workflow</h1>
+ </div>
</div>
</div>
- <form method="POST" enctype="multipart/form-data" action="/workflow" th:object="${workflowStatus}">
- <div class="form-row mb-3">
+ <form method="POST" enctype="multipart/form-data" action="/workflow"
+ th:object="${workflowStatus}">
+ <div class="form-row mb-3" style="margin-top: 130px">
<div class="custom-file">
- <input type="file" class="custom-file-input" id="customFile" name="file">
- <label class="custom-file-label" for="customFile">Select input file to process</label>
+ <input type="file" class="custom-file-input" id="customFile"
+ name="file"> <label class="custom-file-label"
+ for="customFile">Select input file to process</label>
<script>
- $('#customFile').on('change',function(){
- //get the file name
- var fileName = $(this).val().split('\\').pop();
- //replace the "Choose a file" label
- $(this).next('.custom-file-label').html(fileName);
- clearWorkflow();
- })
- </script>
+ $('#customFile').on('change', function() {
+ //get the file name
+ var fileName = $(this).val().split('\\').pop();
+ //replace the "Choose a file" label
+ $(this).next('.custom-file-label').html(fileName);
+ clearWorkflow();
+ })
+ </script>
</div>
</div>
<div class="form-row">
- <div class="form-group col">
- <label >Select service(s) to process</label>
- <div id="selectedServicesBlock">
-
- </div>
+ <div class="form-group col" id="wf-fm-group">
+ <label>Select service(s) to process</label>
+ <div id="selectedServicesBlock"></div>
</div>
</div>
- <div class="form-row">
+ <div class="form-row" style="margin-top: 20px; margin-bottom: 100px">
<div class="col text-center">
- <input type="submit" value="Start workflow" class="btn btn-primary mt-2" onClick="this.form.submit(); this.disabled=true; this.value='Processing…'; "/>
+ <input type="submit" value="Start workflow"
+ class="btn btn-primary mt-2 left-btn"
+ onClick="this.form.submit(); this.disabled=true; this.value='Processing…'; " />
</div>
</div>
</form>
- <div id="messagesBlock">
+ <div id="messagesBlock"></div>
- </div>
+ <div id="errorsBlock"></div>
- <div id="errorsBlock">
+ <div id="resultsBlock"></div>
</div>
+ <script type="text/javascript" src="js/workflow.js"></script>
+</body>
- <div id="resultsBlock">
-
- </div>
-
- <div class="row">
- <div class="col">
- <a th:href="@{/}" class="btn btn-dark mb-5">Go back</a>
- </div>
- </div>
- </div>
-</body>
</html> \ No newline at end of file

Back to the top