ENTAXY-480 release version 1.8.3

This commit is contained in:
2023-08-03 04:44:09 +03:00
parent 603889d627
commit 5844a2e5cf
2546 changed files with 11242 additions and 207556 deletions

View File

@ -3,7 +3,7 @@
<parent>
<groupId>ru.entaxy.esb.ui</groupId>
<artifactId>entaxy-hawtio</artifactId>
<version>1.8.2.2</version>
<version>1.8.3</version>
</parent>
<groupId>ru.entaxy.esb.ui.hawtio</groupId>
<artifactId>artemis-plugin-entaxy</artifactId>

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
artemis-plugin-entaxy
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
# ~~~~~~licensing~~~~~~
# artemis-plugin-entaxy
# ==========
# Copyright (C) 2020 - 2021 EmDev LLC
# Copyright (C) 2020 - 2023 EmDev LLC
# ==========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.

View File

@ -20,7 +20,7 @@
~~~~~~licensing~~~~~~
artemis-plugin-entaxy
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
artemis-plugin-entaxy
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
artemis-plugin-entaxy
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
artemis-plugin-entaxy
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* artemis-plugin-entaxy
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
<parent>
<groupId>ru.entaxy.esb.ui</groupId>
<artifactId>entaxy-hawtio</artifactId>
<version>1.8.2.2</version>
<version>1.8.3</version>
</parent>
<groupId>ru.entaxy.esb.ui.hawtio</groupId>
<artifactId>entaxy-branding-plugin</artifactId>

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-branding-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-branding-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-branding-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-branding-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -18,101 +18,60 @@
* ~~~~~~/licensing~~~~~~
*/
/* jmx tree icon */
/*.ru-entaxy-esb span.node-icon::before,*/
.node-entaxytree span.node-icon::before /* BUT this way icons aren't present in JMX */
/*.ru-entaxy-esb-0-0-0-0-folder span.node-icon::before,
.ru-entaxy-esb-platform-folder span.node-icon::before,
.ru-entaxy-esb-adapters-folder span.node-icon::before,
.ru-entaxy-esb-artemis-adapter-1-folder span.node-icon::before,
.ru-entaxy-esb-artemis-amqp-adapter-1-folder span.node-icon::before,
.ru-entaxy-esb-file-adapter-1-folder span.node-icon::before,
.ru-entaxy-esb-h2-adapter-1-4-199-folder span.node-icon::before,
.ru-entaxy-esb-postgresql-adapter-42-2-9-folder span.node-icon::before,
.ru-entaxy-esb-rabbitmq-amqp-adapter-1-folder span.node-icon::before*/
{
display: inline-block;
background: url(../img/entaxy.svg);
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
background-repeat: no-repeat;
content: "" !important;
vertical-align: middle;
/* jmx tree icons */
.entaxy-node-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-node-icon.png");
}
/*.ru-entaxy-esb-adapters-folder span.node-icon::before*/
/*.ru-entaxy-esb-artemis-adapter-1-folder span.node-icon::before
{
display: inline-block;
background: url(../img/artemis.png);
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
background-repeat: no-repeat;
content: "" !important;
vertical-align: middle;
.entaxy-connectors-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-connectors-icon.png");
}
.ru-entaxy-esb-artemis-amqp-adapter-1-folder span.node-icon::before
{
display: inline-block;
background: url(../img/activemq.png);
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
background-repeat: no-repeat;
content: "" !important;
vertical-align: middle;
.entaxy-connections-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-connections-icon.png");
}
.ru-entaxy-esb-file-adapter-1-folder span.node-icon::before
{
display: inline-block;
background: url(../img/jesus.jpg);
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
background-repeat: no-repeat;
content: "" !important;
vertical-align: middle;
.entaxy-adapter-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-adapter-icon.png");
}
.ru-entaxy-esb-h2-adapter-1-4-199-folder span.node-icon::before
{
display: inline-block;
background: url(../img/h2.png);
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
background-repeat: no-repeat;
content: "" !important;
vertical-align: middle;
.entaxy-routes-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-routes-icon.png");
}
.ru-entaxy-esb-postgresql-adapter-42-2-9-folder span.node-icon::before
{
display: inline-block;
background: url(../img/postgresql.png);
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
background-repeat: no-repeat;
content: "" !important;
vertical-align: middle;
.entaxy-profiles-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-profiles-icon.png");
}
.ru-entaxy-esb-rabbitmq-amqp-adapter-1-folder span.node-icon::before
{
display: inline-block;
background: url(../img/rabbitmq.svg);
min-width: 16px;
.entaxy-factories-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-factories-icon.png");
}
.entaxy-platform-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-platform-icon.png");
}
.entaxy-runtime-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-runtime-icon.png");
}
.entaxy-resource-icon span.node-icon::before {
background: url("../img/icons/cranberry-red/entaxy-resource-icon.png");
}
.entaxy-node-icon span.node-icon::before,
.entaxy-connectors-icon span.node-icon::before,
.entaxy-connections-icon span.node-icon::before,
.entaxy-adapter-icon span.node-icon::before,
.entaxy-routes-icon span.node-icon::before,
.entaxy-profiles-icon span.node-icon::before,
.entaxy-factories-icon span.node-icon::before,
.entaxy-platform-icon span.node-icon::before,
.entaxy-runtime-icon span.node-icon::before,
.entaxy-resource-icon span.node-icon::before {
display: inline-block;
min-width: 16px;
min-height: 16px;
background-size: 16px 16px;
background-position: -1px center;
@ -120,11 +79,9 @@
content: "" !important;
vertical-align: middle;
}
*/
/* fonts */
/* You can customise the styles of your application here. */
@font-face {
font-family: 'PatternFlyIcons-webfont';
@ -315,9 +272,10 @@ tbody>tr:hover {
color: #fff!important;
}
/*.list-group.list-view-pf.list-view-pf-view {
margin-top: -30px;
}*/
.toast-pf-content {
max-height: calc(100vh - 150px);
overflow-y: auto;
}
.entaxy-result-table {
width: 300px;
@ -350,24 +308,39 @@ table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc {
/* CSSs for entaxy modal window are below */
.modal-xl {
width: 70%;
min-width: 900px;
}
.modal-body-header {
height: 70px;
max-height: 70px;
margin-bottom: 15px;
padding-top: 5px;
padding-left: 15px;
padding-right: 15px;
border-bottom: 1px #f5f5f5 solid;
background-color: whitesmoke;
border-bottom: 1px #bbbbbb solid;
border-top: 1px #bbbbbb solid;
}
.entaxy-modal-container .modal-body {
height: calc(100vh - 300px);
max-height: calc(100vh - 300px);
height: calc(100vh - 270px);
max-height: calc(100vh - 270px);
padding: 0px;
}
.entaxy-modal-container .modal-body-without-header {
height: calc(100vh - 230px);
max-height: calc(100vh - 230px);
padding: 0px;
margin-top:15px;
}
.entaxy-modal-container .modal-footer {
background-color: whitesmoke;
border-top: 1px #bbbbbb solid;
margin-top: 0px;
}
.modal-list-container {
display: flex;
flex-direction: column;
@ -379,12 +352,38 @@ table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc {
padding-right: 20px;
}
.group-list .modal-list-toolbar-container .toolbar-pf {
background-color: #cfcdcd;
border-bottom: 1px solid #ffffff;
padding-top: 15px;
}
.modal-list-toolbar-container .toolbar-pf .form-group {
border-right: none;
}
.group-list .modal-list-toolbar-container .toolbar-pf-results {
border-top: none;
}
.modal-list-list-container {
min-height:200px;
overflow-y:auto;
flex:initial;
}
.modal-list-list-container .list-view-pf .list-group-item {
border-color: #ededed;
}
.modal-list-list-container .list-view-pf-view {
margin-top: 0;
}
.modal-list-list-container .list-group {
margin-bottom: 0;
}
/* This changes the size of the list-view item */
/*.list-group-item*/
.modal-list-list-container .list-view-pf-main-info {
@ -393,20 +392,62 @@ table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc {
padding-bottom: 10px;
}
.modal-group-fields-container {
.group-list .modal-list-list-container .blank-slate-pf {
background-color: #cfcdcd;
border: none;
}
.modal-group-fields-container,
.modal-list-with-description-container {
height: 100%;
max-height: 100%;
display: flex;
flex-direction: row;
}
.modal-list-with-description-list-container {
width: 50%;
border-right: #d1d1d1 solid 1px;
}
.modal-description-container {
width: 50%;
}
.modal-description-title {
height: 47px;
padding: 15px;
border-bottom: #d1d1d1 solid 1px;
}
.modal-description-body {
padding: 15px;
}
.modal-groups-list-container {
width: 335px;
padding-bottom: 15px;
background-color: #cfcdcd;
}
.modal-groups-list-container .list-group-item {
background-color: #cfcdcd;
border-width: 0px;
}
.modal-groups-list-container .list-group-item:first-child {
border-top: 0px;
}
.modal-groups-list-container .list-group-item.active {
background-color: #ffffff;
}
.modal-group-fields-form-container {
overflow-y: auto;
flex: auto;
padding-top: 15px;
padding-bottom: 15px;
}
.modal-group-fields-form-container .form-group {
@ -444,6 +485,118 @@ table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc {
-o-transform: translateY(-50%) !important;*/
}
/* Styles for labels and popovers in modal */
.label-col {
text-align: right;
}
.label-col .control-label {
display: unset;
}
.form-group .popover {
width: max-content;
max-width: 200%;
}
.label-description-popover {
padding: 2px 0px 2px 2px;
}
.label-description-popover:focus {
outline: none;
}
.label-description-popover:active:focus {
outline: none;
}
/*These are for custom forms*/
.entaxy-xml-form {
width: 100%;
height: 26px;
}
.custom-select .caret {
float: right;
margin-top: 6px;
}
.btn-select {
font-size: 13.5px;
border-radius: 0;
text-align: left;
vertical-align: middle;
padding: 0px 6px;
}
.btn-select:focus,
.btn-select:active:focus {
outline: none;
}
.custom-select .dropdown-menu {
font-size: 13.5px;
max-height: 100px;
overflow-y: auto;
left: auto;
width: calc(100% - 40px);
}
.custom-select .dropdown-menu li {
line-height:26px !important;
}
.dropdown-option-new {
background-color: whitesmoke;
}
.dropdown-option-new span {
margin-right: 5px;
}
select.form-control {
font-size: 13.5px;
}
/*Margin for health checks*/
.health-checks-status {
margin-right: 10px;
}
/* Fixes artemis preferences form margin */
.artemis-preferences-form {
margin-top: 20px;
}
.route-source-header-container {
display: flex;
}
.route-source-header-container h2 {
display: inline-block;
}
.route-source-error-message {
font-size: 13.5px;
color: #c00;
padding-left: 10px;
margin-top: 22.5px;
}
.xml-route-source-container {
padding-bottom: 15px;
}
.properties-container {
height: calc(100vh - 320px);
border-top: 1px #bbb solid;
border-bottom: 1px #bbb solid;
margin-bottom: 15px;
}
/*This is the original css from HawtIO 1,leaving as is as somemay be used*/
* {
font-family: "Open Sans";
@ -596,6 +749,57 @@ ul.dynatree-container li {
border: 1px solid #d4d4d4;
}
.xml-editor-container {
margin-left: 20px;
margin-right: 20px;
}
.xml-editor-container .editor-autoresize .CodeMirror-scroll {
height: calc(100vh - 240px);
}
.xml-route-source-container .editor-autoresize .CodeMirror-scroll {
height: calc(100vh - 320px);
}
.CodeMirror-hints {
position: absolute;
z-index: 2000;
overflow: hidden;
list-style: none;
margin: 0;
padding: 2px;
-webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
box-shadow: 2px 3px 5px rgba(0,0,0,.2);
border-radius: 3px;
border: 1px solid silver;
background: white;
font-size: 90%;
font-family: monospace;
max-height: 20em;
overflow-y: auto;
box-sizing: border-box;
}
.CodeMirror-hint {
margin: 0;
padding: 0 4px;
border-radius: 2px;
white-space: pre;
color: black;
cursor: pointer;
}
li.CodeMirror-hint-active {
background: #08f;
color: white;
}
i.expandable-indicator {
color: #666;
}

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-branding-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-branding-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-branding-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
<parent>
<groupId>ru.entaxy.esb.ui</groupId>
<artifactId>entaxy-hawtio</artifactId>
<version>1.8.2.2</version>
<version>1.8.3</version>
</parent>
<groupId>ru.entaxy.esb.ui.hawtio</groupId>
<artifactId>entaxy-h2-plugin</artifactId>

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-h2-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
<parent>
<groupId>ru.entaxy.esb.ui</groupId>
<artifactId>entaxy-hawtio</artifactId>
<version>1.8.2.2</version>
<version>1.8.3</version>
</parent>
<groupId>ru.entaxy.esb.ui.hawtio</groupId>
<artifactId>entaxy-management-plugin</artifactId>

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,7 +2,7 @@
~~~~~~licensing~~~~~~
entaxy-management-plugin
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -26,48 +26,38 @@ var Entaxy;
},
template:
`
<div class="entaxy-modal-container">
<div class="modal-header">
<button type="button" class="close" aria-label="Close" ng-click="$ctrl.cancel()">
<span class="pficon pficon-close" aria-hidden="true"></span>
</button>
<h4 class="modal-title">Add Connector</h4>
<h4 class="modal-title">Add Connector to {{$ctrl.profileName}}</h4>
</div>
<div class="modal-list-container" ng-show="$ctrl.step1">
<div class="modal-body" style="height:203px; max-height:203px">
<div class="col-md-auto">
<h2>Choose connector template</h2>
</div>
<hr class="col-md-auto">
<div class="col-md-12">
<pf-toolbar class="entaxy-template-toolbar" config="$ctrl.toolbarConfig"></pf-toolbar>
</div>
<div ng-if="$ctrl.step1">
<div class="modal-body-header">
<h2>Choose connector template</h2>
</div>
<div class="modal-body" style="height:300px; max-height:300px">
<pf-list-view class="entaxy-template-list" items="$ctrl.viewedTemplates" config="$ctrl.listConfig">
<div class="list-view-pf-description">
<div class="list-group-item-heading">
{{item.name}}
</div>
</div>
</pf-list-view>
<div class="modal-body" style="height:433px; max-height:433px">
<entaxy-modal-list items="$ctrl.viewedTemplates" selected="$ctrl.selectedItem"
change-selection="$ctrl.changeSelection"></entaxy-modal-list>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="$ctrl.next()"
ng-disabled="$ctrl.listConfig.selectedItems.length === 0">Next</button>
ng-disabled="!$ctrl.selectedItem">Next</button>
</div>
</div>
<form name="connectorForm" class="form-horizontal" ng-show="$ctrl.step2" ng-submit="$ctrl.saveConnector($ctrl.formFields)">
<div class="modal-body" style="height:503px; max-height:503px">
<div class="col-md-auto">
<form name="connectorForm" class="form-horizontal" ng-if="$ctrl.step2" ng-submit="$ctrl.saveConnector($ctrl.formFields)">
<div class="modal-body" style="height:503px; max-height:503px;">
<div class="modal-body-header">
<h2>Fill in connector template parameters</h2>
</div>
<hr class="col-md-auto">
<div class="form-group" ng-repeat="formField in $ctrl.formFields">
<label class="col-sm-3 control-label" ng-class="{'required-pf': formField.isRequired}" for="{{formField.label}}">{{formField.label}}</label>
<div class="form-group" ng-class="{'has-error': $ctrl.errors[formField.name]}"
ng-repeat="formField in $ctrl.formFields" style="margin:15px;">
<label class="col-sm-3 control-label" ng-class="{'required-pf': formField.isRequired}" for="{{formField.name}}">{{formField.label}}</label>
<div class="col-sm-8">
<input type="{{formField.type}}" id="{{formField.label}}" ng-class="{'form-control': formField.type !== 'checkbox'}"
<input type="{{formField.type}}" id="{{formField.name}}" ng-class="{'form-control': formField.type !== 'checkbox'}"
ng-model="formField.value" ng-readonly="formField.isReadOnly">
<!--<span class="help-block">{{formField.helpText}}</span>-->
<span class="help-block" ng-show="$ctrl.errors[formField.name]">{{$ctrl.errors[formField.name]}}</span>
</div>
</div>
</div>
@ -76,6 +66,7 @@ var Entaxy;
<button type="submit" class="btn btn-primary">Add</button>
</div>
</form>
</div>
`,
controller: EntaxyAddConnectorModalController
})
@ -86,53 +77,20 @@ var Entaxy;
var ctrl = this;
// ctrl.errors = null;
Entaxy.log.info('MODAL???');
ctrl.$onInit = function() {
Entaxy.log.info('MODAL!!!');
ctrl.connector = ctrl.resolve.connector ? ctrl.resolve.connector : null; // FIXME
ctrl.step1 = true;
ctrl.step2 = false;
// ctrl.formFields = ctrl.resolve.args.map(arg => {
// let formField = {
// label: arg.name,
// type: Entaxy.convertToHtmlInputType(arg.type)
// };
// return formField;
// });
// Entaxy.log.info('FORM FIELDS ' + JSON.stringify(ctrl.formFields));
let templates = Entaxy.getConnectorTemplates();
ctrl.templates = templates.map(template => { return { name: template }});
// Entaxy.log.info('TEMPLATES ' + JSON.stringify(templates));
// Entaxy.log.info('TEMPLATES ' + JSON.stringify(ctrl.templates));
ctrl.viewedTemplates = ctrl.templates;
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedTemplates.length;
}
ctrl.toolbarConfig = {
filterConfig: {
fields: [
{
id: 'name',
title: 'Name',
placeholder: 'Filter by Name...',
filterType: 'text'
}
],
resultCount: ctrl.viewedTemplates ? ctrl.viewedTemplates.length : 0,
appliedFilters: [],
onFilterChange: filterChange
},
actionsConfig: {},
// isTableView: true
};
let templates = Entaxy.getConnectorTemplates();
ctrl.templates = templates.map(template => { return { name: template, displayName: template }});
ctrl.viewedTemplates = ctrl.templates;
ctrl.profileName = ctrl.resolve.profileName;
}
ctrl.listConfig = {
selectionMatchProp: 'name',
selectItems: true,
// selectedItems: [],
showSelectBox: false,
dlbClick: true,
onDblClick: function(item, event){
@ -141,98 +99,71 @@ var Entaxy;
}
}
function filterChange(filters) {
applyFilters(filters);
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedTemplates.length;
};
function applyFilters(filters) {
ctrl.viewedTemplates = [];
if (filters && filters.length > 0) {
ctrl.templates.forEach(function (template) {
if (matchesFilters(template, filters)) {
ctrl.viewedTemplates.push(template);
}
});
} else {
ctrl.viewedTemplates = ctrl.templates;
ctrl.changeSelection = function(item, isDblClicked) {
ctrl.selectedItem = item;
if (isDblClicked) {
ctrl.next();
}
};
function matchesFilters(item, filters) {
var matches = true;
filters.forEach(function(filter) {
if (!matchesFilter(item, filter)) {
matches = false;
return false;
}
});
return matches;
};
function matchesFilter(item, filter) {
var match = true;
if (filter.id === 'name') {
match = item.name.match(filter.value) !== null;
}
return match;
};
}
ctrl.next = function() {
ctrl.step1 = false;
ctrl.step2 = true;
Entaxy.log.info('Selected item ' + JSON.stringify(ctrl.listConfig.selectedItems));
if (!ctrl.formFields || ctrl.listConfig.selectedItems[0].name !== ctrl.formFields[0].value) {
ctrl.formFields = Entaxy.getConnectorTemplateParams(ctrl.listConfig.selectedItems[0].name); //ctrl.listConfig.selectedItems[0]
if (!ctrl.formFields || ctrl.selectedItem.name !== ctrl.formFields[0].value) {
ctrl.formFields = Entaxy.getConnectorTemplateParams(ctrl.selectedItem.name);
ctrl.formFields.unshift({
label: 'templateName',
displayName: 'Template Name',
type: 'java.lang.String',
helpText: null,
value: ctrl.listConfig.selectedItems[0].name,
value: ctrl.selectedItem.name,
isReadOnly: true
});
ctrl.formFields.forEach(formField => formField.type = Entaxy.convertToHtmlInputType(formField.type));
ctrl.formFields.forEach(formField => {
formField.name = formField.label;
if (formField.displayName) {
formField.label = formField.displayName;
}
formField.type = Entaxy.convertToHtmlInputType(formField.type);
});
}
}
ctrl.back = function() {
ctrl.step1 = true;
ctrl.step2 = false;
// ctrl.formFields = null;
}
ctrl.cancel = function() {
Entaxy.log.info('QUIT MODAL');
ctrl.modalInstance.dismiss();
}
//
ctrl.saveConnector = function(connector) { // FIXME
Entaxy.log.info('SAVE CONNECTOR: ' + JSON.stringify(connector));
ctrl.errors = validateFields(connector); // FIXME
Entaxy.log.info('ERRORS ' + JSON.stringify(ctrl.errors));
ctrl.saveConnector = function(fields) {
ctrl.errors = validateFields(fields);
if (Object.keys(ctrl.errors).length === 0) {
// TODO
let connectorArgs = {
connectorTemplateName: ctrl.formFields.shift().value,
connectorFields: ctrl.formFields.map(formField => { return { label: formField.label, value: formField.value }; })
connectorFields: ctrl.formFields.map(formField => { return { label: formField.name, value: formField.value }; })
};
ctrl.modalInstance.close(connectorArgs);
}
}
function validateFields(connector) {
Entaxy.log.info('VALIDATION START');
function validateFields(fields) {
let errors = {};
Entaxy.log.info('VALIDATION END');
_.forEach(fields, (field) => {
if (field.isRequired && (!field.value || (field.type !== 'checkbox' ? field.value.toString().trim().length === 0 : false))) {
errors[field.name] = 'Please fill out this field';
}
});
return errors;
}
}
EntaxyAddConnectorModalController.$inject = ['workspace'];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -33,4 +33,4 @@ var Entaxy;
`
})
.name;
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -19,166 +19,51 @@
*/
var Entaxy;
(function (Entaxy) {
Entaxy._module.component('entaxyConnectors', {
Entaxy._module
.component('entaxyConnectors', {
bindings: {
pageTitle: '@'
},
template:
`
<h2>
Connectors
{{$ctrl.pageTitle}}
</h2>
<pf-toolbar class="entaxy-connector-toolbar" config="$ctrl.toolbarConfig"></pf-toolbar>
<pf-table-view config="$ctrl.tableConfig"
columns="$ctrl.tableColumns"
action-buttons="$ctrl.tableActionButtons"
page-config="$ctrl.pageConfig"
items="$ctrl.viewedConnectors">
</pf-table-view>
<entaxy-table item-name="Connector" folder-name="Коннекторы"
status-name="BundleState" object-name="systemName"
extra-primary-actions-config="$ctrl.config"
is-parent-dependent="true"></entaxy-table>
`,
controller: EntaxyConnectorsController
})
.name;
function EntaxyConnectorsController(workspace, $uibModal, operationsService, jolokiaService) {
function EntaxyConnectorsController(workspace, $scope, $uibModal, operationsService, jolokiaService) {
'ngInject';
var ctrl = this;
ctrl.workspace = workspace;
var entaxyJmxDomain = localStorage['entaxyJmxDomain'] || "ru.entaxy.esb";
let filterValues = Entaxy.getAllBundleStates();
ctrl.tableConfig = {
selectionMatchProp: 'name',
showCheckboxes: false
};
ctrl.toolbarConfig = {
filterConfig: {
fields: [
{
id: 'name',
title: 'Name',
placeholder: 'Filter by Name...',
filterType: 'text'
},
{
id: 'status',
title: 'Status',
placeholder: 'Filter by Status...',
filterType: 'select', // actually text has it rights to be
filterValues: filterValues
}
],
resultCount: ctrl.viewedConnectors ? ctrl.viewedConnectors.length : 0,
appliedFilters: [],
onFilterChange: filterChange
},
actionsConfig: {
primaryActions: [
{ name: 'Add connector', actionFn: () => ctrl.showAddConnectorModal() },
// { name: 'Show Modal', actionFn: () => ctrl.showModal() }
]
},
isTableView: true
};
ctrl.columnDefs = [
{ field: 'name', displayName: 'Connector Name' },
{ field: 'status', displayName: 'Status' }
];
ctrl.tableColumns = [
{ header: 'Connector Name', itemField: 'name' },
{ header: 'Status', itemField: 'status' }
];
ctrl.tableActionButtons = [
{ name: 'Start', title: 'Start Connector', actionFn: startConnector },
{ name: 'Stop', title: 'Stop Connector', actionFn: stopConnector },
// { name: 'Edit', title: 'Edit Connector', actionFn: editConnector },
{ name: 'Remove', title: 'Remove Connector', actionFn: removeConnector }
];
ctrl.pageConfig = {
pageNumber: 1,
pageSize: 10,
pageSizeIncrements: [5, 10, 20, 50, 100]
};
function filterChange(filters) {
applyFilters(filters);
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedConnectors.length;
};
function applyFilters(filters) {
ctrl.viewedConnectors = [];
if (filters && filters.length > 0) {
ctrl.connectors.forEach(function (connector) {
if (matchesFilters(connector, filters)) {
ctrl.viewedConnectors.push(connector);
}
});
} else {
ctrl.viewedConnectors = ctrl.connectors;
}
};
function matchesFilters(item, filters) {
var matches = true;
filters.forEach(function(filter) {
if (!matchesFilter(item, filter)) {
matches = false;
return false;
}
});
return matches;
};
function matchesFilter(item, filter) {
var match = true;
if (filter.id === 'name') {
match = item.name.match(filter.value) !== null;
} else if (filter.id === 'status') {
match = item.status === filter.value;
}
return match;
};
let primaryActions = [ { name: 'Add Legacy Connector', actionFn: () => ctrl.showAddConnectorModal() } ];
ctrl.config = {
primaryActions: primaryActions,
isTableUpdateNeeded: true
}
ctrl.connectors = [];
ctrl.viewedConnectors = [];
ctrl.$onInit = function() {
populateTable();
}
function populateTable() {
ctrl.folderName = 'Коннекторы';
ctrl.statusName = 'BundleState';
let connectors = [];
let count = 0; // FIXME CRUTCH
let connectorsFolder = workspace.getSelectedMBean().get(ctrl.folderName);
if (connectorsFolder) {
connectorsFolder.children.forEach((child) => {
jolokiaService.getAttributes(child.objectName, [ctrl.statusName])
.then((response) => {
connectors.push({name: child.title, status: response[ctrl.statusName], mbeanName: child.objectName});
});
count++; // FIXME CRUTCH
});
ctrl.connectors = connectors;
ctrl.viewedConnectors = connectors;
ctrl.toolbarConfig.filterConfig.resultsCount = count; // FIXME CRUTCH
}
}
ctrl.showAddConnectorModal = function() {
let selectedMBean = workspace.getSelectedMBean();
$uibModal.open({
component: 'entaxyAddConnectorModal',
resolve: {
connector: null
connector: null,
profileName: () => selectedMBean.title
},
size: 'lg',
backdrop: 'static'
@ -188,28 +73,6 @@ var Entaxy;
});
}
ctrl.templates = Entaxy.getConnectorTemplates();
ctrl.showModal = function() {
$uibModal.open({
component: 'entaxyModal',
resolve: {
modalTitle: () => 'Add Connector',
firstStepTitle: () => 'Choose connector template',
secondStepTitle: () => 'Fill in connector template parameters',
// profile: null,
// profileNames: () => ctrl.profiles.map(profile => profile.name),
// profileIds: () => ctrl.profiles.map(profile => profile.id)
templates: () => ctrl.templates.map(template => { return { name: template }})
},
size: 'lg',
backdrop: 'static'
})
.result.then(args => {
// addConnector(args);
});
}
function addConnector(connectorArgs) {
let args = [];
@ -228,53 +91,9 @@ var Entaxy;
operationsService.executeOperation(mbeanName, { name: 'addConnector' }, args)
.then(result => {
// // FIXME FIXME FIXME FIXME FIXME FIXME
setTimeout(() => populateTable(), 5000);
ctrl.viewedConnectors = ctrl.connectors;
ctrl.toolbarConfig.filterConfig.appliedFilters = [];
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedConnectors.length;
Core.notification('success', result, 3000);
}).catch(error => {
Core.notification('danger', error, 5000);
});
}
function startConnector(action, connector) {
let mbeanName = workspace.getSelectedMBeanName();
operationsService.executeOperation(mbeanName, { name: 'startConnector' }, [ connector.name ])
.then(result => {
// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
setTimeout(() => populateTable(), 100);
Core.notification('success', result, 3000);
}).catch(error => {
Core.notification('danger', error, 5000);
});
}
function stopConnector(action, connector) {
let mbeanName = workspace.getSelectedMBeanName();
operationsService.executeOperation(mbeanName, { name: 'stopConnector' }, [ connector.name ])
.then(result => {
// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
setTimeout(() => populateTable(), 100);
Core.notification('success', result, 3000);
}).catch(error => {
Core.notification('danger', error, 5000);
});
}
function removeConnector(action, connector) {
let mbeanName = workspace.getSelectedMBeanName();
operationsService.executeOperation(mbeanName, { name: 'removeConnector' }, [ connector.name ])
.then(result => {
ctrl.connectors.splice(ctrl.connectors.indexOf(connector), 1);
ctrl.viewedConnectors = ctrl.connectors;
ctrl.toolbarConfig.filterConfig.appliedFilters = [];
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedConnectors.length;
if (ctrl.config.isTableUpdateNeeded && ctrl.config.updateTableFn) {
$scope.$on(Jmx.TreeEvent.Updated, ctrl.config.updateTableFn);
}
Core.notification('success', result, 3000);
}).catch(error => {
@ -285,6 +104,6 @@ var Entaxy;
ctrl.dismissAlert = () => ctrl.alert = null;
}
EntaxyConnectorsController.$inject = ['workspace', '$uibModal', 'operationsService', 'jolokiaService'];
EntaxyConnectorsController.$inject = ['workspace', '$scope', '$uibModal', 'operationsService', 'jolokiaService'];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -39,8 +39,8 @@ var Entaxy;
<h2>{{$ctrl.firstStepTitle}}</h2>
</div>
<div class="modal-body">
<entaxy-modal-list items="$ctrl.templates" selected="$ctrl.selectedItem"
change-selection="$ctrl.changeSelection"></entaxy-modal-list>
<entaxy-modal-list-with-description items="$ctrl.factories" selected-item="$ctrl.selectedItem"
change-selection="$ctrl.changeSelection"></entaxy-modal-list-with-description>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="$ctrl.next()"
@ -54,11 +54,11 @@ var Entaxy;
</div>
<div class="modal-body">
<entaxy-modal-group-fields groups="$ctrl.groups" fields="$ctrl.formFields"
errors="$ctrl.errors"></entaxy-modal-group-fields>
errors="$ctrl.errors" mode="$ctrl.mode"></entaxy-modal-group-fields>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-if="$ctrl.hasSteps" ng-click="$ctrl.back()">Back</button>
<button type="submit" class="btn btn-primary" ng-click="$ctrl.save($ctrl.formFields)">Add</button>
<button type="submit" class="btn btn-primary" ng-click="$ctrl.save($ctrl.formFields)">{{$ctrl.submitBtnTitle}}</button>
</div>
<div>
</div>
@ -67,54 +67,74 @@ var Entaxy;
})
.name;
function entaxyModalController(workspace, operationsService) {
function entaxyModalController(operationsService, entaxyService) {
'ngInject';
var ctrl = this;
ctrl.$onInit = function() {
ctrl.modalTitle = ctrl.resolve.modalTitle ? ctrl.resolve.modalTitle : 'Modal'; // fixme do required
ctrl.firstStepTitle = ctrl.resolve.firstStepTitle ? ctrl.resolve.firstStepTitle : ctrl.modalTitle;
ctrl.secondStepTitle = ctrl.resolve.secondStepTitle ? ctrl.resolve.secondStepTitle : ctrl.modalTitle;
ctrl.mode = ctrl.resolve.mode;
ctrl.templates = ctrl.resolve.templates ? ctrl.resolve.templates : null;
if (!ctrl.mode) {
ctrl.cancel('Mode is not defined');
}
// fixme it was only if (ctrl.templates)
if (ctrl.templates && ctrl.templates.length !== 0) { // fixme or maybe if ctrl.templates.length === 1 and then factoryId = ctrl.templates[0]
if (ctrl.templates.length > 1) {
ctrl.itemType = ctrl.resolve.itemType ? ctrl.resolve.itemType : 'Item';
let extraToTitle = ctrl.resolve.parentName ? (' to ' + ctrl.resolve.parentName) : '';
ctrl.modalTitle = ctrl.mode + ' ' + ctrl.itemType + extraToTitle;
ctrl.submitBtnTitle = Entaxy.getButtonTitleByMode(ctrl.mode);
let itemName = ctrl.resolve.itemName;
ctrl.firstStepTitle = ctrl.resolve.firstStepTitle ? ctrl.resolve.firstStepTitle : 'Choose factory';
ctrl.secondStepTitle = itemName ? ctrl.mode + ' properties for ' + itemName
: ctrl.resolve.secondStepTitle ? ctrl.resolve.secondStepTitle : 'Fill in fields';
if (ctrl.mode !== Entaxy.MODAL_MODES.ADD) {
let properties = Object.entries(ctrl.resolve.info.properties);
ctrl.properties = properties.map(property => { return { name: property[0], value: property[1] }; });
}
ctrl.factories = ctrl.resolve.factories ? ctrl.resolve.factories : null;
if (ctrl.factories && ctrl.factories.length !== 0) {
if (ctrl.factories.length > 1) {
ctrl.factories.sort(Entaxy.compareBy('displayName'));
ctrl.step1 = true;
ctrl.step2 = false;
ctrl.hasSteps = true;
} else if (ctrl.templates.length === 1) {
} else if (ctrl.factories.length === 1) {
ctrl.hasSteps = false;
ctrl.next();
}
} else {
ctrl.cancel('Templates are not found');
ctrl.cancel('Factories are not found');
}
}
ctrl.next = function() {
// ctrl.step1 = false;
// ctrl.step2 = true;
// fixme this if perhaps is needed only if hasSteps is true
if (!ctrl.formFields || ctrl.selectedItem.name !== ctrl.formFields[0].value) {
ctrl.formFields = [];
ctrl.formFields.push({
label: 'factoryId',
label: 'Factory Id',
name: 'factoryId',
type: 'java.lang.String',
helpText: null,
value: ctrl.hasSteps ? ctrl.selectedItem.name : ctrl.templates[0].name,
value: ctrl.hasSteps ? ctrl.selectedItem.name : ctrl.factories[0].name,
readOnly: true,
required: true,
required: ctrl.mode === Entaxy.MODAL_MODES.VIEW ? false : true,
group: 'general'
});
let mbeanName = ctrl.hasSteps ? ctrl.selectedItem.mbeanName : ctrl.templates[0].mbeanName;
let mbeanName = ctrl.hasSteps ? ctrl.selectedItem.mbeanName : ctrl.factories[0].mbeanName;
operationsService.executeOperation(mbeanName, { name: 'getFields' }, [ 'init' ])
.then((response) => {
@ -123,26 +143,20 @@ var Entaxy;
groups.add('general');
_.forEach(JSON.parse(response), (field) => {
let formField = {
label: field.displayName ? field.displayName : field.name,
type: field.type,
description: field.description,
immutable: field.immutable,
required: field.required,
value: field.defaultValue,
conditional: field.conditional,
isRef: field.isRef,
isBackRef: field.isBackRef,
group: field.group ? field.group : 'general',
// tag: field.label
};
let objectId = undefined;
if (ctrl.mode !== Entaxy.MODAL_MODES.ADD) {
objectId = ctrl.resolve.info['objectId'];
}
let formField = entaxyService.makeFormField(field, objectId, ctrl.properties, ctrl.mode);
ctrl.formFields.push(formField);
groups.add(formField.group);
});
ctrl.formFields.forEach(formField => formField.type = Entaxy.convertToHtmlInputType(formField.type));
ctrl.groups = Array.from(groups).map((group) => { return { name: group }; });
ctrl.groups = Array.from(groups).map((group) => { return { name: group, displayName: group }; });
ctrl.step1 = false;
ctrl.step2 = true;
@ -162,40 +176,32 @@ var Entaxy;
ctrl.modalInstance.dismiss(reason);
}
ctrl.changeSelection = function(item) {
ctrl.changeSelection = function(item, isDblClicked) {
ctrl.selectedItem = item;
}
ctrl.save = function(item) {
// fixme maybe forEach here
ctrl.errors = validateFields(ctrl.formFields);
if (Object.keys(ctrl.errors).length === 0) {
let factoryIdName = ctrl.formFields.shift().value;
args = {
factoryId: ctrl.templates.find((template) => template.name === factoryIdName),
fields: ctrl.formFields.map(formField => { return { label: formField.label, value : (formField.nestedValue ? formField.nestedValue : formField.value) }; })
};
ctrl.modalInstance.close(args);
if (isDblClicked) {
ctrl.next();
}
}
function validateFields(fields) {
let errors = {};
ctrl.save = function(fields) {
_.forEach(fields, (field) => {
if (field.required && !field.isBackRef) {
if (!field.value || (field.type !== 'checkbox' ? field.value.trim().length === 0 : false)) {
errors[field.label] = 'Please fill out this field';
}
if (ctrl.mode === Entaxy.MODAL_MODES.VIEW) {
ctrl.cancel();
}
let selectedFactory = ctrl.selectedItem ? ctrl.selectedItem : ctrl.factories[0];
entaxyService.validateFields(fields, selectedFactory, ctrl.itemType)
.then(errors => {
ctrl.errors = errors;
if (Object.keys(ctrl.errors).length === 0) {
let args = entaxyService.getArguments(fields, ctrl.factories);
ctrl.modalInstance.close(args);
}
});
return errors;
}
}
entaxyModalController.$inject = ['workspace', 'operationsService'];
entaxyModalController.$inject = ['operationsService', 'entaxyService'];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -24,24 +24,38 @@ var Entaxy;
bindings: {
groups: '<',
fields: '<',
errors: '<'
errors: '<',
mode: '<'
},
template:
`
<div class="modal-group-fields-container">
<div class="modal-groups-list-container">
<entaxy-modal-list items="$ctrl.groups" selected="$ctrl.groups[0]"
change-selection="$ctrl.change" filter="$ctrl.matchesFilter"></entaxy-modal-list>
<entaxy-modal-list class="group-list" items="$ctrl.groups" items-label="Group" items-label-plural="Groups"
selected="$ctrl.selectedGroup" change-selection="$ctrl.change" filter="$ctrl.matchesFilter"></entaxy-modal-list>
</div>
<div class="modal-group-fields-form-container">
<form name="connectorForm" class="form-horizontal">
<div class="form-group" ng-class="{'has-error': $ctrl.errors[formField.label]}"
ng-repeat="formField in $ctrl.viewedFormFields" ng-if="!formField.isBackRef">
<label class="col-sm-4 control-label" ng-class="{'required-pf': formField.required}" for="{{formField.label}}">{{formField.label}}</label>
<div class="form-group" ng-class="{'has-error': $ctrl.errors[formField.name]}"
ng-repeat="formField in $ctrl.viewedFormFields" ng-if="!formField.isBackRef && !formField.isHidden">
<div class="col-sm-4 label-col">
<label class="control-label" ng-class="{'required-pf': formField.required}" for="{{formField.name}}">{{formField.label}}</label>
<button type="button" class="btn btn-link label-description-popover" popover-placement="auto top-left" popover-trigger="'outsideClick'"
uib-popover="{{formField.description}}" ng-if="formField.description">
<span class="pficon pficon-help"></span>
</button>
</div>
<div class="col-sm-7">
<input type="{{formField.type}}" id="{{formField.label}}" ng-class="{'form-control': formField.type !== 'checkbox'}"
ng-model="formField.value" ng-readonly="formField.readOnly">
<span class="help-block" ng-show="$ctrl.errors[formField.label]">{{$ctrl.errors[formField.label]}}</span>
<input type="{{formField.type}}" id="{{formField.name}}" placeholder="{{formField.placeholder}}" ng-class="{'form-control': formField.type !== 'checkbox'}"
ng-model="formField.value" ng-readonly="formField.readOnly" ng-disabled="formField.type === 'checkbox' && formField.readOnly"
ng-if="!formField.type.startsWith('entaxy.runtime.') && formField.type !== 'xml:route' && !formField.typeInfo">
<entaxy-select type="formField.type" id="{{formField.name}}" filter="formField.filter" model="formField.value"
update-parent-fn="$ctrl.updateFieldsAfterSelectionChange" options="formField.options" ng-readonly="formField.readOnly"
ng-if="formField.type.startsWith('entaxy.runtime.')"></entaxy-select>
<entaxy-select-from-enum id="{{formField.name}}" values="formField.typeInfo.values" model="formField.value"
ng-readonly="formField.readOnly" ng-if="formField.typeInfo && formField.typeInfo.type === 'enum'"></entaxy-select-from-enum>
<entaxy-xml id="{{formField.name}}" ng-model="formField.value" ng-if="formField.type === 'xml:route'" mode="$ctrl.localMode"></entaxy-xml>
<span class="help-block" ng-show="$ctrl.errors[formField.name]">{{$ctrl.errors[formField.name]}}</span>
</div>
</div>
</form>
@ -52,12 +66,30 @@ var Entaxy;
})
.name;
function entaxyModalGroupFieldsController() {
function entaxyModalGroupFieldsController(operationsService) {
'ngInject';
var ctrl = this;
ctrl.$onInit = function() {
ctrl.localMode = ctrl.mode === Entaxy.MODAL_MODES.ADD ? Entaxy.MODAL_MODES.EDIT : ctrl.mode;
ctrl.selectedGroup = ctrl.groups[0];
}
ctrl.$onChanges = function(changes) {
if (changes.errors && changes.errors.currentValue) {
let errorKeys = Object.keys(changes.errors.currentValue);
if (errorKeys.length > 0) {
let errorField = ctrl.fields.find(field => field.name === errorKeys[0]);
ctrl.selectedGroup = ctrl.groups.find(group => group.name === errorField.group);
}
}
}
ctrl.change = function(group) {
ctrl.viewedFormFields = ctrl.fields.filter((formField) => formField.group === group.name);
ctrl.selectedGroup = group;
}
ctrl.matchesFilter = function(group, filter) {
@ -65,17 +97,60 @@ var Entaxy;
_.forEach(ctrl.fields.filter((formField) => formField.group === group.name), (field) => {
if (field.tag && field.tag.length !== 0) {
_.forEach(field.tag, (tag) => {
if (tag.match(filter.value) !== null) {
match = true;
return match;
}
});
if (field.tag.toLowerCase().match(filter.value.toLowerCase()) !== null) {
match = true;
return match;
}
}
});
match = group.displayName.toLowerCase().match(filter.value.toLowerCase()) !== null;
return match;
};
}
})(Entaxy || (Entaxy = {}));
ctrl.updateFieldsAfterSelectionChange = function (oldItem, newItem, itemType) {
if (oldItem) {
changeFieldsFromSelected(oldItem, itemType, true);
}
changeFieldsFromSelected(newItem, itemType, false);
}
function changeFieldsFromSelected(item, itemType, toDefaults) {
if (item.mbeanName) {
operationsService
.executeOperation(item.mbeanName, { name: 'get' + itemType + 'Config' }, [ item.name ])
.then(result => {
let itemInfo = JSON.parse(result);
let properties = itemInfo.properties;
changeFieldsValuesFromProperties(properties, toDefaults);
}).catch(error => {
Core.notification('danger', error, 5000);
Entaxy.log.error(error);
});
} else if (item.value) {
let properties = item.value.properties;
changeFieldsValuesFromProperties(properties, toDefaults);
}
}
function changeFieldsValuesFromProperties(properties, toDefaults) {
if (properties && Object.keys(properties).length > 0) {
let keys = Object.keys(properties);
keys.forEach(key => {
let field = ctrl.fields.find(field => field.name === key);
if (field && !field.isHidden) {
field.value = toDefaults ? field.defaultValue : properties[key];
}
});
}
}
}
entaxyModalGroupFieldsController.$inject = ['operationsService'];
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -23,6 +23,9 @@ var Entaxy;
.component('entaxyModalList', {
bindings: {
items: '<',
itemsLabel: '@',
itemsLabelPlural: '@',
enableDblClick: '<',
selected: '<',
changeSelection: '<',
filter: '<'
@ -37,7 +40,12 @@ var Entaxy;
<pf-list-view class="entaxy-list" items="$ctrl.viewedItems" config="$ctrl.listConfig">
<div class="list-view-pf-description">
<div class="list-group-item-heading">
{{item.name}}
{{item.displayName}}
</div>
</div>
<div class="list-view-pf-additional-info" ng-if="item.additionalInfo">
<div class="list-view-pf-additional-info-item" ng-repeat="info in item.additionalInfo">
{{info}}
</div>
</div>
</pf-list-view>
@ -54,22 +62,30 @@ var Entaxy;
ctrl.$onInit = function() {
ctrl.viewedItems = ctrl.items;
ctrl.toolbarConfig.filterConfig.itemsLabel = ctrl.itemsLabel ? ctrl.itemsLabel : 'Result';
ctrl.toolbarConfig.filterConfig.itemsLabelPlural = ctrl.itemsLabelPlural ? ctrl.itemsLabelPlural : 'Results';
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedItems.length;
// FIXME i don't like invoking of changeSelection somehow
if (ctrl.selected) {
ctrl.listConfig.selectedItems = [ ctrl.selected ];
changeSelection();
}
}
ctrl.$onChanges = function(changes) {
if (changes.selected.previousValue && changes.selected.currentValue && changes.selected.currentValue.name !== changes.selected.previousValue.name) {
ctrl.listConfig.selectedItems = [ ctrl.selected ];
changeSelection();
}
}
ctrl.toolbarConfig = {
filterConfig: {
fields: [
{
id: 'name',
id: 'displayName',
title: 'Name',
placeholder: 'Filter by Name...',
placeholder: 'Search...',
filterType: 'text'
}
],
@ -113,8 +129,8 @@ var Entaxy;
return ctrl.filter(item, filter);
} else {
var match = true;
if (filter.id === 'name') {
match = item.name.match(filter.value) !== null;
if (filter.id === 'displayName') {
match = item.displayName.toLowerCase().match(filter.value.toLowerCase()) !== null;
}
return match;
}
@ -124,12 +140,25 @@ var Entaxy;
selectionMatchProp: 'name',
selectItems: true,
showSelectBox: false,
onSelectionChange: changeSelection
onSelectionChange: changeSelection,
dlbClick: true,
onDblClick: (item) => changeSelectionOnDblClick(item)
}
function changeSelection() {
ctrl.changeSelection(ctrl.listConfig.selectedItems[0]);
if (ctrl.selected && !ctrl.listConfig.selectedItems[0]) {
ctrl.listConfig.selectedItems[0] = ctrl.selected;
} else {
ctrl.selected = ctrl.listConfig.selectedItems[0];
ctrl.changeSelection(ctrl.listConfig.selectedItems[0], false);
}
}
function changeSelectionOnDblClick(item) {
if (ctrl.enableDblClick === true) {
ctrl.changeSelection(item, true);
}
}
}
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -70,6 +70,9 @@ var Entaxy;
// todo smth like goto/$location.search ?
} else if (shouldShowConnectorsTab()) {
tabs.unshift(new Nav.HawtioTab(TAB_CONFIG.connectors.title, TAB_CONFIG.connectors.route));
tabs.unshift(new Nav.HawtioTab(TAB_CONFIG.properties.title, TAB_CONFIG.properties.route));
} else if (shouldShowSourceTab()) {
tabs.unshift(new Nav.HawtioTab(TAB_CONFIG.source.title, TAB_CONFIG.source.route));
} else {
let mbeanName = workspace.getSelectedMBeanName();
let parsedMbean = Core.parseMBean(mbeanName);
@ -108,7 +111,15 @@ var Entaxy;
parsedMbean.attributes.profile &&
!parsedMbean.attributes.section;
}
// global event for entaxy extras
function shouldShowSourceTab() {
let mbeanName = workspace.getSelectedMBeanName();
let parsedMbean = Core.parseMBean(mbeanName);
return workspace.hasDomainAndProperties(entaxyJmxDomain, {'category': 'profiles'}) &&
parsedMbean.attributes.profile &&
parsedMbean.attributes.route;
}
// global event for entaxy extras
$rootScope.$emit('entaxyNavigationInited', $scope);
}
EntaxyNavigationController.$inject = ['$scope', '$location', 'workspace', 'localStorage', 'jolokia', '$rootScope']
@ -121,7 +132,9 @@ var Entaxy;
when('/entaxy/test', { template: '<entaxy-test></entaxy-test>' }).
when('/entaxy/connections', { template: '<entaxy-connections page-title="Connections"></entaxy-connections>' }).
when('/entaxy/profiles', { template: '<entaxy-profiles page-title="Profiles"></entaxy-profiles>' }).
when('/entaxy/connectors', { template: '<entaxy-connectors></entaxy-connectors>' });
when('/entaxy/properties', { template: '<entaxy-properties></entaxy-properties>' }).
when('/entaxy/connectors', { template: '<entaxy-connectors page-title="Connectors"></entaxy-connectors>' }).
when('/entaxy/route/source', { template: '<entaxy-source></entaxy-source>' });
}
configureRoutes.$inject = ['$routeProvider'];
@ -152,8 +165,16 @@ var TAB_CONFIG = {
title: 'Profiles',
route: '/entaxy/profiles'
},
properties: {
title: 'Properties',
route: 'entaxy/properties'
},
connectors: {
title: 'Connectors',
route: '/entaxy/connectors'
},
source: {
title: 'Source',
route: '/entaxy/route/source'
}
};

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -36,4 +36,4 @@ var Entaxy;
`
})
.name;
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -25,7 +25,9 @@ var Entaxy;
itemName: '@',
folderName: '@',
statusName: '@',
objectName: '@'
objectName: '@',
isParentDependent: '<',
extraPrimaryActionsConfig: '<'
},
template:
`
@ -33,6 +35,7 @@ var Entaxy;
<pf-table-view config="$ctrl.tableConfig"
columns="$ctrl.tableColumns"
action-buttons="$ctrl.tableActionButtons"
menu-actions="$ctrl.menuActions"
page-config="$ctrl.pageConfig"
items="$ctrl.viewedItems">
</pf-table-view>
@ -41,7 +44,7 @@ var Entaxy;
})
.name;
function EntaxyTableController(workspace, $location, $uibModal, operationsService, jolokiaService) {
function EntaxyTableController(workspace, $location, $scope, $q, jolokia, jolokiaService, $uibModal, operationsService) {
'ngInject';
var ctrl = this;
@ -72,36 +75,17 @@ var Entaxy;
filterValues: filterValues
}
],
// resultsCount: ctrl.viewedItems ? ctrl.viewedItems.length : 0,
// totalCount: ctrl.items ? ctrl.items.length : 0,
appliedFilters: [],
onFilterChange: filterChange
},
// actionsConfig: {
// primaryActions: [
// { name: 'Add ' + ctrl.itemName, actionFn: () => ctrl.showModal() }
// ]
// },
isTableView: true
};
ctrl.columnDefs = [
{ field: 'name', displayName: 'Name' },
{ field: 'status', displayName: 'Status' }
];
ctrl.tableColumns = [
{ header: 'Name', itemField: 'name' },
{ header: 'Status', itemField: 'status' }
];
// ctrl.tableActionButtons = [
// { name: 'Start', title: 'Start ' + ctrl.itemName, actionFn: startItem },
// { name: 'Stop', title: 'Stop ' + ctrl.itemName, actionFn: stopItem },
//// { name: 'Edit', title: 'Edit ' + ctrl.itemName, actionFn: editItem },
// { name: 'Uninstall', title: 'Uninstall ' + ctrl.itemName, actionFn: uninstallItem }
// ];
ctrl.pageConfig = {
pageNumber: 1,
pageSize: 10,
@ -153,159 +137,219 @@ var Entaxy;
ctrl.$onInit = function() {
populateTable();
let primaryActions = [ { name: 'Add ' + ctrl.itemName, actionFn: () => ctrl.showModal(Entaxy.MODAL_MODES.ADD) } ];
if (ctrl.extraPrimaryActionsConfig) {
let extraPrimaryActions = ctrl.extraPrimaryActionsConfig.primaryActions;
primaryActions = primaryActions.concat(extraPrimaryActions);
if (ctrl.extraPrimaryActionsConfig.isTableUpdateNeeded) {
ctrl.extraPrimaryActionsConfig.updateTableFn = populateTable;
}
}
ctrl.toolbarConfig.actionsConfig = {
primaryActions: [
{ name: 'Add ' + ctrl.itemName, actionFn: () => ctrl.showModal() }
]
primaryActions: primaryActions
};
ctrl.tableActionButtons = [
{ name: 'Start', title: 'Start ' + ctrl.itemName, actionFn: startItem },
{ name: 'Stop', title: 'Stop ' + ctrl.itemName, actionFn: stopItem },
// { name: 'Edit', title: 'Edit ' + ctrl.itemName, actionFn: editItem },
{ name: 'Uninstall', title: 'Uninstall ' + ctrl.itemName, actionFn: uninstallItem }
];
ctrl.menuActions = [
{ name: 'View Properties', title: 'View ' + ctrl.itemName + ' Properties', actionFn: showPropertiesModal },
{ name: 'Edit Properties', title: 'Edit ' + ctrl.itemName + ' Properties', actionFn: showPropertiesModal }
];
}
function showPropertiesModal(action, item) {
if (action.name === 'View Properties') {
ctrl.showModal(Entaxy.MODAL_MODES.VIEW, item);
} else if (action.name === 'Edit Properties') {
ctrl.showModal(Entaxy.MODAL_MODES.EDIT, item);
}
}
function populateTable() {
let items = [];
let count = 0; // FIXME if you can
let children = workspace.tree.findDescendant(child => child.title === ctrl.folderName).children;
if (children) {
children.forEach((child) => {
jolokiaService.getAttributes(child.objectName, [ctrl.statusName])
.then((response) => {
items.push({name: child.title, status: response[ctrl.statusName], mbeanName: child.objectName});
});
count++; // FIXME
});
let selectedMBean = workspace.getSelectedMBean();
if (selectedMBean && selectedMBean.isFolder) {
let currentFolder = selectedMBean;
if (selectedMBean.text !== ctrl.folderName) {
currentFolder = selectedMBean.get(ctrl.folderName);
}
ctrl.items = items;
ctrl.viewedItems = items;
ctrl.toolbarConfig.filterConfig.resultsCount = count; // FIXME
if (currentFolder) {
let children = currentFolder.children;
if (children) {
children.forEach((child) => {
jolokiaService.getAttributes(child.objectName, [ctrl.statusName])
.then((response) => {
items.push({name: child.title, status: response[ctrl.statusName], mbeanName: child.objectName});
});
});
ctrl.items = items;
ctrl.viewedItems = items;
ctrl.toolbarConfig.filterConfig.resultsCount = children.length;
}
}
}
}
ctrl.showModal = function() {
let templates = workspace.tree.findDescendant(child => child.title === 'entaxy.runtime.' + ctrl.itemName.toLowerCase())
.children.map((child) => {
let template = {
name: child.title,
mbeanName: child.objectName
};
return template;
});
ctrl.showModal = function(mode, item) {
let factories = [];
let promises = [];
let factoryFolder = workspace.tree.findDescendant(child => child.title === 'entaxy.runtime.' + ctrl.itemName.toLowerCase());
if (factoryFolder && factoryFolder.children) {
factoryFolder.children.forEach((child) => {
promises.push(jolokiaService.getAttributes(child.objectName, ['Abstract', 'DisplayName', 'Label', 'Description', 'Deprecated'])
.then((result) => {
if (!result['Abstract']) {
factories.push({
name: child.title,
displayName: result['DisplayName'] ? result['DisplayName'] : child.title,
label: result['Label'],
mbeanName: child.objectName,
description: result['Description'] ? result['Description'] : 'There is no description for this factory.',
additionalInfo: result['Deprecated'] ? ['[DEPRECATED]'] : undefined
});
}
}));
});
$q.all(promises).then(() => {
if (mode === Entaxy.MODAL_MODES.ADD) {
let parentName;
if (ctrl.isParentDependent === true) {
let selectedMbean = workspace.getSelectedMBean();
parentName = selectedMbean.title;
}
openEntaxyModal({
mode: () => mode,
itemType: () => ctrl.itemName,
parentName: () => parentName,
factories: () => factories
}, mode);
} else {
let mbeanName = workspace.getSelectedMBeanName();
operationsService
.executeOperation(mbeanName, { name: 'get' + ctrl.itemName + 'Config' }, [ item.name ])
.then(result => {
let itemInfo = JSON.parse(result);
let factory = factories.find(factory => factory.name === itemInfo.factoryId);
openEntaxyModal({
itemName: () => item.name,
itemType: () => ctrl.itemName,
mode: () => mode,
info: () => itemInfo,
factories: () => [ factory ]
}, mode);
}).catch(error => {
Core.notification('danger', 'Unable to view configuration of selected item.', 5000);
Entaxy.log.error(error);
});
}
});
}
}
function openEntaxyModal(resolve, mode) {
$uibModal.open({
component: 'entaxyModal',
resolve: {
modalTitle: () => 'Add ' + ctrl.itemName,
templates: () => templates
},
resolve: resolve,
size: 'xl',
backdrop: 'static'
})
.result.then(args => {
addItem(args)
addItem(args, mode)
},
reason => {
if (reason) {
Core.notification('danger', reason, 5000);
}
});
}
function addItem(args) {
let objectId = args.fields.find((field) => field.label === 'objectId').value;
function addItem(args, mode) {
let fields;
if (objectId) {
fields = args.fields.filter((field) => field.label !== 'objectId');
}
let objectId = args.fields.find((field) => field.name === 'objectId').value;
let fields = objectId ? args.fields.filter((field) => field.name !== 'objectId') : args.fields;
let mbeanName = args.factoryId.mbeanName;
let properties = fields.reduce((obj, cur) => ({ ...obj, [cur.label] : cur.value }), {});
let properties = fields.reduce((obj, cur) => ({ ...obj, [cur.name] : cur.value }), {});
let instructions = {"@LIFECYCLE":["general"]};
operationsService.executeOperation(mbeanName, { name: 'createObject' }, [ objectId, 'public', properties ] )
operationsService.executeOperation(mbeanName, { name: 'createObjectByInstructions' }, [ objectId, 'public', instructions, properties ] )
.then(result => {
setTimeout(() => populateTable(), 200);
let tableHtml = Entaxy.createTableFromResponse(result);
Entaxy.notification('success', tableHtml, 10000);
let tableHtml = `<table class="entaxy-result-table">`;
tableHtml +=
`
<tr>
<th>Step</th>
<th>Step name</th>
<th>Step result</th>
</tr>
`;
_.forEach(JSON.parse(result), (step) => {
let iconName = step['Step result'] === 'OK' ? 'ok' : 'error-circle-o';
tableHtml += `<tr><td>` + step['Step'] + `</td><td>` + step['Step name'] + `</td>`;
tableHtml += `<td><span class="pficon pficon-${iconName}"></span></td></tr>`;
});
tableHtml += `</table>`;
Entaxy.notification('success', tableHtml, 8000);
changeLocation(properties[ctrl.objectName]);
if (ctrl.isParentDependent || mode === Entaxy.MODAL_MODES.EDIT) {
$scope.$on(Jmx.TreeEvent.Updated, () => populateTable());
} else {
changeLocation(properties[ctrl.objectName] ? properties[ctrl.objectName] : objectId);
}
}).catch(error => {
Core.notification('danger', error, 5000);
Entaxy.log.error(error);
});
}
function changeLocation(itemName) {
let currentLocation = $location.search();
$location.search('nid', currentLocation.nid + '-' + itemName); // FIXME FIXME FIXME
$location.search('nid', currentLocation.nid + '-' + itemName);
}
function startItem(action, item) {
let mbeanName = workspace.getSelectedMBeanName();
operationsService.executeOperation(mbeanName, { name: 'start' + ctrl.itemName }, [ item.name ])
.then(result => {
// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
setTimeout(() => populateTable(), 100);
Core.notification('success', result, 3000);
}).catch(error => {
Core.notification('danger', error, 5000);
});
if (item.status !== 'Active') {
processOperation('start', item.name);
} else {
Core.notification('info', ctrl.itemName + ' has been already started');
}
}
function stopItem(action, item) {
let mbeanName = workspace.getSelectedMBeanName();
operationsService.executeOperation(mbeanName, { name: 'stop' + ctrl.itemName }, [ item.name ])
.then(result => {
// FIXME FIXME FIXME FIXME FIXME FIXME FIXME FIXME
// jolokiaService.getAttribute(item.mbeanName, 'BundleState')
// .then((response) => item.status = response);
setTimeout(() => populateTable(), 100);
Core.notification('success', result, 3000);
}).catch(error => {
Core.notification('danger', error, 5000);
});
if (item.status !== 'Resolved') {
processOperation('stop', item.name);
} else {
Core.notification('info', ctrl.itemName + ' has been already stopped');
}
}
function uninstallItem(action, item) {
let operationName = ctrl.isParentDependent ? 'remove' : 'uninstall';
processOperation(operationName, item.name);
}
function processOperation(operationName, selectedItemName) {
let mbeanName = workspace.getSelectedMBeanName();
operationsService.executeOperation(mbeanName, { name: 'uninstall' + ctrl.itemName }, [ item.name ])
operationsService.executeOperation(mbeanName, { name: operationName + ctrl.itemName }, [ selectedItemName ])
.then(result => {
ctrl.items.splice(ctrl.items.indexOf(item), 1);
ctrl.viewedItems = ctrl.items;
ctrl.toolbarConfig.filterConfig.appliedFilters = [];
ctrl.toolbarConfig.filterConfig.resultsCount = ctrl.viewedItems.length;
Core.notification('success', result, 3000);
$scope.$on(Jmx.TreeEvent.Updated, () => populateTable());
}).catch(error => {
Core.notification('danger', error, 5000);
Entaxy.log.error(error);
});
}
ctrl.dismissAlert = () => ctrl.alert = null;
}
EntaxyTableController.$inject = ['workspace', '$location', '$uibModal', 'operationsService', 'jolokiaService'];
EntaxyTableController.$inject = ['workspace', '$location', '$scope', '$q', 'jolokia', 'jolokiaService', '$uibModal', 'operationsService'];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -72,7 +72,7 @@ var Entaxy;
$element.addClass('tree-nav-sidebar-header');
EntaxyTreeHeaderController.prototype.$onInit = function () {
Entaxy.log.debug("EntaxyTreeHeaderController init");
Entaxy.log.debug("EntaxyTreeHeaderController init");
var _this = this;
this.$scope.$watch(angular.bind(this, function () { return _this.filter; }), function (filter, previous) {
if (filter !== previous) {
@ -82,7 +82,7 @@ var Entaxy;
};
EntaxyTreeHeaderController.prototype.search = function (filter) {
Entaxy.log.debug("EntaxyTreeHeaderController search");
Entaxy.log.debug("EntaxyTreeHeaderController search");
var _this = this;
var doSearch = function (filter) {
var result = _this.tree().search(filter, {
@ -99,18 +99,18 @@ var Entaxy;
};
EntaxyTreeHeaderController.prototype.tree = function () {
Entaxy.log.debug("EntaxyTreeHeaderController tree");
Entaxy.log.debug("EntaxyTreeHeaderController tree");
return $(entaxyTreeElementId).treeview(true);
};
EntaxyTreeHeaderController.prototype.expandAll = function () {
Entaxy.log.debug("EntaxyTreeHeaderController expand");
Entaxy.log.debug("EntaxyTreeHeaderController expand");
return this.tree()
.expandNode(this.tree().getNodes(), { levels: HawtioTree.getMaxTreeLevel(this.tree()), silent: true });
};
EntaxyTreeHeaderController.prototype.contractAll = function () {
Entaxy.log.debug("EntaxyTreeHeaderController contract");
Entaxy.log.debug("EntaxyTreeHeaderController contract");
return this.tree()
.collapseNode(this.tree().getNodes(), { ignoreChildren: true, silent: true });
};
@ -128,7 +128,7 @@ var Entaxy;
Entaxy.log.debug("EntaxyTreeController ");
var entaxyJmxDomain = localStorage['entaxyJmxDomain'] || "ru.entaxy.esb";
EntaxyTreeController.prototype.$onInit = function () {
Entaxy.log.debug("EntaxyTreeController onInit");
Entaxy.log.debug("EntaxyTreeController onInit");
var _this = this;
this.$scope.$on('$destroy', function () { return _this.removeTree(); });
this.$scope.$on('$routeChangeStart', function () { return Jmx.updateTreeSelectionFromURL(_this.$location, $(entaxyTreeElementId)); });

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -20,16 +20,75 @@
var Entaxy;
(function (Entaxy) {
const MODAL_MODES = {
VIEW: 'View',
EDIT: 'Edit',
ADD: 'Add'
};
Entaxy.MODAL_MODES = MODAL_MODES;
function getButtonTitleByMode(mode) {
switch (mode) {
case MODAL_MODES.ADD:
return 'Add';
case MODAL_MODES.EDIT:
return 'Save';
case MODAL_MODES.VIEW:
return 'Ok';
}
}
Entaxy.getButtonTitleByMode = getButtonTitleByMode;
function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
Entaxy.capitalize = capitalize;
function uncapitalize(string) {
return string.charAt(0).toLowerCase() + string.slice(1);
}
Entaxy.uncapitalize = uncapitalize;
function getChildrenRecursive(folder) {
let children = folder.children;
if (children) {
folder.children.forEach(child => {
if (child.children) {
children = children.concat(getChildrenRecursive(child));
}
});
}
return children;
}
Entaxy.getChildrenRecursive = getChildrenRecursive;
function compareBy(fieldName) {
return function(a, b) {
let valueA = a[fieldName].toLowerCase();
let valueB = b[fieldName].toLowerCase();
if (valueA < valueB) {
return -1;
}
if (valueA > valueB) {
return 1;
}
return 0;
}
}
Entaxy.compareBy = compareBy;
function convertToHtmlInputType(javaType) {
if (!javaType || javaType.startsWith('entaxy.runtime')) {
// fixme maybe
return javaType;
}
switch (javaType) {
case 'xml:route':
return javaType;
case 'boolean':
case 'Boolean':
case 'java.lang.Boolean':
return 'checkbox';
case 'number':
case 'int':
case 'long':
case 'java.lang.Integer':
@ -41,6 +100,26 @@ var Entaxy;
}
Entaxy.convertToHtmlInputType = convertToHtmlInputType;
function createTableFromResponse(response) {
let tableHtml = `<table class="entaxy-result-table">`;
tableHtml +=
`
<tr>
<th>Step</th>
<th>Step name</th>
<th>Step result</th>
</tr>
`;
_.forEach(JSON.parse(response), (step) => {
let iconName = step['Step result'] === 'OK' ? 'ok' : 'error-circle-o';
tableHtml += `<tr><td>` + step['Step'] + `</td><td>` + step['Step name'] + `</td>`;
tableHtml += `<td><span class="pficon pficon-${iconName}"></span></td></tr>`;
});
tableHtml += `</table>`;
return tableHtml;
}
Entaxy.createTableFromResponse = createTableFromResponse;
function notification(type, message, duration) {
let visibleToastElem = null;
@ -52,7 +131,9 @@ var Entaxy;
<span class="pficon pficon-close"></span>
</button>
<span class="pficon pficon-${resolveToastIcon(type)}"></span>
${message}
<div class="toast-pf-content">
${message}
</div>
</div>
`;

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -39,36 +39,42 @@ var Entaxy;
let connectorTemplateParams = '{"uniform-service-active-in-connector":[' +
'{' +
'"label":"period",' +
'"displayName":"Period",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":"1m"' +
'},' +
'{' +
'"label":"username",' +
'"displayName":"Username",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":"admin"' +
'},' +
'{' +
'"label":"password",' +
'"displayName":"Password",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"endpointUrl",' +
'"displayName":"Endpoint URL",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"connectionTimeout",' +
'"displayName":"Connection Timeout",' +
'"type":"int",' +
'"helpText":null,' +
'"value":3000' +
'},' +
'{' +
'"label":"connectionMaxThreads",' +
'"displayName":"Connection Max Threads",' +
'"type":"int",' +
'"helpText":null,' +
'"value":1' +
@ -77,30 +83,35 @@ var Entaxy;
'"uniform-service-active-out-connector":[' +
'{' +
'"label":"username",' +
'"displayName":"Username",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":"admin"' +
'},' +
'{' +
'"label":"password",' +
'"displayName":"Password",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"endpointUrl",' +
'"displayName":"Endpoint URL",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"connectionTimeout",' +
'"displayName":"Connection Timeout",' +
'"type":"int",' +
'"helpText":null,' +
'"value":3000' +
'},' +
'{' +
'"label":"connectionMaxThreads",' +
'"displayName":"Connection Max Threads",' +
'"type":"int",' +
'"helpText":null,' +
'"value":1' +
@ -112,36 +123,42 @@ var Entaxy;
'"sql-out-connector":[' +
'{' +
'"label":"serverName",' +
'"displayName":"Server Name",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"portNumber",' +
'"displayName":"Port Number",' +
'"type":"java.lang.Integer",' +
'"helpText":null,' +
'"value":5432' +
'},' +
'{' +
'"label":"databaseName",' +
'"displayName":"Database Name",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"user",' +
'"displayName":"User",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"password",' +
'"displayName":"Password",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":""' +
'},' +
'{' +
'"label":"dataSourceClass",' +
'"displayName":"Data Source Class",' +
'"type":"java.lang.String",' +
'"helpText":null,' +
'"value":"org.postgresql.ds.PGSimpleDataSource"' +

View File

@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -58,7 +58,7 @@ var Entaxy = (function (Entaxy) {
})
.run(configurePlugin);
function configurePlugin(mainNavService, workspace, helpRegistry, preferencesRegistry, localStorage, preLogoutTasks, documentBase, $templateCache, $rootScope) {
function configurePlugin(mainNavService, workspace, helpRegistry, preferencesRegistry, localStorage, preLogoutTasks, documentBase, $templateCache, $rootScope) {
var entaxyJmxDomain = localStorage['entaxyJmxDomain'] || "ru.entaxy.esb";
mainNavService.addItem({
title: 'Entaxy',
@ -67,6 +67,67 @@ var Entaxy = (function (Entaxy) {
isValid: function () { return workspace.treeContainsDomainAndProperties(entaxyJmxDomain); }
});
workspace.addNamedTreePostProcessor('addIconClass', (tree) => {
if (tree) {
let domain = tree.get(entaxyJmxDomain);
if (domain) {
angular.forEach(domain.children, (node) => {
node.class = 'entaxy-node-icon';
angular.forEach(['platform', 'runtime', 'resource'], (folderName) => {
let folder = domain.findDescendant(child => child.title === folderName);
if (folder) {
folder.class = createClassName(folderName);
}
});
angular.forEach(['adapter', 'factories', 'connections'], (folderName) => {
addClassRecursive(
domain.findDescendant(child => child.title === folderName),
createClassName(folderName)
);
});
addClassToParentAndItsChildren(domain, 'profiles');
});
}
}
});
function addClassRecursive(folder, className) {
if (folder) {
folder.class = className;
angular.forEach(folder.children, (child) => {
if (child.children && child.children.length > 0) {
addClassRecursive(child, className);
} else {
child.class = className;
}
});
}
}
function addClassToParentAndItsChildren(domain, parentName) {
let className = createClassName(parentName);
let parent = domain.findDescendant(child => child.title === parentName);
if (parent) {
parent.class = className;
angular.forEach(parent.children, (child) => {
child.class = className;
angular.forEach(child.children, (grandChild) => {
addClassRecursive(grandChild, createClassName(grandChild.title));
})
});
}
}
function createClassName(folderName) {
return 'entaxy-' + folderName + '-icon';
}
function mBeansTreeLocalization(children) {
if (children && children.length >0) {
for (var i=0; i<children.length; i++) {
@ -85,14 +146,14 @@ var Entaxy = (function (Entaxy) {
$rootScope.$emit('entaxyWorkspacePreparing', workspace);
workspace.addNamedTreePostProcessor('localize', (tree) => {
if (tree) {
let domain = tree.get(entaxyJmxDomain);
if (domain) {
console.log('domain ');
console.log(domain.children);
mBeansTreeLocalization(domain.children);
}
}
if (tree) {
let domain = tree.get(entaxyJmxDomain);
if (domain) {
console.log('domain ');
console.log(domain.children);
mBeansTreeLocalization(domain.children);
}
}
});
// clean up local storage upon logout
@ -104,7 +165,7 @@ var Entaxy = (function (Entaxy) {
}
configurePlugin.$inject = ['mainNavService', 'workspace', 'helpRegistry', 'preferencesRegistry', 'localStorage', 'preLogoutTasks', 'documentBase', '$templateCache','$rootScope'];
return Entaxy;
return Entaxy;
})(Entaxy || {});
@ -113,12 +174,13 @@ var Entaxy = (function (Entaxy) {
hawtioPluginLoader.addModule(Entaxy.pluginName);
var L10N = {
platform: 'Платформа',
adapters: 'Адаптеры',
factories: 'Фабрики',
runtime:'Состояние',
connections:'Коннекции',
profiles:'Профили',
connectors:'Коннекторы',
routes:'Маршруты'
};
platform: 'Платформа',
adapter: 'Адаптеры',
factories: 'Фабрики',
runtime:'Состояние',
connections:'Коннекции',
profiles:'Профили',
connectors:'Коннекторы',
routes:'Маршруты',
resource: 'Ресурсы'
};

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2022 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -139,4 +139,4 @@ var Entaxy;
}
firstStepModalTestController.$inject = [];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2022 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -96,4 +96,4 @@ function secondStepModalTestController() {
}
secondStepModalTestController.$inject = [];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -300,4 +300,4 @@ var Entaxy;
}
testModalController.$inject = ['workspace', '$uibModal'];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -2,14 +2,14 @@
* ~~~~~~licensing~~~~~~
* entaxy-management-plugin
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* Copyright (C) 2020 - 2023 EmDev LLC
* ==========
* 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
*
*
* http://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.
@ -241,4 +241,4 @@ var Entaxy;
}
testModal2Controller.$inject = ['workspace', '$uibModal'];
})(Entaxy || (Entaxy = {}));
})(Entaxy || (Entaxy = {}));

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ru.entaxy.esb</groupId>
<artifactId>ui</artifactId>
<version>1.8.2.2</version>
<version>1.8.3</version>
</parent>
<groupId>ru.entaxy.esb.ui</groupId>
<artifactId>entaxy-hawtio</artifactId>
@ -46,42 +46,130 @@
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<executions>
<execution>
<id>update-file-header</id>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<excludes combine.self="override">
<!--
we exclude org.apache.karaf.features.repos.cfg
for it will be used as a fragment
-->
<exclude>**/org.apache.karaf.features.repos.cfg</exclude>
<exclude>**/*.cfg</exclude>
<exclude>**/*.json1</exclude>
<!-- *.ftl files will be processed by the next plugin -->
<exclude>**/*.ftl</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>attach-cfg</id>
<activation>
<file>
<exists>src/main/resources/etc/org.apache.karaf.features.repos.cfg</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>attach-cfg-hawtio</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<runOnlyAtExecutionRoot>false</runOnlyAtExecutionRoot>
<artifacts>
<artifact>
<file>target/classes/etc/org.apache.karaf.features.repos.cfg</file>
<type>cfg</type>
<classifier>org.apache.karaf.features.repos</classifier>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>entaxy-hawtio-license</id>
<activation>
<property>
<name>processLicense</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>license-maven-plugin</artifactId>
<executions>
<execution>
<id>update-file-header-entaxy-hawtio</id>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<organizationName>${license.organizationName}</organizationName>
<inceptionYear>${license.inceptionYear}</inceptionYear>
<projectName>${license.projectName}</projectName>
<copyrightOwners>${license.copyrightOwners}</copyrightOwners>
<licenseName>${license.licenseName}</licenseName>
<!-- plugin documentation recommends "true"
but we use "false" to look like Apache sources -->
<addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
<emptyLineAfterHeader>false</emptyLineAfterHeader>
<!-- excludes>
<exclude>**/*.json</exclude>
</excludes-->
<extraExtensions>
<!-- treat *.install files as *.properties -->
<install>properties</install>
</extraExtensions>
<ignoreNoFileToScan>true</ignoreNoFileToScan>
<keepBackup>true</keepBackup>
<processStartTag>${license.processStartTag}</processStartTag>
<processEndTag>${license.processEndTag}</processEndTag>
<sectionDelimiter>${license.sectionDelimiter}</sectionDelimiter>
</configuration>
</execution>
<execution>
<id>update-file-header</id>
<goals>
<goal>update-file-header</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<excludes combine.self="override">
<!--
we exclude org.apache.karaf.features.repos.cfg
for it will be used as a fragment
-->
<exclude>**/org.apache.karaf.features.repos.cfg</exclude>
<exclude>**/*.cfg</exclude>
<exclude>**/*.json1</exclude>
<!-- *.ftl files will be processed by the next plugin -->
<exclude>**/*.ftl</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!--
@DISABLED @TO_REMOVE
-->
<profile>
<id>install-hawtio-script</id>
<activation>
<activeByDefault>false</activeByDefault>
<file>
<exists>src/main/scripts/entaxy-hawtio.install</exists>
<exists>src/main/scripts/entaxy-hawtio.install_1</exists>
</file>
</activation>
<build>

View File

@ -3,7 +3,7 @@
~~~~~~licensing~~~~~~
entaxy-hawtio
==========
Copyright (C) 2020 - 2021 EmDev LLC
Copyright (C) 2020 - 2023 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,3 +1,22 @@
###
# ~~~~~~licensing~~~~~~
# entaxy-hawtio
# ==========
# Copyright (C) 2020 - 2023 EmDev LLC
# ==========
# 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
#
# http://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.
# ~~~~~~/licensing~~~~~~
###
#
# This file describes the features repository URL
# for Entaxy Hawtio-based UI

View File

@ -2,7 +2,7 @@
# ~~~~~~licensing~~~~~~
# entaxy-hawtio
# ==========
# Copyright (C) 2020 - 2021 EmDev LLC
# Copyright (C) 2020 - 2023 EmDev LLC
# ==========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.