KNOX-1186: Descriptors and Topology Generation Support for Service Versioning


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/d402f6d2
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/d402f6d2
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/d402f6d2

Branch: refs/heads/master
Commit: d402f6d23b796f97c4cf32b0a2ff45150a4d2d66
Parents: 165ea0f
Author: Phil Zampino <[email protected]>
Authored: Tue Feb 20 09:36:00 2018 -0500
Committer: Phil Zampino <[email protected]>
Committed: Tue Feb 20 12:03:15 2018 -0500

----------------------------------------------------------------------
 .../src/app/resource-detail/descriptor.ts       |   7 +
 .../resource-detail.component.html              |  16 +-
 .../resource-detail.component.ts                |   9 +
 gateway-admin-ui/src/app/resource/service.ts    |   1 +
 .../applications/admin-ui/app/index.html        |   2 +-
 .../app/inline.b4085b145a2e0a0b720b.bundle.js   |   1 +
 .../app/inline.fa3e6141adc9fa1252f1.bundle.js   |   1 -
 .../app/main.56c4cae2067cd0d77305.bundle.js     |   1 -
 .../app/main.968fcdd54b9465154f6c.bundle.js     |   1 +
 .../topology/simple/SimpleDescriptor.java       |   2 +
 .../simple/SimpleDescriptorHandler.java         |  14 +-
 .../topology/simple/SimpleDescriptorImpl.java   |   8 +
 .../simple/SimpleDescriptorFactoryTest.java     | 190 ++++++++++++++++---
 .../simple/SimpleDescriptorHandlerTest.java     |   9 +
 14 files changed, 230 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-admin-ui/src/app/resource-detail/descriptor.ts
----------------------------------------------------------------------
diff --git a/gateway-admin-ui/src/app/resource-detail/descriptor.ts 
b/gateway-admin-ui/src/app/resource-detail/descriptor.ts
index 6ef217f..4c1f69a 100644
--- a/gateway-admin-ui/src/app/resource-detail/descriptor.ts
+++ b/gateway-admin-ui/src/app/resource-detail/descriptor.ts
@@ -74,6 +74,13 @@ export class Descriptor {
         this.setDirty();
     }
 
+    onVersionChanged(service: Service) {
+      if (!service.version || service.version.length == 0) {
+        delete service.version;
+      }
+      this.setDirty();
+    }
+
     setDirty() {
         this.dirty = true;
     }

http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-admin-ui/src/app/resource-detail/resource-detail.component.html
----------------------------------------------------------------------
diff --git 
a/gateway-admin-ui/src/app/resource-detail/resource-detail.component.html 
b/gateway-admin-ui/src/app/resource-detail/resource-detail.component.html
index 20ef426..810f8b9 100644
--- a/gateway-admin-ui/src/app/resource-detail/resource-detail.component.html
+++ b/gateway-admin-ui/src/app/resource-detail/resource-detail.component.html
@@ -191,7 +191,21 @@
           <tr *ngFor="let service of descriptor.services">
             <td>
               <div>
-                <span><strong>{{ service.name }}</strong></span>
+                <span [class]="!getServiceVersionEditFlag(service) && 
!service.version ? 'inline-editable' : ''"
+                      (click)="setServiceVersionEditFlag(service, 
true)"><strong>{{ service.name }}</strong></span>
+                <span *ngIf="!getServiceVersionEditFlag(service) && 
service.version"
+                      (click)="setServiceVersionEditFlag(service, true)"
+                      [class]="service.version ? 'inline-editable' : 
''">({{service.version}})</span>
+                <span *ngIf="getServiceVersionEditFlag(service)" 
class="inline-editor inlineEditForm">
+                  <input type="text" size="40" [(ngModel)]="service.version">
+                  <button class="btn btn-xs" 
(click)="setServiceVersionEditFlag(service, 
false);descriptor.onVersionChanged(service)">
+                    <span class="glyphicon glyphicon-ok"></span>
+                  </button>
+                  <button class="btn btn-xs" 
(click)="setServiceVersionEditFlag(service, false)">
+                    <span class="glyphicon glyphicon-remove"></span>
+                  </button>
+                </span>
+
                 <span class="clickable inline-glyph glyphicon glyphicon-remove 
btn btn-xs pull-right"
                       [title]="'Remove ' + service.name"
                       (click)="onRemoveDescriptorService(service.name)"

http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-admin-ui/src/app/resource-detail/resource-detail.component.ts
----------------------------------------------------------------------
diff --git 
a/gateway-admin-ui/src/app/resource-detail/resource-detail.component.ts 
b/gateway-admin-ui/src/app/resource-detail/resource-detail.component.ts
index 69d5925..e58bfeb 100644
--- a/gateway-admin-ui/src/app/resource-detail/resource-detail.component.ts
+++ b/gateway-admin-ui/src/app/resource-detail/resource-detail.component.ts
@@ -509,6 +509,15 @@ export class ResourceDetailComponent implements OnInit {
       return this[provider.name+paramName+'EditMode'];
   }
 
+  setServiceVersionEditFlag(service: Service, value: boolean) {
+      this[service.name + 'EditMode'] = value;
+      this.descriptor.setDirty();
+  }
+
+  getServiceVersionEditFlag(service: Service): boolean {
+      return this[service.name + 'EditMode'];
+  }
+
   setServiceParamEditFlag(service: Service, paramName: string, value: boolean) 
{
       this[service.name + paramName + 'EditMode'] = value;
       this.descriptor.setDirty();

http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-admin-ui/src/app/resource/service.ts
----------------------------------------------------------------------
diff --git a/gateway-admin-ui/src/app/resource/service.ts 
b/gateway-admin-ui/src/app/resource/service.ts
index e46cea2..4f27fe6 100644
--- a/gateway-admin-ui/src/app/resource/service.ts
+++ b/gateway-admin-ui/src/app/resource/service.ts
@@ -17,6 +17,7 @@
 
 export class Service {
     name: string;
+    version: string;
     params: Object;
     urls: string[];
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-applications/src/main/resources/applications/admin-ui/app/index.html
----------------------------------------------------------------------
diff --git 
a/gateway-applications/src/main/resources/applications/admin-ui/app/index.html 
b/gateway-applications/src/main/resources/applications/admin-ui/app/index.html
index 6c35e06..c96c061 100644
--- 
a/gateway-applications/src/main/resources/applications/admin-ui/app/index.html
+++ 
b/gateway-applications/src/main/resources/applications/admin-ui/app/index.html
@@ -11,4 +11,4 @@
   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.
---><!doctype html><html><head><meta charset="utf-8"><title>Apache Knox 
Manager</title><meta name="viewport" 
content="width=device-width,initial-scale=1"><link rel="icon" 
type="image/x-icon" href="favicon.ico"><meta name="viewport" 
content="width=device-width,initial-scale=1"><!-- Latest compiled and minified 
CSS --><link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"; 
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
 crossorigin="anonymous"><!-- Optional theme --><link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css";
 
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
 crossorigin="anonymous"><!-- Custom styles for this template --><link 
href="assets/sticky-footer.css" rel="stylesheet"><script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js";></script><!--
 Latest compiled and minified JavaScript --><scr
 ipt src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"; 
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
 crossorigin="anonymous"></script><script 
src="assets/vkbeautify.js"></script><link 
href="styles.2ee5b7f4cd59a6cf015e.bundle.css" 
rel="stylesheet"/></head><body><div class="navbar-wrapper"><div 
class="container-fluid"><nav class="navbar navbar-inverse 
navbar-static-top"><div class="container-fluid"><div 
class="navbar-header"><button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar"><span class="sr-only">Toggle navigation</span> <span 
class="icon-bar"></span> <span class="icon-bar"></span> <span 
class="icon-bar"></span></button> <a class="navbar-brand" href="#"><img 
style="max-width:200px; margin-top: -9px;" 
src="assets/knox-logo-transparent.gif" alt="Apache Knox 
Manager"></a></div></div></nav></div><!-- Content --><resource-management></res
 ource-management><footer class="footer"><div>Knox Manager Version 
0.1.0</div><gateway-version></gateway-version></footer><script 
type="text/javascript" 
src="inline.fa3e6141adc9fa1252f1.bundle.js"></script><script 
type="text/javascript" 
src="scripts.c50bb762c438ae0f8842.bundle.js"></script><script 
type="text/javascript" 
src="main.56c4cae2067cd0d77305.bundle.js"></script></div></body></html>
\ No newline at end of file
+--><!doctype html><html><head><meta charset="utf-8"><title>Apache Knox 
Manager</title><meta name="viewport" 
content="width=device-width,initial-scale=1"><link rel="icon" 
type="image/x-icon" href="favicon.ico"><meta name="viewport" 
content="width=device-width,initial-scale=1"><!-- Latest compiled and minified 
CSS --><link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"; 
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
 crossorigin="anonymous"><!-- Optional theme --><link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css";
 
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
 crossorigin="anonymous"><!-- Custom styles for this template --><link 
href="assets/sticky-footer.css" rel="stylesheet"><script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js";></script><!--
 Latest compiled and minified JavaScript --><scr
 ipt src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"; 
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
 crossorigin="anonymous"></script><script 
src="assets/vkbeautify.js"></script><link 
href="styles.2ee5b7f4cd59a6cf015e.bundle.css" 
rel="stylesheet"/></head><body><div class="navbar-wrapper"><div 
class="container-fluid"><nav class="navbar navbar-inverse 
navbar-static-top"><div class="container-fluid"><div 
class="navbar-header"><button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#navbar" aria-expanded="false" 
aria-controls="navbar"><span class="sr-only">Toggle navigation</span> <span 
class="icon-bar"></span> <span class="icon-bar"></span> <span 
class="icon-bar"></span></button> <a class="navbar-brand" href="#"><img 
style="max-width:200px; margin-top: -9px;" 
src="assets/knox-logo-transparent.gif" alt="Apache Knox 
Manager"></a></div></div></nav></div><!-- Content --><resource-management></res
 ource-management><footer class="footer"><div>Knox Manager Version 
0.1.0</div><gateway-version></gateway-version></footer><script 
type="text/javascript" 
src="inline.b4085b145a2e0a0b720b.bundle.js"></script><script 
type="text/javascript" 
src="scripts.c50bb762c438ae0f8842.bundle.js"></script><script 
type="text/javascript" 
src="main.968fcdd54b9465154f6c.bundle.js"></script></div></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-applications/src/main/resources/applications/admin-ui/app/inline.b4085b145a2e0a0b720b.bundle.js
----------------------------------------------------------------------
diff --git 
a/gateway-applications/src/main/resources/applications/admin-ui/app/inline.b4085b145a2e0a0b720b.bundle.js
 
b/gateway-applications/src/main/resources/applications/admin-ui/app/inline.b4085b145a2e0a0b720b.bundle.js
new file mode 100644
index 0000000..b12f62e
--- /dev/null
+++ 
b/gateway-applications/src/main/resources/applications/admin-ui/app/inline.b4085b145a2e0a0b720b.bundle.js
@@ -0,0 +1 @@
+!function(e){var 
n=window.webpackJsonp;window.webpackJsonp=function(r,c,u){for(var 
a,i,f,l=0,s=[];l<r.length;l++)t[i=r[l]]&&s.push(t[i][0]),t[i]=0;for(a in 
c)Object.prototype.hasOwnProperty.call(c,a)&&(e[a]=c[a]);for(n&&n(r,c,u);s.length;)s.shift()();if(u)for(l=0;l<u.length;l++)f=o(o.s=u[l]);return
 f};var r={},t={2:0};function o(n){if(r[n])return r[n].exports;var 
t=r[n]={i:n,l:!1,exports:{}};return 
e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var 
n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new 
Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var 
c=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,o.nc&&u.setAttribute("nonce",o.nc),u.src=o.p+""+e+"."+{0:"968fcdd54b9465154f6c",1:"aed76669724804835353"}[e]+".chunk.js";var
 a=setTimeout(i,12e4);function i(){u.onerror=u.onload=null,clearTimeout(a);var 
n=t[e];0!==n&&(n&&n[1](new Error("Loading chu
 nk "+e+" failed.")),t[e]=void 0)}return 
u.onerror=u.onload=i,c.appendChild(u),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var
 n=e&&e.__esModule?function(){return e.default}:function(){return e};return 
o.d(n,"a",n),n},o.o=function(e,n){return 
Object.prototype.hasOwnProperty.call(e,n)},o.p="",o.oe=function(e){throw 
console.error(e),e}}([]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/knox/blob/d402f6d2/gateway-applications/src/main/resources/applications/admin-ui/app/inline.fa3e6141adc9fa1252f1.bundle.js
----------------------------------------------------------------------
diff --git 
a/gateway-applications/src/main/resources/applications/admin-ui/app/inline.fa3e6141adc9fa1252f1.bundle.js
 
b/gateway-applications/src/main/resources/applications/admin-ui/app/inline.fa3e6141adc9fa1252f1.bundle.js
deleted file mode 100644
index ce637f5..0000000
--- 
a/gateway-applications/src/main/resources/applications/admin-ui/app/inline.fa3e6141adc9fa1252f1.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){var 
n=window.webpackJsonp;window.webpackJsonp=function(r,c,u){for(var 
a,i,f,l=0,s=[];l<r.length;l++)t[i=r[l]]&&s.push(t[i][0]),t[i]=0;for(a in 
c)Object.prototype.hasOwnProperty.call(c,a)&&(e[a]=c[a]);for(n&&n(r,c,u);s.length;)s.shift()();if(u)for(l=0;l<u.length;l++)f=o(o.s=u[l]);return
 f};var r={},t={2:0};function o(n){if(r[n])return r[n].exports;var 
t=r[n]={i:n,l:!1,exports:{}};return 
e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var 
n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new 
Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var 
c=document.getElementsByTagName("head")[0],u=document.createElement("script");u.type="text/javascript",u.charset="utf-8",u.async=!0,u.timeout=12e4,o.nc&&u.setAttribute("nonce",o.nc),u.src=o.p+""+e+"."+{0:"56c4cae2067cd0d77305",1:"aed76669724804835353"}[e]+".chunk.js";var
 a=setTimeout(i,12e4);function i(){u.onerror=u.onload=null,clearTimeout(a);var 
n=t[e];0!==n&&(n&&n[1](new Error("Loading chu
 nk "+e+" failed.")),t[e]=void 0)}return 
u.onerror=u.onload=i,c.appendChild(u),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var
 n=e&&e.__esModule?function(){return e.default}:function(){return e};return 
o.d(n,"a",n),n},o.o=function(e,n){return 
Object.prototype.hasOwnProperty.call(e,n)},o.p="",o.oe=function(e){throw 
console.error(e),e}}([]);
\ No newline at end of file

Reply via email to