You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by pz...@apache.org on 2018/02/14 20:21:42 UTC
[3/3] knox git commit: KNOX-1040: Implemented the ability to add
config elements to provider configurations and descriptors.
KNOX-1040: Implemented the ability to add config elements to provider configurations and descriptors.
Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/c3c0bf74
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/c3c0bf74
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/c3c0bf74
Branch: refs/heads/master
Commit: c3c0bf742dfe2f9f61c844625c1724ac4d133e12
Parents: b751c72
Author: Phil Zampino <pz...@apache.org>
Authored: Tue Feb 13 23:56:53 2018 -0500
Committer: Phil Zampino <pz...@apache.org>
Committed: Wed Feb 14 15:21:11 2018 -0500
----------------------------------------------------------------------
.../src/app/resource-detail/descriptor.ts | 31 ++
.../resource-detail.component.css | 6 +-
.../resource-detail.component.html | 427 +++++++++++--------
.../resource-detail.component.ts | 58 +++
gateway-admin-ui/src/app/resource/service.ts | 2 +-
.../applications/admin-ui/app/index.html | 2 +-
.../app/inline.6fba7504840e56503966.bundle.js | 1 +
.../app/inline.c33f88beae0a6c65f63f.bundle.js | 1 -
.../app/main.1776646c6234f6c1c793.bundle.js | 1 +
.../app/main.e8ac70095627bac846b5.bundle.js | 1 -
10 files changed, 355 insertions(+), 175 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/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 090e84a..6ef217f 100644
--- a/gateway-admin-ui/src/app/resource-detail/descriptor.ts
+++ b/gateway-admin-ui/src/app/resource-detail/descriptor.ts
@@ -28,6 +28,9 @@ export class Descriptor {
private dirty: boolean = false;
getServiceParamNames(service: Service): string[] {
+ if (!service.params) {
+ service.params = {};
+ }
return Object.getOwnPropertyNames(service.params);
}
@@ -43,6 +46,34 @@ export class Descriptor {
}
}
+ addService(name: string) {
+ if (!this.services) {
+ this.services = [];
+ }
+ let s = new Service();
+ s.name = name;
+ s.params = {};
+ s.urls = [];
+ this.services.push(s);
+ this.setDirty();
+ }
+
+ addServiceParam(service: Service, name: string, value: string) {
+ if (!service.params) {
+ service.params = {};
+ }
+ service.params[name] = value;
+ this.setDirty();
+ }
+
+ addServiceURL(service: Service, url: string) {
+ if (!service.urls) {
+ service.urls = [];
+ }
+ service.urls.push(url);
+ this.setDirty();
+ }
+
setDirty() {
this.dirty = true;
}
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/gateway-admin-ui/src/app/resource-detail/resource-detail.component.css
----------------------------------------------------------------------
diff --git a/gateway-admin-ui/src/app/resource-detail/resource-detail.component.css b/gateway-admin-ui/src/app/resource-detail/resource-detail.component.css
index 7273b31..5ca3848 100644
--- a/gateway-admin-ui/src/app/resource-detail/resource-detail.component.css
+++ b/gateway-admin-ui/src/app/resource-detail/resource-detail.component.css
@@ -44,7 +44,7 @@
border-radius: 5px;
}
-.inline-editor.inline-editable-button-group {
+.inline-editor.inline-editor-button-group {
display: inline-block;
}
@@ -59,4 +59,8 @@
[hidden].inline-editor {
display: none;
+}
+
+.inline-glyph {
+ vertical-align: 2%;
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/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 4c1ebd8..225072a 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
@@ -7,66 +7,99 @@
<!-- Provider Configuration Details -->
<div class="panel-body" *ngIf="hasSelectedResource() && resourceType === 'Provider Configurations'">
- <div *ngIf="hasSelectedResource()">
- <div *ngIf="referencedProviderConfigError" class="alert alert-warning alert-dismissible" role="alert">
- <button type="button" class="close" data-dismiss="alert" aria-label="Close" (click)="referencedProviderConfigError=false">
- <span aria-hidden="true">×</span>
+ <div *ngIf="referencedProviderConfigError" class="alert alert-warning alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close" (click)="referencedProviderConfigError=false">
+ <span aria-hidden="true">×</span>
+ </button>
+ Cannot remove <strong>{{resourceService.getResourceDisplayName(resource)}}</strong> because it is referenced by one or more descriptors
+ </div>
+ <div style="padding-bottom: 10px">
+ <span><strong>Providers</strong></span>
+ <span *ngIf="!isAddingProvider"
+ class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs pull-right"
+ (click)="isAddingProvider=true"
+ data-toggle="tooltip" title="Add Provider"></span>
+ <span *ngIf="isAddingProvider" class="inline-editor inlineEditForm pull-right">
+ <input type="text" value="name" onClick="this.setSelectionRange(0, this.value.length)" #newProviderName>
+ <input type="text" value="role" onClick="this.setSelectionRange(0, this.value.length)" #newProviderRole>
+ <button class="btn btn-xs"
+ (click)="isAddingProvider=false;
+ addProvider(newProviderName.value, newProviderRole.value)">
+ <span class="glyphicon glyphicon-ok "></span>
</button>
- Cannot remove <strong>{{resourceService.getResourceDisplayName(resource)}}</strong> because it is referenced by one or more descriptors
- </div>
- <div class="panel panel-default" *ngFor="let provider of providers">
- <span [class]="'clickable glyhpicon glyphicon-' + (isShowProvider(provider) ? 'minus' : 'plus')"
+ <button class="btn btn-xs" (click)="isAddingProvider=false">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </div>
+ <div class="panel panel-default" *ngFor="let provider of providers">
+ <div class="panel-heading">
+ <span> </span>
+ <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowProvider(provider) ? 'minus' : 'plus')"
(click)="toggleShowProvider(provider)"></span>
<span><strong>{{ provider.name }}</strong></span>
- <span class="clickable glyphicon glyphicon-remove pull-right btn btn-xs"
+ <span class="clickable inline-glyph glyphicon glyphicon-remove pull-right btn btn-xs"
[title]="'Remove ' + provider.name"
(click)="onRemoveProvider(provider.name)"
data-toggle="tooltip"></span>
- <div *ngIf="isShowProvider(provider)">
- <strong>Role</strong> {{ provider.role }}<br>
- <strong>Enabled</strong> <input type="checkbox"
- [checked]="isProviderEnabled(provider)"
- (click)="onProviderEnabled(provider)"><br>
- <div>
- <span> </span>
- <span [class]="'clickable glyhpicon glyphicon-' + (isShowProviderParams(provider) ? 'minus' : 'plus')"
- (click)="toggleShowProviderParams(provider)"></span>
- <span><strong>Params</strong></span>
- <span class="clickable glyphicon glyphicon-plus-sign btn btn-xs pull-right" data-toggle="tooltip" title="Add Param"></span>
-
- <div class="panel panel-default table-responsive" *ngIf="isShowProviderParams(provider)">
- <table class="table table-sm">
- <tr *ngFor="let paramName of getProviderParamNames(provider)">
- <td>
- <span class="clickable glyphicon glyphicon-remove btn btn-xs"
- title="Remove Param"
- (click)="onRemoveProviderParam(provider, paramName)"
- data-toggle="tooltip"></span>
- </td>
- <td><strong>{{ paramName }}</strong></td>
- <td>
- <span class="inline-editable"
- (click)="setProviderParamEditFlag(provider, paramName, true)"
- *ngIf="!getProviderParamEditFlag(provider, paramName)">{{provider.params[paramName]}}</span>
- <span *ngIf="getProviderParamEditFlag(provider, paramName)" class="inline-editor inlineEditForm">
- <input type="text" size="30" [(ngModel)]="provider.params[paramName]">
- <button class="btn btn-xs"
- (click)="setProviderParamEditFlag(provider, paramName, false);changedProviders=providers">
- <span class="glyphicon glyphicon-ok"></span>
- </button>
- <button class="btn btn-xs" (click)="setProviderParamEditFlag(provider, paramName, false)">
- <span class="glyphicon glyphicon-remove"></span>
- </button>
- </span>
- </td>
- </tr>
- </table>
- </div>
- </div>
- </div>
- <br><br>
</div>
- </div>
+ <div class="panel-body" *ngIf="isShowProvider(provider)">
+ <strong>Role</strong> {{ provider.role }}<br>
+ <strong>Enabled</strong> <input type="checkbox"
+ [checked]="isProviderEnabled(provider)"
+ (click)="onProviderEnabled(provider)"><br>
+ <div>
+ <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowProviderParams(provider) ? 'minus' : 'plus')"
+ (click)="toggleShowProviderParams(provider)"></span>
+ <span><strong>Params</strong></span>
+ <span *ngIf="!isAddingProviderParam(provider)"
+ class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs"
+ (click)="setAddingProviderParam(provider,true)"
+ data-toggle="tooltip" title="Add Param"></span>
+ <span *ngIf="isAddingProviderParam(provider)" class="inline-editor inlineEditForm">
+ <input type="text" value="name" onClick="this.setSelectionRange(0, this.value.length)" #newParamName>
+ <input type="text" value="value" onClick="this.setSelectionRange(0, this.value.length)" #newParamValue>
+ <button class="btn btn-xs"
+ (click)="setAddingProviderParam(provider,false);
+ addProviderParam(provider, newParamName.value, newParamValue.value);
+ showProviderParams(provider)">
+ <span class="glyphicon glyphicon-ok "></span>
+ </button>
+ <button class="btn btn-xs" (click)="setAddingProviderParam(provider,false)">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ <div class="panel panel-default table-responsive" *ngIf="isShowProviderParams(provider)">
+ <table class="table table-sm">
+ <tr *ngFor="let paramName of getProviderParamNames(provider)">
+ <td>
+ <span class="clickable inline-glyph glyphicon glyphicon-remove btn btn-xs"
+ title="Remove Param"
+ (click)="onRemoveProviderParam(provider, paramName)"
+ data-toggle="tooltip"></span>
+ </td>
+ <td><strong>{{ paramName }}</strong></td>
+ <td>
+ <span class="inline-editable"
+ (click)="setProviderParamEditFlag(provider, paramName, true)"
+ *ngIf="!getProviderParamEditFlag(provider, paramName)">{{provider.params[paramName]}}</span>
+ <span *ngIf="getProviderParamEditFlag(provider, paramName)" class="inline-editor inlineEditForm">
+ <input type="text" size="30" [(ngModel)]="provider.params[paramName]">
+ <button class="btn btn-xs"
+ (click)="setProviderParamEditFlag(provider, paramName, false);changedProviders=providers">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="setProviderParamEditFlag(provider, paramName, false)">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </div> <!-- Provider params -->
+ </div>
+ </div> <!-- Provider Details -->
+ </div> <!-- Provider panel -->
<div> <!-- Provider Configuration Modification Buttons -->
<button type="button"
@@ -74,7 +107,7 @@
class="btn btn-default btn-sm pull-left"
(click)="deleteConfirmModal.open('md')"
data-toggle="tooltip">
- <span class="clickable glyphicon glyphicon-trash"></span>
+ <span class="glyphicon glyphicon-trash"></span>
</button>
<span class="pull-right">
<button type="button"
@@ -96,69 +129,102 @@
</button>
</span>
</div>
- </div>
+ </div> <!-- Provider Configuration Details -->
<!-- Descriptor Details -->
<div class="panel-body" *ngIf="hasSelectedResource() && resourceType === 'Descriptors'">
- <!-- The resource name is undefined if it's the empty descriptor because none has been selected yet. -->
- <div *ngIf="hasSelectedResource()">
- <div>
- <div class="panel panel-default col-md-12">
- <span class="col-md-12 pull-left">
- <span class="col-md-sm"><strong>Provider Configuration</strong> </span>
- <span class="col-md-sm inline-editable" (click)="editModePC=true" *ngIf="!editModePC">{{ descriptor.providerConfig}}</span>
- <span class="col-md-sm inline-editor inlineEditForm" *ngIf="editModePC">
- <input type="text" size="40" [(ngModel)]="descriptor.providerConfig">
- <button class="btn btn-xs" (click)="editModePC=false;descriptor.setDirty()">
- <span class="glyphicon glyphicon-ok"></span>
- </button>
- <button class="btn btn-xs" (click)="editModePC=false">
- <span class="glyphicon glyphicon-remove"></span>
- </button>
- </span>
-
- <button id="chooseProviderConfig"
- class="btn btn-xs"
- (click)="chooseProviderConfigModal.open(descriptor, 'sm')"
- [disabled]="editModePC"
- type="submit"
- data-toggle="tooltip"
- title="Choose Provider Configuration">
- <span class="glyphicon glyphicon-edit"></span>
+ <div> <!-- Provider Config reference -->
+ <div class="panel panel-default col-md-12">
+ <span class="col-md-12 pull-left">
+ <span class="col-md-sm"><strong>Provider Configuration</strong> </span>
+ <span class="col-md-sm inline-editable" (click)="editModePC=true" *ngIf="!editModePC">{{ descriptor.providerConfig}}</span>
+ <span class="col-md-sm inline-editor inlineEditForm" *ngIf="editModePC">
+ <input type="text" size="40" [(ngModel)]="descriptor.providerConfig">
+ <button class="btn btn-xs" (click)="editModePC=false;descriptor.setDirty()">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="editModePC=false">
+ <span class="glyphicon glyphicon-remove"></span>
</button>
</span>
- </div>
- <app-provider-config-selector #choosePC></app-provider-config-selector>
+
+ <button id="chooseProviderConfig"
+ class="btn btn-xs"
+ (click)="chooseProviderConfigModal.open(descriptor, 'sm')"
+ [disabled]="editModePC"
+ type="submit"
+ data-toggle="tooltip"
+ title="Choose Provider Configuration">
+ <span class="glyphicon glyphicon-edit"></span>
+ </button>
+ </span>
</div>
+ <app-provider-config-selector #choosePC></app-provider-config-selector>
+ </div> <!-- Provider Config reference -->
- <br><br>
+ <br><br>
- <div class="panel panel-default col-md-12">
- <span [class]="'clickable glyhpicon glyphicon-' + (isShowServices() ? 'minus' : 'plus')"
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowServices() ? 'minus' : 'plus')"
(click)="toggleShowServices()"></span>
<span><strong>Services</strong></span>
- <span class="clickable glyphicon glyphicon-plus-sign btn btn-xs pull-right" data-toggle="tooltip" title="Add Service"></span>
- <div class="col-md-12 table-responsive" *ngIf="isShowServices()">
+ <span *ngIf="!isAddingService"
+ class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs"
+ (click)="isAddingService=true"
+ data-toggle="tooltip" title="Add Service"></span>
+ <span *ngIf="isAddingService"class="inline-editor inlineEditForm">
+ <input type="text" value="name" onClick="this.setSelectionRange(0, this.value.length)" #newServiceName>
+ <button class="btn btn-xs"
+ (click)="isAddingService=false;
+ descriptor.addService(newServiceName.value);
+ showServices()">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="isAddingService=false">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </div>
+ <div class="panel-body table-responsive" *ngIf="isShowServices()">
<table class="table table-striped table-sm">
<tr *ngFor="let service of descriptor.services">
<td>
<div>
<span><strong>{{ service.name }}</strong></span>
- <span class="clickable glyphicon glyphicon-remove btn btn-xs pull-right"
+ <span class="clickable inline-glyph glyphicon glyphicon-remove btn btn-xs pull-right"
[title]="'Remove ' + service.name"
(click)="onRemoveDescriptorService(service.name)"
data-toggle="tooltip"></span>
</div>
<div>
- <span [class]="'clickable glyhpicon glyphicon-' + (isShowServiceParams(service) ? 'minus' : 'plus')"
+ <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowServiceParams(service) ? 'minus' : 'plus')"
(click)="toggleShowServiceParams(service)"></span>
- <span>Params</span><span> </span><span class="glyphicon glyphicon-plus-sign btn btn-xs" data-toggle="tooltip" title="Add param"></span>
+ <span>Params</span><span> </span>
+ <span *ngIf="!isAddingServiceParam(service)"
+ class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs"
+ (click)="setAddingServiceParam(service,true)"
+ data-toggle="tooltip"
+ title="Add Param"></span>
+ <span *ngIf="isAddingServiceParam(service)"class="inline-editor inlineEditForm">
+ <input type="text" value="name" onClick="this.setSelectionRange(0, this.value.length)" #newParamName>
+ <input type="text" value="value" onClick="this.setSelectionRange(0, this.value.length)" #newParamValue>
+ <button class="btn btn-xs"
+ (click)="setAddingServiceParam(service,false);
+ descriptor.addServiceParam(service, newParamName.value, newParamValue.value);
+ showServiceParams(service)">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="setAddingServiceParam(service,false)">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
</div>
<div class="table-responsive" *ngIf="isShowServiceParams(service)">
<table class="table table-sm" *ngIf="descriptor.getServiceParamNames(service).length > 0">
<tr *ngFor="let paramKey of descriptor.getServiceParamNames(service)">
<td width="5%">
- <span class="clickable glyphicon glyphicon-remove btn btn-xs"
+ <span class="clickable inline-glyph glyphicon glyphicon-remove btn btn-xs"
title="Remove Param"
(click)="onRemoveDescriptorServiceParam(service.name, paramKey)"
data-toggle="tooltip"></span>
@@ -182,15 +248,31 @@
</table>
</div>
<div>
- <span [class]="'clickable glyhpicon glyphicon-' + (isShowServiceURLs(service) ? 'minus' : 'plus')"
+ <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowServiceURLs(service) ? 'minus' : 'plus')"
(click)="toggleShowServiceURLs(service)"></span>
- <span>URLs</span><span> </span><span class="glyphicon glyphicon-plus-sign btn btn-xs" data-toggle="tooltip" title="Add URL"></span>
+ <span>URLs</span><span> </span>
+ <span *ngIf="!isAddingServiceURL(service)"
+ (click)="setAddingServiceURL(service,true)"
+ class="inline-glyph glyphicon glyphicon-plus-sign btn btn-xs"
+ data-toggle="tooltip" title="Add URL"></span>
+ <span *ngIf="isAddingServiceURL(service)"class="inline-editor inlineEditForm">
+ <input type="text" value="url" onClick="this.setSelectionRange(0, this.value.length)" #newURL>
+ <button class="btn btn-xs"
+ (click)="setAddingServiceURL(service,false);
+ descriptor.addServiceURL(service, newURL.value);
+ showServiceURLs(service)">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="setAddingServiceURL(service,false)">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
</div>
<div class="table-responsive" *ngIf="isShowServiceURLs(service)">
<table class="table table-sm" *ngIf="service.urls && service.urls.length > 0">
<tr *ngFor="let url of service.urls; let i = index; trackBy:trackByServiceURLIndex">
<td width="5%">
- <span class="clickable glyphicon glyphicon-remove btn btn-xs"
+ <span class="clickable inline-glyph glyphicon glyphicon-remove btn btn-xs"
title="Remove URL"
(click)="onRemoveDescriptorServiceURL(service.name, url)"
data-toggle="tooltip"></span>
@@ -215,83 +297,88 @@
</td>
</tr>
</table>
- </div>
- </div>
- <br><br>
- <div class="panel panel-default col-md-12">
- <span [class]="'clickable glyhpicon glyphicon-' + (isShowServiceDiscovery() ? 'minus' : 'plus')"
+ </div> <!-- Services table -->
+ </div> <!-- Services panel -->
+
+ <div class="panel panel-default"> <!-- Discovery panel -->
+ <div class="panel-heading">
+ <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowServiceDiscovery() ? 'minus' : 'plus')"
(click)="toggleShowServiceDiscovery()"></span>
<span><strong>Discovery Details</strong></span>
- <div class="col-md-12" *ngIf="isShowServiceDiscovery()">
- <table class="table table-sm">
- <tr>
- <td width="20%"><strong>Address</strong></td>
- <td>
- <span class="inline-editable" (click)="editModeAddress=true" *ngIf="!editModeAddress">{{ descriptor.discoveryAddress }}</span>
- <span *ngIf="editModeAddress" class="inline-editor inlineEditForm">
- <input type="text" size="40" [(ngModel)]="descriptor.discoveryAddress">
- <button class="btn btn-xs" (click)="editModeAddress=false;descriptor.setDirty()">
- <span class="glyphicon glyphicon-ok"></span>
- </button>
- <button class="btn btn-xs" (click)="editModeAddress=false">
- <span class="glyphicon glyphicon-remove"></span>
- </button>
- </span>
- </td>
- </tr>
- <tr>
- <td width="20%"><strong>Cluster</strong></td>
- <td>
- <span class="inline-editable" (click)="editModeCluster=true" *ngIf="!editModeCluster">{{ descriptor.discoveryCluster}}</span>
- <span *ngIf="editModeCluster" class="inline-editor inlineEditForm">
- <input type="text" size="40" [(ngModel)]="descriptor.discoveryCluster">
- <button class="btn btn-xs" (click)="editModeCluster=false;descriptor.setDirty()">
- <span class="glyphicon glyphicon-ok"></span>
- </button>
- <button class="btn btn-xs" (click)="editModeCluster=false">
- <span class="glyphicon glyphicon-remove"></span>
- </button>
- </span>
- </td>
- </tr>
- <tr>
- <td width="20%"><strong>Username</strong></td>
- <td>
- <span *ngIf="!editModeUser"
- class="inline-editable"
- (click)="editModeUser=true">{{(descriptor.discoveryUser) ? descriptor.discoveryUser : '' }}</span>
- <span *ngIf="editModeUser" class="inline-editor inlineEditForm">
- <input type="text" size="40" [(ngModel)]="descriptor.discoveryUser">
- <button class="btn btn-xs" (click)="editModeUser=false;descriptor.setDirty()">
- <span class="glyphicon glyphicon-ok"></span>
- </button>
- <button class="btn btn-xs" (click)="editModeUser=false">
- <span class="glyphicon glyphicon-remove"></span>
- </button>
- </span>
- </td>
- </tr>
- <tr>
- <td width="20%"><strong>Password Alias</strong></td>
- <td>
- <span class="inline-editable"
- (click)="editModeAlias=true"
- *ngIf="!editModeAlias">{{ (descriptor.discoveryPassAlias) ? descriptor.discoveryPassAlias : 'ambari.discovery.password' }}</span>
- <span *ngIf="editModeAlias" class="inline-editor inlineEditForm">
- <input type="text" size="40" [(ngModel)]="descriptor.discoveryPassAlias">
- <button class="btn btn-xs" (click)="editModeAlias=false;descriptor.setDirty()">
- <span class="glyphicon glyphicon-ok"></span>
- </button>
- <button class="btn btn-xs" (click)="editModeAlias=false">
- <span class="glyphicon glyphicon-remove"></span>
- </button>
- </span>
- </td>
- </tr>
- </table>
- </div>
</div>
- </div>
+ <div class="panel-body" *ngIf="isShowServiceDiscovery()">
+ <table class="table table-sm">
+ <tr>
+ <td width="20%"><strong>Address</strong></td>
+ <td>
+ <span class="inline-editable"
+ (click)="editModeAddress=true"
+ *ngIf="!editModeAddress">{{ descriptor.discoveryAddress }}</span>
+ <span *ngIf="editModeAddress" class="inline-editor inlineEditForm">
+ <input type="text" size="40" [(ngModel)]="descriptor.discoveryAddress">
+ <button class="btn btn-xs" (click)="editModeAddress=false;descriptor.setDirty()">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="editModeAddress=false">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="20%"><strong>Cluster</strong></td>
+ <td>
+ <span class="inline-editable"
+ (click)="editModeCluster=true"
+ *ngIf="!editModeCluster">{{ descriptor.discoveryCluster}}</span>
+ <span *ngIf="editModeCluster" class="inline-editor inlineEditForm">
+ <input type="text" size="40" [(ngModel)]="descriptor.discoveryCluster">
+ <button class="btn btn-xs" (click)="editModeCluster=false;descriptor.setDirty()">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="editModeCluster=false">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="20%"><strong>Username</strong></td>
+ <td>
+ <span class="inline-editable"
+ (click)="editModeUser=true"
+ *ngIf="!editModeUser">{{(descriptor.discoveryUser) ? descriptor.discoveryUser : '' }}</span>
+ <span *ngIf="editModeUser" class="inline-editor inlineEditForm">
+ <input type="text" size="40" [(ngModel)]="descriptor.discoveryUser">
+ <button class="btn btn-xs" (click)="editModeUser=false;descriptor.setDirty()">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="editModeUser=false">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <td width="20%"><strong>Password Alias</strong></td>
+ <td>
+ <span class="inline-editable"
+ (click)="editModeAlias=true"
+ *ngIf="!editModeAlias">{{ (descriptor.discoveryPassAlias) ? descriptor.discoveryPassAlias : 'ambari.discovery.password' }}</span>
+ <span *ngIf="editModeAlias" class="inline-editor inlineEditForm">
+ <input type="text" size="40" [(ngModel)]="descriptor.discoveryPassAlias">
+ <button class="btn btn-xs" (click)="editModeAlias=false;descriptor.setDirty()">
+ <span class="glyphicon glyphicon-ok"></span>
+ </button>
+ <button class="btn btn-xs" (click)="editModeAlias=false">
+ <span class="glyphicon glyphicon-remove"></span>
+ </button>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </div><!-- Discovery details -->
+ </div><!-- Discovery panel -->
<div> <!-- Descriptor Modification Buttons -->
<button type="button"
@@ -299,7 +386,7 @@
class="btn btn-default btn-sm pull-left"
(click)="deleteConfirmModal.open('md')"
data-toggle="tooltip">
- <span class="clickable glyphicon glyphicon-trash"></span>
+ <span class="glyphicon glyphicon-trash"></span>
</button>
<span class="pull-right">
<button type="button"
@@ -321,7 +408,7 @@
</button>
</span>
</div>
- </div>
+ </div> <!-- Descriptor Details -->
<div> <!-- Confirmation Modal Dialogs -->
<bs-modal (onClose)="deleteResource()" #deleteConfirmModal>
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/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 0f89d26..52dd09d 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
@@ -446,6 +446,10 @@ export class ResourceDetailComponent implements OnInit {
this[this.resource.name + provider.name + 'ShowParams'] = !this.isShowProviderParams(provider);
}
+ showProviderParams(provider: ProviderConfig) {
+ this[this.resource.name + provider.name + 'ShowParams'] = true;
+ }
+
isShowProviderParams(provider: ProviderConfig): boolean {
return this[this.resource.name + provider.name + 'ShowParams'];
}
@@ -454,6 +458,10 @@ export class ResourceDetailComponent implements OnInit {
this[this.resource.name + 'ShowServices'] = !this.isShowServices();
}
+ showServices() {
+ this[this.resource.name + 'ShowServices'] = true;
+ }
+
isShowServices(): boolean {
return this[this.resource.name + 'ShowServices'];
}
@@ -470,6 +478,10 @@ export class ResourceDetailComponent implements OnInit {
this[this.resource.name + service.name + 'ShowParams'] = !this.isShowServiceParams(service);
}
+ showServiceParams(service: Service) {
+ this[this.resource.name + service.name + 'ShowParams'] = true;
+ }
+
isShowServiceParams(service: Service): boolean {
return this[this.resource.name + service.name + 'ShowParams'];
}
@@ -478,6 +490,10 @@ export class ResourceDetailComponent implements OnInit {
this[this.resource.name + service.name + 'ShowURLs'] = !this.isShowServiceURLs(service);
}
+ showServiceURLs(service: Service) {
+ this[this.resource.name + service.name + 'ShowURLs'] = true;
+ }
+
isShowServiceURLs(service: Service): boolean {
return this[this.resource.name + service.name + 'ShowURLs'];
}
@@ -509,8 +525,50 @@ export class ResourceDetailComponent implements OnInit {
return this[service.name + index + 'EditMode'];
}
+ isAddingServiceParam(service: Service): boolean {
+ return this['addParam' + service.name];
+ }
+
+ setAddingServiceParam(service: Service, value: boolean) {
+ this['addParam' + service.name] = value;
+ }
+
+ isAddingServiceURL(service: Service): boolean {
+ return this['addURL' + service.name];
+ }
+
+ setAddingServiceURL(service: Service, value: boolean) {
+ this['addURL' + service.name] = value;
+ }
+
+ isAddingProviderParam(provider: ProviderConfig): boolean {
+ return this['addParam' + provider.name];
+ }
+
+ setAddingProviderParam(provider: ProviderConfig, value: boolean) {
+ this['addParam' + provider.name] = value;
+ }
+
+ addProvider(name: string, role: string) {
+ let p = new ProviderConfig();
+ p.name = name;
+ p.role = role;
+ this.providers.push(p);
+ this.changedProviders = this.providers;
+ }
+
+ addProviderParam(provider: ProviderConfig, name: string, value: string) {
+ if (!provider.params) {
+ provider.params = {};
+ }
+ provider.params[name] = value;
+ this.changedProviders = this.providers;
+ }
getProviderParamNames(provider: ProviderConfig): string[] {
+ if (!provider.params) {
+ provider.params = {};
+ }
return Object.getOwnPropertyNames(provider.params);
}
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/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 3997290..e46cea2 100644
--- a/gateway-admin-ui/src/app/resource/service.ts
+++ b/gateway-admin-ui/src/app/resource/service.ts
@@ -18,5 +18,5 @@
export class Service {
name: string;
params: Object;
- urls: string[]
+ urls: string[];
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/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 cdf2bd7..f83af6b 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.c33f88beae0a6c65f63f.bundle.js"></script><script type="text/javascript" src="scripts.c50bb762c438ae0f8842.bundle.js"></script><script type="text/javascript" src="main.e8ac70095627bac846b5.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.6fba7504840e56503966.bundle.js"></script><script type="text/javascript" src="scripts.c50bb762c438ae0f8842.bundle.js"></script><script type="text/javascript" src="main.1776646c6234f6c1c793.bundle.js"></script></div></body></html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/knox/blob/c3c0bf74/gateway-applications/src/main/resources/applications/admin-ui/app/inline.6fba7504840e56503966.bundle.js
----------------------------------------------------------------------
diff --git a/gateway-applications/src/main/resources/applications/admin-ui/app/inline.6fba7504840e56503966.bundle.js b/gateway-applications/src/main/resources/applications/admin-ui/app/inline.6fba7504840e56503966.bundle.js
new file mode 100644
index 0000000..ab94a0e
--- /dev/null
+++ b/gateway-applications/src/main/resources/applications/admin-ui/app/inline.6fba7504840e56503966.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:"1776646c6234f6c1c793",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/c3c0bf74/gateway-applications/src/main/resources/applications/admin-ui/app/inline.c33f88beae0a6c65f63f.bundle.js
----------------------------------------------------------------------
diff --git a/gateway-applications/src/main/resources/applications/admin-ui/app/inline.c33f88beae0a6c65f63f.bundle.js b/gateway-applications/src/main/resources/applications/admin-ui/app/inline.c33f88beae0a6c65f63f.bundle.js
deleted file mode 100644
index 9de102a..0000000
--- a/gateway-applications/src/main/resources/applications/admin-ui/app/inline.c33f88beae0a6c65f63f.bundle.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var u,i,f,l=0,s=[];l<r.length;l++)t[i=r[l]]&&s.push(t[i][0]),t[i]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(n&&n(r,c,a);s.length;)s.shift()();if(a)for(l=0;l<a.length;l++)f=o(o.s=a[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],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+""+e+"."+{0:"e8ac70095627bac846b5",1:"aed76669724804835353"}[e]+".chunk.js";var u=setTimeout(i,12e4);function i(){a.onerror=a.onload=null,clearTimeout(u);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chu
nk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=i,c.appendChild(a),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