knox-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kris...@apache.org
Subject [knox] branch master updated: KNOX-1708 - Cleanup admin-ui lint errors
Date Fri, 21 Dec 2018 18:35:15 GMT
This is an automated email from the ASF dual-hosted git repository.

krisden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 9a2404e  KNOX-1708 - Cleanup admin-ui lint errors
9a2404e is described below

commit 9a2404e75eb5fa8b2a779bbb2ae91d8e4a48d0e8
Author: Kevin Risden <krisden@apache.org>
AuthorDate: Fri Dec 21 12:40:00 2018 -0500

    KNOX-1708 - Cleanup admin-ui lint errors
    
    Signed-off-by: Kevin Risden <krisden@apache.org>
---
 gateway-admin-ui/admin-ui/app/app.component.html   |    2 +-
 .../admin-ui/app/app.component.spec.ts             |   38 +-
 gateway-admin-ui/admin-ui/app/app.component.ts     |   38 +-
 gateway-admin-ui/admin-ui/app/app.module.ts        |  118 +--
 .../app/descriptor/descriptor.component.html       |    2 +-
 .../app/descriptor/descriptor.component.spec.ts    |   36 +-
 .../app/descriptor/descriptor.component.ts         |   15 +-
 .../admin-ui/app/gateway-version.component.ts      |    2 +-
 .../admin-ui/app/gateway-version.service.ts        |   27 +-
 gateway-admin-ui/admin-ui/app/gateway-version.ts   |    2 +-
 gateway-admin-ui/admin-ui/app/main.ts              |    4 +-
 .../new-desc-wizard/new-desc-wizard.component.html |  195 ++--
 .../new-desc-wizard.component.spec.ts              |   36 +-
 .../new-desc-wizard/new-desc-wizard.component.ts   |  404 ++++----
 .../provider-config-selector.component.html        |   51 +-
 .../provider-config-selector.component.spec.ts     |   36 +-
 .../provider-config-selector.component.ts          |   83 +-
 .../AnonymousProviderConfig.ts                     |   24 +-
 .../acls-authzn-provider-config.ts                 |   76 +-
 .../authentication-provider-config.ts              |   24 +-
 .../authentication-wizard.ts                       |  144 ++-
 .../provider-config-wizard/authorization-wizard.ts |   66 +-
 .../provider-config-wizard/cas-provider-config.ts  |  148 +--
 .../app/provider-config-wizard/category-wizard.ts  |   28 +-
 .../concat-idassertion-provider-config.ts          |   42 +-
 .../provider-config-wizard/cors-provider-config.ts |  167 ++--
 .../provider-config-wizard/csrf-provider-config.ts |   86 +-
 .../default-idassertion-provider-config.ts         |   90 +-
 .../display-binding-provider-config.ts             |   98 +-
 .../grouplookup-id-assertion-provider-config.ts    |  200 ++--
 .../provider-config-wizard/ha-provider-config.ts   |  181 ++--
 .../app/provider-config-wizard/ha-wizard.ts        |   82 +-
 .../hostmap-provider-wizard.ts                     |   52 +-
 .../identity-assertion-provider-config.ts          |   23 +-
 .../identity-assertion-wizard.ts                   |   96 +-
 .../provider-config-wizard/jwt-provider-config.ts  |   32 +-
 .../kerberos-provider-config.ts                    |  253 +++--
 .../provider-config-wizard/ldap-provider-config.ts |  266 +++---
 .../oauth-provider-config.ts                       |   86 +-
 .../provider-config-wizard/oidc-provider-config.ts |  199 ++--
 .../ordered-param-container.ts                     |   10 +-
 .../provider-config-wizard/pam-provider-config.ts  |  148 +--
 .../preauth-sso-provider-config.ts                 |   56 +-
 .../provider-config-wizard.component.html          |  202 ++--
 .../provider-config-wizard.component.spec.ts       |   36 +-
 .../provider-config-wizard.component.ts            |  678 +++++++------
 .../provider-contributor-wizard.ts                 |   16 +-
 .../regex-idassertion-provider-config.ts           |   98 +-
 .../provider-config-wizard/saml-provider-config.ts |  182 ++--
 .../sso-cookie-provider-config.ts                  |   77 +-
 .../provider-config-wizard/sts-provider-config.ts  |   64 +-
 .../switchcase-idassertion-provider-config.ts      |   88 +-
 .../webappsec-contributor.ts                       |   10 +-
 .../webappsec-provider-config.ts                   |   36 +-
 .../app/provider-config-wizard/webappsec-wizard.ts |  141 ++-
 .../xcontent-type-options-provider-config.ts       |   66 +-
 .../xframeoptions-provider-config.ts               |   70 +-
 .../admin-ui/app/resource-detail/descriptor.ts     |   39 +-
 .../app/resource-detail/provider-config.ts         |    2 +-
 .../resource-detail/resource-detail.component.css  |    5 +-
 .../resource-detail/resource-detail.component.html |  533 ++++++-----
 .../resource-detail.component.spec.ts              |   36 +-
 .../resource-detail/resource-detail.component.ts   | 1001 ++++++++++----------
 .../admin-ui/app/resource/resource.component.html  |   74 +-
 .../app/resource/resource.component.spec.ts        |   36 +-
 .../admin-ui/app/resource/resource.component.ts    |  151 ++-
 .../admin-ui/app/resource/resource.service.ts      |  151 ++-
 gateway-admin-ui/admin-ui/app/resource/service.ts  |    2 +-
 .../app/resourcetypes/resourcetypes.component.html |   28 +-
 .../resourcetypes/resourcetypes.component.spec.ts  |   12 +-
 .../app/resourcetypes/resourcetypes.component.ts   |    4 +-
 .../app/resourcetypes/resourcetypes.service.ts     |    9 +-
 .../admin-ui/app/topology-detail.component.ts      |  202 ++--
 .../admin-ui/app/topology.component.ts             |   41 +-
 gateway-admin-ui/admin-ui/app/topology.service.ts  |  139 +--
 .../admin-ui/app/utils/json-pretty.pipe.ts         |   10 +-
 .../admin-ui/app/utils/tab.component.ts            |   28 +-
 .../admin-ui/app/utils/tabs.component.ts           |   62 +-
 .../admin-ui/app/utils/validation-utils.ts         |  296 +++---
 gateway-admin-ui/admin-ui/app/utils/xml.pipe.ts    |   10 +-
 gateway-admin-ui/admin-ui/assets/sticky-footer.css |    4 +-
 gateway-admin-ui/admin-ui/assets/vkbeautify.js     |  718 +++++++-------
 .../admin-ui/environments/environment.prod.ts      |    2 +-
 .../admin-ui/environments/environment.ts           |    2 +-
 gateway-admin-ui/admin-ui/index.html               |   87 +-
 gateway-admin-ui/admin-ui/main.ts                  |   10 +-
 gateway-admin-ui/admin-ui/styles.css               |    4 +-
 gateway-admin-ui/admin-ui/tsconfig.json            |    5 +-
 gateway-admin-ui/pom.xml                           |    2 -
 gateway-admin-ui/tslint.json                       |   21 +-
 90 files changed, 4616 insertions(+), 4640 deletions(-)

diff --git a/gateway-admin-ui/admin-ui/app/app.component.html b/gateway-admin-ui/admin-ui/app/app.component.html
index b6931b5..f40042c 100644
--- a/gateway-admin-ui/admin-ui/app/app.component.html
+++ b/gateway-admin-ui/admin-ui/app/app.component.html
@@ -1,3 +1,3 @@
 <h1>
-  {{title}}
+    {{title}}
 </h1>
diff --git a/gateway-admin-ui/admin-ui/app/app.component.spec.ts b/gateway-admin-ui/admin-ui/app/app.component.spec.ts
index 211fadf..c5b203c 100644
--- a/gateway-admin-ui/admin-ui/app/app.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/app.component.spec.ts
@@ -1,37 +1,37 @@
 /* tslint:disable:no-unused-variable */
-import { AppComponent } from './app.component';
+import {AppComponent} from './app.component';
 
-import { TestBed } from '@angular/core/testing';
+import {TestBed} from '@angular/core/testing';
 
-import { By }             from '@angular/platform-browser';
+import {By} from '@angular/platform-browser';
 
 ////////  SPECS  /////////////
 
 /// Delete this
 describe('Smoke test', () => {
-  it('should run a passing test', () => {
-    expect(true).toEqual(true, 'should pass');
-  });
+    it('should run a passing test', () => {
+        expect(true).toEqual(true, 'should pass');
+    });
 });
 
 describe('AppComponent with TCB', function () {
-  beforeEach(() => {
-    TestBed.configureTestingModule({declarations: [AppComponent]});
-  });
+    beforeEach(() => {
+        TestBed.configureTestingModule({declarations: [AppComponent]});
+    });
 
-  it('should instantiate component', () => {
-    let fixture = TestBed.createComponent(AppComponent);
-    expect(fixture.componentInstance instanceof AppComponent).toBe(true, 'should create AppComponent');
-  });
+    it('should instantiate component', () => {
+        let fixture = TestBed.createComponent(AppComponent);
+        expect(fixture.componentInstance instanceof AppComponent).toBe(true, 'should create AppComponent');
+    });
 
-  it('should have expected <h1> text', () => {
-    let fixture = TestBed.createComponent(AppComponent);
-    fixture.detectChanges();
+    it('should have expected <h1> text', () => {
+        let fixture = TestBed.createComponent(AppComponent);
+        fixture.detectChanges();
 
-    let h1 = fixture.debugElement.query(el => el.name === 'h1').nativeElement;  // it works
+        let h1 = fixture.debugElement.query(el => el.name === 'h1').nativeElement;  // it works
 
         h1 = fixture.debugElement.query(By.css('h1')).nativeElement;            // preferred
 
-    expect(h1.innerText).toMatch(/angular 2 app/i, '<h1> should say something about "Angular 2 App"');
-  });
+        expect(h1.innerText).toMatch(/angular 2 app/i, '<h1> should say something about "Angular 2 App"');
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/app.component.ts b/gateway-admin-ui/admin-ui/app/app.component.ts
index bff7ec8..195c7e4 100644
--- a/gateway-admin-ui/admin-ui/app/app.component.ts
+++ b/gateway-admin-ui/admin-ui/app/app.component.ts
@@ -14,32 +14,32 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component } from '@angular/core';
-import { TopologyService } from './topology.service';
-import { ResourceTypesService } from './resourcetypes/resourcetypes.service'
+import {Component} from '@angular/core';
+import {TopologyService} from './topology.service';
+import {ResourceTypesService} from './resourcetypes/resourcetypes.service';
 
 @Component({
-    selector: 'resource-management',
+    selector: 'app-resource-management',
     template: `
-      <div class="container-fluid">
-        <div class="row">
-          <div class="col-md-2 col-lg-2">
-            <app-resourcetypes></app-resourcetypes>
-          </div>
-          <div class="col-md-3 col-lg-3">
-            <app-resource></app-resource>
-          </div>
-          <div class="col-md-7 col-lg-7">
-            <app-resource-detail></app-resource-detail>
-          </div>
+        <div class="container-fluid">
+            <div class="row">
+                <div class="col-md-2 col-lg-2">
+                    <app-resourcetypes></app-resourcetypes>
+                </div>
+                <div class="col-md-3 col-lg-3">
+                    <app-resource></app-resource>
+                </div>
+                <div class="col-md-7 col-lg-7">
+                    <app-resource-detail></app-resource-detail>
+                </div>
+            </div>
         </div>
-      </div>
-     `,
+    `,
     providers: [TopologyService, ResourceTypesService]
 })
 
 export class AppComponent {
-    constructor(private topologyService : TopologyService,
+    constructor(private topologyService: TopologyService,
                 private resourcetypesService: ResourceTypesService) {
     }
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/app.module.ts b/gateway-admin-ui/admin-ui/app/app.module.ts
index f15d49c..2521e9f 100644
--- a/gateway-admin-ui/admin-ui/app/app.module.ts
+++ b/gateway-admin-ui/admin-ui/app/app.module.ts
@@ -14,71 +14,71 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { NgModule }      from '@angular/core';
-import { BrowserModule } from '@angular/platform-browser';
-import { HttpClientModule, HttpClientXsrfModule } from "@angular/common/http";
-import { FormsModule } from '@angular/forms';
-import { CustomFormsModule } from 'ng2-validation';
-import { APP_BASE_HREF } from '@angular/common';
+import {NgModule} from '@angular/core';
+import {BrowserModule} from '@angular/platform-browser';
+import {HttpClientModule, HttpClientXsrfModule} from '@angular/common/http';
+import {FormsModule} from '@angular/forms';
+import {CustomFormsModule} from 'ng2-validation';
+import {APP_BASE_HREF} from '@angular/common';
 
-import { AppComponent }  from './app.component';
-import { TopologyService } from './topology.service';
-import { GatewayVersionService } from "./gateway-version.service";
-import { GatewayVersionComponent } from "./gateway-version.component";
-import { TopologyComponent } from "./topology.component";
-import { TopologyDetailComponent } from "./topology-detail.component";
-import { XmlPipe } from './utils/xml.pipe';
-import { JsonPrettyPipe } from './utils/json-pretty.pipe';
-import { TabComponent } from './utils/tab.component';
-import { TabsComponent } from './utils/tabs.component';
-
-import { AceEditorModule } from 'ng2-ace-editor';
-import { BsModalModule } from 'ng2-bs3-modal/ng2-bs3-modal';
-import { ResourcetypesComponent } from './resourcetypes/resourcetypes.component';
-import { ResourceTypesService } from './resourcetypes/resourcetypes.service';
-import { ResourceComponent } from './resource/resource.component';
-import { ResourceService } from './resource/resource.service';
-import { DescriptorComponent } from './descriptor/descriptor.component';
-import { ResourceDetailComponent } from './resource-detail/resource-detail.component';
-import { ProviderConfigSelectorComponent } from './provider-config-selector/provider-config-selector.component';
-import { NewDescWizardComponent } from './new-desc-wizard/new-desc-wizard.component';
-import { ProviderConfigWizardComponent } from './provider-config-wizard/provider-config-wizard.component'
+import {AppComponent} from './app.component';
+import {TopologyService} from './topology.service';
+import {GatewayVersionService} from './gateway-version.service';
+import {GatewayVersionComponent} from './gateway-version.component';
+import {TopologyComponent} from './topology.component';
+import {TopologyDetailComponent} from './topology-detail.component';
+import {XmlPipe} from './utils/xml.pipe';
+import {JsonPrettyPipe} from './utils/json-pretty.pipe';
+import {TabComponent} from './utils/tab.component';
+import {TabsComponent} from './utils/tabs.component';
 
+import {AceEditorModule} from 'ng2-ace-editor';
+import {BsModalModule} from 'ng2-bs3-modal/ng2-bs3-modal';
+import {ResourcetypesComponent} from './resourcetypes/resourcetypes.component';
+import {ResourceTypesService} from './resourcetypes/resourcetypes.service';
+import {ResourceComponent} from './resource/resource.component';
+import {ResourceService} from './resource/resource.service';
+import {DescriptorComponent} from './descriptor/descriptor.component';
+import {ResourceDetailComponent} from './resource-detail/resource-detail.component';
+import {ProviderConfigSelectorComponent} from './provider-config-selector/provider-config-selector.component';
+import {NewDescWizardComponent} from './new-desc-wizard/new-desc-wizard.component';
+import {ProviderConfigWizardComponent} from './provider-config-wizard/provider-config-wizard.component';
 
 @NgModule({
-  imports: [ BrowserModule,
-             HttpClientModule,
-             HttpClientXsrfModule,
-             FormsModule,
-             CustomFormsModule,
-             BsModalModule,
-             AceEditorModule
+    imports: [BrowserModule,
+        HttpClientModule,
+        HttpClientXsrfModule,
+        FormsModule,
+        CustomFormsModule,
+        BsModalModule,
+        AceEditorModule
     ],
-  declarations: [ AppComponent,
-                  TopologyComponent,
-                  TopologyDetailComponent,
-                  GatewayVersionComponent,
-                  XmlPipe,
-                  JsonPrettyPipe,
-                  TabsComponent,
-                  TabComponent,
-                  ResourcetypesComponent,
-                  ResourceComponent,
-                  DescriptorComponent,
-                  ResourceDetailComponent,
-                  ProviderConfigSelectorComponent,
-                  NewDescWizardComponent,
-                  ProviderConfigWizardComponent
+    declarations: [AppComponent,
+        TopologyComponent,
+        TopologyDetailComponent,
+        GatewayVersionComponent,
+        XmlPipe,
+        JsonPrettyPipe,
+        TabsComponent,
+        TabComponent,
+        ResourcetypesComponent,
+        ResourceComponent,
+        DescriptorComponent,
+        ResourceDetailComponent,
+        ProviderConfigSelectorComponent,
+        NewDescWizardComponent,
+        ProviderConfigWizardComponent
     ],
-  providers: [ TopologyService,
-               GatewayVersionService,
-               ResourceComponent,
-               ResourceTypesService,
-               ResourceService,
-               { provide: APP_BASE_HREF, useValue : '/' }
+    providers: [TopologyService,
+        GatewayVersionService,
+        ResourceComponent,
+        ResourceTypesService,
+        ResourceService,
+        {provide: APP_BASE_HREF, useValue: '/'}
     ],
-  bootstrap: [ AppComponent,
-               GatewayVersionComponent
+    bootstrap: [AppComponent,
+        GatewayVersionComponent
     ]
 })
-export class AppModule { }
+export class AppModule {
+}
diff --git a/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.html b/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.html
index 938689f..c4e7fc1 100644
--- a/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.html
+++ b/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.html
@@ -1,3 +1,3 @@
 <p>
-  descriptor works!
+    descriptor works!
 </p>
diff --git a/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.spec.ts b/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.spec.ts
index 8ecf460..850d706 100644
--- a/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.spec.ts
@@ -14,28 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { DescriptorComponent } from './descriptor.component';
+import {DescriptorComponent} from './descriptor.component';
 
 describe('DescriptorComponent', () => {
-  let component: DescriptorComponent;
-  let fixture: ComponentFixture<DescriptorComponent>;
+    let component: DescriptorComponent;
+    let fixture: ComponentFixture<DescriptorComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ DescriptorComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [DescriptorComponent]
+        })
+            .compileComponents();
+    }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(DescriptorComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(DescriptorComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.ts b/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.ts
index 211d7bd..80cd65d 100644
--- a/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.ts
+++ b/gateway-admin-ui/admin-ui/app/descriptor/descriptor.component.ts
@@ -14,18 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit } from '@angular/core';
+import {Component, OnInit} from '@angular/core';
 
 @Component({
-  selector: 'app-descriptor',
-  templateUrl: './descriptor.component.html',
-  styleUrls: ['./descriptor.component.css']
+    selector: 'app-descriptor',
+    templateUrl: './descriptor.component.html',
+    styleUrls: ['./descriptor.component.css']
 })
 export class DescriptorComponent implements OnInit {
 
-  constructor() { }
+    constructor() {
+    }
 
-  ngOnInit() {
-  }
+    ngOnInit() {
+    }
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/gateway-version.component.ts b/gateway-admin-ui/admin-ui/app/gateway-version.component.ts
index 1477225..602e889 100644
--- a/gateway-admin-ui/admin-ui/app/gateway-version.component.ts
+++ b/gateway-admin-ui/admin-ui/app/gateway-version.component.ts
@@ -19,7 +19,7 @@ import {GatewayVersion} from './gateway-version';
 import {GatewayVersionService} from './gateway-version.service';
 
 @Component({
-    selector: 'gateway-version',
+    selector: 'app-gateway-version',
     template: `
         <div *ngIf="gatewayVersion">
             <span class="small"><cite>Version</cite> {{this.gatewayVersion.version}}</span>
diff --git a/gateway-admin-ui/admin-ui/app/gateway-version.service.ts b/gateway-admin-ui/admin-ui/app/gateway-version.service.ts
index 810e669..edba4b1 100644
--- a/gateway-admin-ui/admin-ui/app/gateway-version.service.ts
+++ b/gateway-admin-ui/admin-ui/app/gateway-version.service.ts
@@ -14,39 +14,40 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Injectable }    from '@angular/core';
-import { HttpHeaders, HttpClient } from '@angular/common/http';
+import {Injectable} from '@angular/core';
+import {HttpClient, HttpHeaders} from '@angular/common/http';
 
 import 'rxjs/add/operator/toPromise';
 
-import { GatewayVersion } from './gateway-version';
+import {GatewayVersion} from './gateway-version';
 
 @Injectable()
 export class GatewayVersionService {
 
     private apiUrl = '/gateway/manager/api/v1/version';
 
-    constructor(private http: HttpClient) { }
+    constructor(private http: HttpClient) {
+    }
 
     getVersion(): Promise<GatewayVersion> {
         let headers = new HttpHeaders();
         headers = this.addHeaders(headers);
-        return this.http.get(this.apiUrl, { headers: headers } )
-                        .toPromise()
-                        .then(response => {
-                            return response['ServerVersion'] as GatewayVersion;
-                        })
-                        .catch(this.handleError);
+        return this.http.get(this.apiUrl, {headers: headers})
+            .toPromise()
+            .then(response => {
+                return response['ServerVersion'] as GatewayVersion;
+            })
+            .catch(this.handleError);
     }
 
     addHeaders(headers: HttpHeaders) {
         return headers.append('Accept', 'application/json')
-                      .append('Content-Type', 'application/json')
-                      .append('X-XSRF-Header', 'admin-ui');
+            .append('Content-Type', 'application/json')
+            .append('X-XSRF-Header', 'admin-ui');
     }
 
     private handleError(error: any): Promise<any> {
         console.error('An error occurred', error); // for demo purposes only
         return Promise.reject(error.message || error);
     }
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/gateway-version.ts b/gateway-admin-ui/admin-ui/app/gateway-version.ts
index a674080..a61c586 100644
--- a/gateway-admin-ui/admin-ui/app/gateway-version.ts
+++ b/gateway-admin-ui/admin-ui/app/gateway-version.ts
@@ -17,4 +17,4 @@
 export class GatewayVersion {
     version: string;
     hash: string;
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/main.ts b/gateway-admin-ui/admin-ui/app/main.ts
index df4b6a7..03ea887 100644
--- a/gateway-admin-ui/admin-ui/app/main.ts
+++ b/gateway-admin-ui/admin-ui/app/main.ts
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
 
-import { AppModule } from './app.module';
+import {AppModule} from './app.module';
 
 platformBrowserDynamic().bootstrapModule(AppModule);
diff --git a/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.html b/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.html
index 7a0d19f..68b3122 100644
--- a/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.html
+++ b/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.html
@@ -1,24 +1,26 @@
 <bs-modal (onClose)="onClose()" #newDescriptorModal xmlns="http://www.w3.org/1999/html">
-  <bs-modal-header [showDismiss]="true">
-    <label class="modal-title">Create a New Descriptor</label>
-  </bs-modal-header>
-  <bs-modal-body>
-    <div class="panel-body">
+    <bs-modal-header [showDismiss]="true">
+        <label class="modal-title">Create a New Descriptor</label>
+    </bs-modal-header>
+    <bs-modal-body>
+        <div class="panel-body">
 
-      <div> <!-- Descriptor Name -->
-        <span>
+            <div> <!-- Descriptor Name -->
+                <span>
           <strong>Name</strong> <input type="text" [(ngModel)]="descriptorName">
         </span>
-        <span *ngIf="isMissingDescriptorName()" style="color: red">required</span>
-        <span *ngIf="!isMissingDescriptorName() && !isValidDescriptorName()" style="color: red">invalid</span>
-      </div> <!-- Descriptor Name -->
+                <span *ngIf="isMissingDescriptorName()" style="color: red">required</span>
+                <span *ngIf="!isMissingDescriptorName() && !isValidDescriptorName()"
+                      style="color: red">invalid</span>
+            </div> <!-- Descriptor Name -->
 
-      <br>
+            <br>
 
-      <div> <!-- Provider Config reference -->
-          <span class="col-md-sm pull-left"><strong>Provider Configuration</strong>&nbsp;</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">
+            <div> <!-- Provider Config reference -->
+                <span class="col-md-sm pull-left"><strong>Provider Configuration</strong>&nbsp;</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>
@@ -27,103 +29,108 @@
               <span class="glyphicon glyphicon-remove"></span>
             </button>
           </span>
-          &nbsp;
-          <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>
-        <app-provider-config-selector #choosePC></app-provider-config-selector>
-        <span *ngIf="isMissingProviderConfig()" style="color: red">required</span>
-        <span *ngIf="!isMissingProviderConfig() && !isValidProviderConfig()" style="color: red">invalid</span>
-      </div> <!-- Provider Config reference -->
+                &nbsp;
+                <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>
+                <app-provider-config-selector #choosePC></app-provider-config-selector>
+                <span *ngIf="isMissingProviderConfig()" style="color: red">required</span>
+                <span *ngIf="!isMissingProviderConfig() && !isValidProviderConfig()"
+                      style="color: red">invalid</span>
+            </div> <!-- Provider Config reference -->
 
-      <br>
+            <br>
 
-      <!-- Services -->
-      <div>
+            <!-- Services -->
+            <div>
         <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (this['showServices'] ? 'minus' : 'plus')"
               (click)="toggleBoolean('showServices')"></span>
-        <span (click)="toggleBoolean('showServices')"><strong>Services</strong></span>
-      </div>
-      <div class="panel panel-default col-md-12" *ngIf="this['showServices']">
-            <table>
-                <tr>
-                  <td *ngFor="let col of getServiceDisplayColumns()">
-                    <div *ngFor="let supportedService of col">
-                      <input type="checkbox"
-                             [checked]="isSelected(supportedService)"
-                             (click)="toggleServiceSelected(supportedService)">
-                      {{ supportedService }}
-                    </div>
-                  </td>
-                </tr>
-            </table>
-      </div> <!-- Services -->
+                <span (click)="toggleBoolean('showServices')"><strong>Services</strong></span>
+            </div>
+            <div class="panel panel-default col-md-12" *ngIf="this['showServices']">
+                <table>
+                    <tr>
+                        <td *ngFor="let col of getServiceDisplayColumns()">
+                            <div *ngFor="let supportedService of col">
+                                <input type="checkbox"
+                                       [checked]="isSelected(supportedService)"
+                                       (click)="toggleServiceSelected(supportedService)">
+                                {{ supportedService }}
+                            </div>
+                        </td>
+                    </tr>
+                </table>
+            </div> <!-- Services -->
 
-      <br>
+            <br>
 
-      <!-- Discovery -->
-      <div>
+            <!-- Discovery -->
+            <div>
         <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (this['showDiscovery'] ? 'minus' : 'plus')"
               (click)="toggleBoolean('showDiscovery')"></span>
-        <span (click)="toggleBoolean('showDiscovery')"><strong>Discovery</strong></span>
-      </div>
-      <div class="panel panel-default col-md-12" *ngIf="this['showDiscovery']">
-        <div>
-          <table>
-            <tr>
-              <td><strong>Address</strong></td>
-              <td>
+                <span (click)="toggleBoolean('showDiscovery')"><strong>Discovery</strong></span>
+            </div>
+            <div class="panel panel-default col-md-12" *ngIf="this['showDiscovery']">
+                <div>
+                    <table>
+                        <tr>
+                            <td><strong>Address</strong></td>
+                            <td>
                 <span>
                   <input type="text" [(ngModel)]="descriptor.discoveryAddress">
                 </span>
-                <span *ngIf="!isValidDiscoveryAddress()" style="color: red">invalid</span>
-              </td>
-            </tr>
-            <tr>
-              <td><strong>Cluster</strong></td>
-              <td>
+                                <span *ngIf="!isValidDiscoveryAddress()"
+                                      style="color: red">invalid</span>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td><strong>Cluster</strong></td>
+                            <td>
                 <span>
                   <input type="text" [(ngModel)]="descriptor.discoveryCluster">
                 </span>
-                <span *ngIf="!isValidDiscoveryCluster()" style="color: red">invalid</span>
-              </td>
-            </tr>
-            <tr>
-              <td><strong>Username</strong></td>
-              <td>
+                                <span *ngIf="!isValidDiscoveryCluster()"
+                                      style="color: red">invalid</span>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td><strong>Username</strong></td>
+                            <td>
                 <span>
                   <input type="text" [(ngModel)]="descriptor.discoveryUser">
                 </span>
-              </td>
-            </tr>
-            <tr>
-              <td><strong>Password Alias</strong></td>
-              <td>
+                            </td>
+                        </tr>
+                        <tr>
+                            <td><strong>Password Alias</strong></td>
+                            <td>
                 <span>
                   <input type="text" [(ngModel)]="descriptor.discoveryPassAlias">
                 </span>
-              </td>
-            </tr>
-          </table>
-        </div>
-      </div> <!-- Discovery -->
+                            </td>
+                        </tr>
+                    </table>
+                </div>
+            </div> <!-- Discovery -->
 
-    </div>
-  </bs-modal-body>
-  <bs-modal-footer>
-    <button type="button"
-            class="btn btn-default btn-sm"
-            data-dismiss="newDescriptorModal"
-            (click)="newDescriptorModal.dismiss()">Cancel</button>
-    <button type="button"
-            class="btn btn-primary btn-sm"
-            [disabled]="!validate()"
-            (click)="newDescriptorModal.close()">Ok</button>
-  </bs-modal-footer>
-</bs-modal>
\ No newline at end of file
+        </div>
+    </bs-modal-body>
+    <bs-modal-footer>
+        <button type="button"
+                class="btn btn-default btn-sm"
+                data-dismiss="newDescriptorModal"
+                (click)="newDescriptorModal.dismiss()">Cancel
+        </button>
+        <button type="button"
+                class="btn btn-primary btn-sm"
+                [disabled]="!validate()"
+                (click)="newDescriptorModal.close()">Ok
+        </button>
+    </bs-modal-footer>
+</bs-modal>
diff --git a/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.spec.ts b/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.spec.ts
index b80e628..65f999b 100644
--- a/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.spec.ts
@@ -1,25 +1,25 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { NewDescWizardComponent } from './new-desc-wizard.component';
+import {NewDescWizardComponent} from './new-desc-wizard.component';
 
 describe('NewDescWizardComponent', () => {
-  let component: NewDescWizardComponent;
-  let fixture: ComponentFixture<NewDescWizardComponent>;
+    let component: NewDescWizardComponent;
+    let fixture: ComponentFixture<NewDescWizardComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ NewDescWizardComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [NewDescWizardComponent]
+        })
+            .compileComponents();
+    }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(NewDescWizardComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(NewDescWizardComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.ts b/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.ts
index a19d052..f53f487 100644
--- a/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.ts
+++ b/gateway-admin-ui/admin-ui/app/new-desc-wizard/new-desc-wizard.component.ts
@@ -1,237 +1,237 @@
 import {Component, OnInit, ViewChild} from '@angular/core';
-import {BsModalComponent} from "ng2-bs3-modal";
+import {BsModalComponent} from 'ng2-bs3-modal';
 
-import { ProviderConfigSelectorComponent } from "../provider-config-selector/provider-config-selector.component";
-import {Descriptor} from "../resource-detail/descriptor";
-import {ResourceService} from "../resource/resource.service";
-import {Resource} from "../resource/resource";
-import {ResourceTypesService} from "../resourcetypes/resourcetypes.service";
-import {ValidationUtils} from "../utils/validation-utils";
+import {ProviderConfigSelectorComponent} from '../provider-config-selector/provider-config-selector.component';
+import {Descriptor} from '../resource-detail/descriptor';
+import {ResourceService} from '../resource/resource.service';
+import {Resource} from '../resource/resource';
+import {ResourceTypesService} from '../resourcetypes/resourcetypes.service';
+import {ValidationUtils} from '../utils/validation-utils';
 
 @Component({
-  selector: 'app-new-desc-wizard',
-  templateUrl: './new-desc-wizard.component.html',
-  styleUrls: ['./new-desc-wizard.component.css']
+    selector: 'app-new-desc-wizard',
+    templateUrl: './new-desc-wizard.component.html',
+    styleUrls: ['./new-desc-wizard.component.css']
 })
 export class NewDescWizardComponent implements OnInit {
 
-  // The maximum length of columns in the service selection display
-  private static SERVICE_COLS_MAX_LENGTH = 10;
-
-  // The set of supported services which can be declared in a descriptor
-  private static supportedServices: string[] = [ 'AMBARI',
-                                                 'AMBARIUI',
-                                                 'ATLAS',
-                                                 'ATLAS-API',
-                                                 'DRUID-BROKER',
-                                                 'DRUID-COORDINATOR',
-                                                 'DRUID-COORDINATOR-UI',
-                                                 'DRUID-OVERLORD',
-                                                 'DRUID-OVERLORD-UI',
-                                                 'DRUID-ROUTER',
-                                                 'FALCON',
-                                                 'HBASEUI',
-                                                 'HDFSUI',
-                                                 'HIVE',
-                                                 'JOBTRACKER',
-                                                 'JOBHISTORYUI',
-                                                 'KNOXSSO',
-                                                 'KNOXTOKEN',
-                                                 'LIVYSERVER',
-                                                 'LOGSEARCH',
-                                                 'NAMENODE',
-                                                 'NIFI',
-                                                 'OOZIE',
-                                                 'OOZIEUI',
-                                                 'RANGER',
-                                                 'RANGERUI',
-                                                 'RESOURCEMANAGER',
-                                                 'SOLR',
-                                                 'SPARKHISTORYUI',
-                                                 'STORM',
-                                                 'STORM-LOGVIEWER',
-                                                 'SUPERSET',
-                                                 'WEBHBASE',
-                                                 'WEBHCAT',
-                                                 'WEBHDFS',
-                                                 'YARNUI',
-                                                 'YARNUIV2',
-                                                 'ZEPPELIN',
-                                                 'ZEPPELINUI',
-                                                 'ZEPPELINWS'] ;
-
-  @ViewChild('newDescriptorModal')
-  childModal: BsModalComponent;
-
-  @ViewChild('choosePC')
-  chooseProviderConfigModal: ProviderConfigSelectorComponent;
-
-  resource: Resource;
-
-  descriptorName: string;
-
-  descriptor: Descriptor;
-
-  editModePC: boolean;
-
-  constructor(private resourceTypesService: ResourceTypesService, private resourceService: ResourceService) { }
-
-  ngOnInit() {
-    this.descriptor = new Descriptor();
-  }
-
-  open(size?: string) {
-    this.reset();
-    this.childModal.open(size ? size : 'lg');
-  }
-
-  reset() {
-    this['showDiscovery'] = false;
-    this['showServices'] = true;
-    this.resource = new Resource();
-    this.descriptor = new Descriptor();
-    this.descriptorName = '';
-
-    // Reset any previously-selected services
-    for (let serviceName of NewDescWizardComponent.supportedServices) {
-      if (this.isSelected(serviceName)) {
-        // Clear the service selection
-        this.toggleServiceSelected(serviceName);
-      }
-    }
-  }
-
-  onClose() {
-      // Set the service declarations on the descriptor
-      for (let serviceName of NewDescWizardComponent.supportedServices) {
-          if (this.isSelected(serviceName)) {
-              // Add the selected service to the descriptor
-              this.descriptor.addService(serviceName);
-
-              // Clear the service selection
-              this.toggleServiceSelected(serviceName);
-          }
-      }
-
-      // Identify the new resource
-      let newResource = new Resource();
-      newResource.name = this.descriptorName + '.json';
-
-      // Persist the new descriptor
-      this.resourceService.createResource('Descriptors',
-                                          newResource,
-                                          this.resourceService.serializeDescriptor(this.descriptor, 'json'))
-                          .then(() => {
-                            // Reload the resource list presentation
-                            this.resourceTypesService.selectResourceType('Descriptors');
-
-                            // Set the new descriptor as the selected resource
-                            this.resourceService.getDescriptorResources().then(resources => {
-                              for (let res of resources) {
-                                if (res.name === newResource.name) {
-                                  this.resourceService.selectedResource(res);
-                                  break;
-                                }
-                              }
-                            });
-                          });
-  }
-
-  getServiceDisplayColumns() {
-    let cols = [];
-    let svcCount = NewDescWizardComponent.supportedServices.length;
-    let colCount = svcCount / NewDescWizardComponent.SERVICE_COLS_MAX_LENGTH;
-
-    let svcIndex = 0;
-
-    for (let colIndex = 0 ; colIndex < colCount; colIndex++) {
-      cols[colIndex] = [];
-      for (let j = 0; j < NewDescWizardComponent.SERVICE_COLS_MAX_LENGTH; j++) {
-        cols[colIndex][j] = NewDescWizardComponent.supportedServices[svcIndex++];
-        if (svcIndex >= svcCount) {
-          break;
-        }
-      }
+    // The maximum length of columns in the service selection display
+    private static SERVICE_COLS_MAX_LENGTH = 10;
+
+    // The set of supported services which can be declared in a descriptor
+    private static supportedServices: string[] = ['AMBARI',
+        'AMBARIUI',
+        'ATLAS',
+        'ATLAS-API',
+        'DRUID-BROKER',
+        'DRUID-COORDINATOR',
+        'DRUID-COORDINATOR-UI',
+        'DRUID-OVERLORD',
+        'DRUID-OVERLORD-UI',
+        'DRUID-ROUTER',
+        'FALCON',
+        'HBASEUI',
+        'HDFSUI',
+        'HIVE',
+        'JOBTRACKER',
+        'JOBHISTORYUI',
+        'KNOXSSO',
+        'KNOXTOKEN',
+        'LIVYSERVER',
+        'LOGSEARCH',
+        'NAMENODE',
+        'NIFI',
+        'OOZIE',
+        'OOZIEUI',
+        'RANGER',
+        'RANGERUI',
+        'RESOURCEMANAGER',
+        'SOLR',
+        'SPARKHISTORYUI',
+        'STORM',
+        'STORM-LOGVIEWER',
+        'SUPERSET',
+        'WEBHBASE',
+        'WEBHCAT',
+        'WEBHDFS',
+        'YARNUI',
+        'YARNUIV2',
+        'ZEPPELIN',
+        'ZEPPELINUI',
+        'ZEPPELINWS'];
+
+    @ViewChild('newDescriptorModal')
+    childModal: BsModalComponent;
+
+    @ViewChild('choosePC')
+    chooseProviderConfigModal: ProviderConfigSelectorComponent;
+
+    resource: Resource;
+
+    descriptorName: string;
+
+    descriptor: Descriptor;
+
+    editModePC: boolean;
+
+    constructor(private resourceTypesService: ResourceTypesService, private resourceService: ResourceService) {
     }
 
-    return cols;
-  }
+    ngOnInit() {
+        this.descriptor = new Descriptor();
+    }
 
-  toggleServiceSelected(serviceName: string) {
-    this[serviceName + '_selected'] = !this.isSelected(serviceName)
-  }
+    open(size?: string) {
+        this.reset();
+        this.childModal.open(size ? size : 'lg');
+    }
 
-  isSelected(serviceName: string) {
-    return this[serviceName + '_selected'];
-  }
+    reset() {
+        this['showDiscovery'] = false;
+        this['showServices'] = true;
+        this.resource = new Resource();
+        this.descriptor = new Descriptor();
+        this.descriptorName = '';
+
+        // Reset any previously-selected services
+        for (let serviceName of NewDescWizardComponent.supportedServices) {
+            if (this.isSelected(serviceName)) {
+                // Clear the service selection
+                this.toggleServiceSelected(serviceName);
+            }
+        }
+    }
 
-  toggleBoolean(propertyName: string) {
-      this[propertyName] = !this[propertyName];
-  }
+    onClose() {
+        // Set the service declarations on the descriptor
+        for (let serviceName of NewDescWizardComponent.supportedServices) {
+            if (this.isSelected(serviceName)) {
+                // Add the selected service to the descriptor
+                this.descriptor.addService(serviceName);
 
-  validate(): boolean {
-    let isValid: boolean = true;
+                // Clear the service selection
+                this.toggleServiceSelected(serviceName);
+            }
+        }
 
-    if (this.descriptor) {
+        // Identify the new resource
+        let newResource = new Resource();
+        newResource.name = this.descriptorName + '.json';
+
+        // Persist the new descriptor
+        this.resourceService.createResource('Descriptors',
+            newResource,
+            this.resourceService.serializeDescriptor(this.descriptor, 'json'))
+            .then(() => {
+                // Reload the resource list presentation
+                this.resourceTypesService.selectResourceType('Descriptors');
+
+                // Set the new descriptor as the selected resource
+                this.resourceService.getDescriptorResources().then(resources => {
+                    for (let res of resources) {
+                        if (res.name === newResource.name) {
+                            this.resourceService.selectedResource(res);
+                            break;
+                        }
+                    }
+                });
+            });
+    }
 
-      isValid = isValid && this.isValidDescriptorName();
+    getServiceDisplayColumns() {
+        let cols = [];
+        let svcCount = NewDescWizardComponent.supportedServices.length;
+        let colCount = svcCount / NewDescWizardComponent.SERVICE_COLS_MAX_LENGTH;
+
+        let svcIndex = 0;
+
+        for (let colIndex = 0; colIndex < colCount; colIndex++) {
+            cols[colIndex] = [];
+            for (let j = 0; j < NewDescWizardComponent.SERVICE_COLS_MAX_LENGTH; j++) {
+                cols[colIndex][j] = NewDescWizardComponent.supportedServices[svcIndex++];
+                if (svcIndex >= svcCount) {
+                    break;
+                }
+            }
+        }
+
+        return cols;
+    }
 
-      isValid = isValid && this.isValidProviderConfig();
+    toggleServiceSelected(serviceName: string) {
+        this[serviceName + '_selected'] = !this.isSelected(serviceName);
+    }
+
+    isSelected(serviceName: string) {
+        return this[serviceName + '_selected'];
+    }
 
-      // Validate the discovery address
-      if (this.descriptor.discoveryAddress) {
-        isValid = isValid && this.isValidDiscoveryAddress();
-        isValid = isValid && this.isValidDiscoveryCluster();
-      }
-    } else {
-      isValid = false;
+    toggleBoolean(propertyName: string) {
+        this[propertyName] = !this[propertyName];
     }
 
-    return isValid;
-  }
+    validate(): boolean {
+        let isValid = true;
 
-  isMissingDescriptorName(): boolean {
-    return !ValidationUtils.isValidString(this.descriptorName);
-  }
+        if (this.descriptor) {
 
-  isValidDescriptorName(): boolean {
-    let isValid: boolean = false;
+            isValid = isValid && this.isValidDescriptorName();
 
-    if (!this.isMissingDescriptorName()) {
-      isValid = ValidationUtils.isValidResourceName(this.descriptorName);
+            isValid = isValid && this.isValidProviderConfig();
+
+            // Validate the discovery address
+            if (this.descriptor.discoveryAddress) {
+                isValid = isValid && this.isValidDiscoveryAddress();
+                isValid = isValid && this.isValidDiscoveryCluster();
+            }
+        } else {
+            isValid = false;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    isMissingDescriptorName(): boolean {
+        return !ValidationUtils.isValidString(this.descriptorName);
+    }
+
+    isValidDescriptorName(): boolean {
+        let isValid = false;
 
-  isMissingProviderConfig(): boolean {
-    return (!this.descriptor || !ValidationUtils.isValidString(this.descriptor.providerConfig));
-  }
+        if (!this.isMissingDescriptorName()) {
+            isValid = ValidationUtils.isValidResourceName(this.descriptorName);
+        }
 
-  isValidProviderConfig(): boolean {
-    let isValid: boolean = false;
+        return isValid;
+    }
 
-    if (!this.isMissingProviderConfig()) {
-      isValid = ValidationUtils.isValidResourceName(this.descriptor.providerConfig);
+    isMissingProviderConfig(): boolean {
+        return (!this.descriptor || !ValidationUtils.isValidString(this.descriptor.providerConfig));
     }
 
-    return isValid;
-  }
+    isValidProviderConfig(): boolean {
+        let isValid = false;
+
+        if (!this.isMissingProviderConfig()) {
+            isValid = ValidationUtils.isValidResourceName(this.descriptor.providerConfig);
+        }
 
-  isValidDiscoveryAddress(): boolean {
-    if (this.descriptor.discoveryAddress) {
-      return (ValidationUtils.isValidURL(this.descriptor.discoveryAddress));
-    } else {
-      return true;
+        return isValid;
     }
-  }
 
-  isValidDiscoveryCluster(): boolean {
-    if (this.descriptor.discoveryCluster) {
-      return (ValidationUtils.isValidResourceName(this.descriptor.discoveryCluster));
-    } else {
-      return true;
+    isValidDiscoveryAddress(): boolean {
+        if (this.descriptor.discoveryAddress) {
+            return (ValidationUtils.isValidURL(this.descriptor.discoveryAddress));
+        } else {
+            return true;
+        }
     }
-  }
 
+    isValidDiscoveryCluster(): boolean {
+        if (this.descriptor.discoveryCluster) {
+            return (ValidationUtils.isValidResourceName(this.descriptor.discoveryCluster));
+        } else {
+            return true;
+        }
+    }
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.html b/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.html
index 9a9a5c2..71dd9fe 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.html
+++ b/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.html
@@ -1,25 +1,28 @@
 <bs-modal (onClose)="onClose()" #chooseProviderConfigModal>
-  <bs-modal-header [showDismiss]="true">
-    <label class="modal-title">Choose a Provider Configuration</label>
-  </bs-modal-header>
-  <bs-modal-body>
-    <div class="form-group">
-      <select autofocus required class="md-select form-control" [(ngModel)]="selectedName" id="select" >
-        <option *ngFor="let pc of getProviderConfigs()"
-                class="md-option"
-                [value]="getReferenceName(pc.name)"
-                [selected]="getReferenceName(pc.name) === selectedName">{{getReferenceName(pc.name)}}</option>
-      </select>
-    </div>
-  </bs-modal-body>
-  <bs-modal-footer>
-    <button type="button"
-            class="btn btn-default btn-sm"
-            data-dismiss="chooseProviderConfigModal"
-            (click)="chooseProviderConfigModal.dismiss()">Cancel</button>
-    <button type="button"
-            class="btn btn-primary btn-sm"
-            [disabled]="!selectedName"
-            (click)="chooseProviderConfigModal.close()">Ok</button>
-  </bs-modal-footer>
-</bs-modal>
\ No newline at end of file
+    <bs-modal-header [showDismiss]="true">
+        <label class="modal-title">Choose a Provider Configuration</label>
+    </bs-modal-header>
+    <bs-modal-body>
+        <div class="form-group">
+            <select autofocus required class="md-select form-control" [(ngModel)]="selectedName"
+                    id="select">
+                <option *ngFor="let pc of getProviderConfigs()"
+                        class="md-option"
+                        [value]="getReferenceName(pc.name)"
+                        [selected]="getReferenceName(pc.name) === selectedName">{{getReferenceName(pc.name)}}</option>
+            </select>
+        </div>
+    </bs-modal-body>
+    <bs-modal-footer>
+        <button type="button"
+                class="btn btn-default btn-sm"
+                data-dismiss="chooseProviderConfigModal"
+                (click)="chooseProviderConfigModal.dismiss()">Cancel
+        </button>
+        <button type="button"
+                class="btn btn-primary btn-sm"
+                [disabled]="!selectedName"
+                (click)="chooseProviderConfigModal.close()">Ok
+        </button>
+    </bs-modal-footer>
+</bs-modal>
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.spec.ts b/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.spec.ts
index 33c0710..93c4d6f 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.spec.ts
@@ -1,25 +1,25 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { ProviderConfigSelectorComponent } from './provider-config-selector.component';
+import {ProviderConfigSelectorComponent} from './provider-config-selector.component';
 
 describe('ProviderConfigSelectorComponent', () => {
-  let component: ProviderConfigSelectorComponent;
-  let fixture: ComponentFixture<ProviderConfigSelectorComponent>;
+    let component: ProviderConfigSelectorComponent;
+    let fixture: ComponentFixture<ProviderConfigSelectorComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ ProviderConfigSelectorComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [ProviderConfigSelectorComponent]
+        })
+            .compileComponents();
+    }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(ProviderConfigSelectorComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(ProviderConfigSelectorComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.ts b/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.ts
index d3029f0..9cb2ed9 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-selector/provider-config-selector.component.ts
@@ -14,64 +14,65 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { ResourceService } from "../resource/resource.service";
-import { Resource } from "../resource/resource";
-import { BsModalComponent } from "ng2-bs3-modal";
-import { Descriptor } from "../resource-detail/descriptor";
-import {HttpErrorResponse} from "@angular/common/http";
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {ResourceService} from '../resource/resource.service';
+import {Resource} from '../resource/resource';
+import {BsModalComponent} from 'ng2-bs3-modal';
+import {Descriptor} from '../resource-detail/descriptor';
+import {HttpErrorResponse} from '@angular/common/http';
 
 
 @Component({
-  selector: 'app-provider-config-selector',
-  templateUrl: './provider-config-selector.component.html',
-  styleUrls: ['./provider-config-selector.component.css']
+    selector: 'app-provider-config-selector',
+    templateUrl: './provider-config-selector.component.html',
+    styleUrls: ['./provider-config-selector.component.css']
 })
 export class ProviderConfigSelectorComponent implements OnInit {
 
-  @ViewChild('chooseProviderConfigModal')
-  private childModal: BsModalComponent;
+    @ViewChild('chooseProviderConfigModal')
+    private childModal: BsModalComponent;
 
-  private providerConfigs: Resource[];
+    private providerConfigs: Resource[];
 
-  // The descriptor whose provider configuration reference should be updated as a result of the selection in this component
-  private descriptor: Descriptor;
+    // The descriptor whose provider configuration reference should be updated as a result of the selection in this component
+    private descriptor: Descriptor;
 
-  selectedName: string;
+    selectedName: string;
 
-  constructor(private resourceService: ResourceService) {
-  }
+    constructor(private resourceService: ResourceService) {
+    }
 
-  ngOnInit() {  }
+    ngOnInit() {
+    }
 
-  open(desc: Descriptor, size?: string) {
-    this.descriptor = desc;
-    this.selectedName = desc.providerConfig; // Set the default selection based on the current ref in the descriptor
+    open(desc: Descriptor, size?: string) {
+        this.descriptor = desc;
+        this.selectedName = desc.providerConfig; // Set the default selection based on the current ref in the descriptor
 
-    // Load the available provider configs every time this modal is open
-    this.resourceService.getResources('Provider Configurations')
-                        .then(result => this.providerConfigs = result)
-                        .catch((err: HttpErrorResponse) => console.debug('Error access provider configurations: ' + err));
+        // Load the available provider configs every time this modal is open
+        this.resourceService.getResources('Provider Configurations')
+            .then(result => this.providerConfigs = result)
+            .catch((err: HttpErrorResponse) => console.debug('Error access provider configurations: ' + err));
 
-    this.childModal.open(size);
-  }
+        this.childModal.open(size);
+    }
 
-  onClose() {
-    // Assign the descriptor's provider configuration to the selection
-    this.descriptor.setProviderConfig(this.selectedName);
-  }
+    onClose() {
+        // Assign the descriptor's provider configuration to the selection
+        this.descriptor.setProviderConfig(this.selectedName);
+    }
 
-  getProviderConfigs(): Resource[] {
-    return this.providerConfigs;
-  }
+    getProviderConfigs(): Resource[] {
+        return this.providerConfigs;
+    }
 
-  getReferenceName(providerConfigName: string): string {
-    let refName = providerConfigName;
-    let extIndex = providerConfigName.lastIndexOf('.');
-    if (extIndex > 0) {
-      refName = providerConfigName.substring(0, extIndex);
+    getReferenceName(providerConfigName: string): string {
+        let refName = providerConfigName;
+        let extIndex = providerConfigName.lastIndexOf('.');
+        if (extIndex > 0) {
+            refName = providerConfigName.substring(0, extIndex);
+        }
+        return refName;
     }
-    return refName;
-  }
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/AnonymousProviderConfig.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/AnonymousProviderConfig.ts
index 0d79fd3..b34ec60 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/AnonymousProviderConfig.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/AnonymousProviderConfig.ts
@@ -15,23 +15,23 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
 
 
 export class AnonymousProviderConfig extends AuthenticationProviderConfig {
 
-  private displayBindingPropertyNames: string[] = [];
+    private displayBindingPropertyNames: string[] = [];
 
-  constructor() {
-    super('Anonymous');
-  }
+    constructor() {
+        super('Anonymous');
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return this.displayBindingPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return this.displayBindingPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string): string {
-    return null;
-  }
+    getDisplayNamePropertyBinding(name: string): string {
+        return null;
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/acls-authzn-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/acls-authzn-provider-config.ts
index 16b3f05..4777d67 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/acls-authzn-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/acls-authzn-provider-config.ts
@@ -15,58 +15,58 @@
  * limitations under the License.
  */
 
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export class ACLsAuthznProviderConfig extends DisplayBindingProviderConfig {
 
-  private static MODE_VALUES: string[] = [ 'OR', 'AND' ];
+    private static MODE_VALUES: string[] = ['OR', 'AND'];
 
-  private static DEFAULT_MODE: string = 'Default Mode';
+    private static DEFAULT_MODE = 'Default Mode';
 
-  private static displayPropertyNames: string[] = [ ACLsAuthznProviderConfig.DEFAULT_MODE ];
+    private static displayPropertyNames: string[] = [ACLsAuthznProviderConfig.DEFAULT_MODE];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-                    new Map([ [ACLsAuthznProviderConfig.DEFAULT_MODE, 'acl.mode'] ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([[ACLsAuthznProviderConfig.DEFAULT_MODE, 'acl.mode']]);
 
-  constructor() {
-    super();
-    this.role    = 'authorization';
-    this.name    = 'AclsAuthz';
-    this.enabled = 'true';
-    this.params  = new Map<string, string>();
-  }
+    constructor() {
+        super();
+        this.role = 'authorization';
+        this.name = 'AclsAuthz';
+        this.enabled = 'true';
+        this.params = new Map<string, string>();
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return ACLsAuthznProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return ACLsAuthznProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return ACLsAuthznProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return ACLsAuthznProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
 
-    switch (paramName) {
-      case ACLsAuthznProviderConfig.DEFAULT_MODE:
-        isValid = this.isValidMode();
-        break;
-      default:
-        isValid = true;
+        switch (paramName) {
+            case ACLsAuthznProviderConfig.DEFAULT_MODE:
+                isValid = this.isValidMode();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidMode(): boolean {
+        let isValid = true;
 
-  private isValidMode(): boolean {
-    let isValid: boolean = true;
+        let defaultMode = this.getParam(this.getDisplayNamePropertyBinding(ACLsAuthznProviderConfig.DEFAULT_MODE));
+        if (defaultMode) {
+            isValid = (ACLsAuthznProviderConfig.MODE_VALUES.indexOf(defaultMode.toUpperCase()) > -1);
+        }
 
-    let defaultMode = this.getParam(this.getDisplayNamePropertyBinding(ACLsAuthznProviderConfig.DEFAULT_MODE));
-    if (defaultMode) {
-      isValid = (ACLsAuthznProviderConfig.MODE_VALUES.indexOf(defaultMode.toUpperCase()) > -1);
+        return isValid;
     }
 
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-provider-config.ts
index 931bc2f..5fd2e26 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-provider-config.ts
@@ -15,19 +15,17 @@
  * limitations under the License.
  */
 
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export abstract class AuthenticationProviderConfig extends DisplayBindingProviderConfig {
+    static AUTHENTICATION_ROLE = 'authentication';
+    static FEDERATION_ROLE = 'federation';
 
-  static AUTHENTICATION_ROLE: string = 'authentication';
-  static FEDERATION_ROLE: string     = 'federation';
-
-  constructor(name: string, role?: string) {
-    super();
-    this.role = role ? role : AuthenticationProviderConfig.AUTHENTICATION_ROLE;
-    this.name = name;
-    this.enabled = 'true'; // enable by default
-    this.params = new Map<string, string>();
-  }
-
-}
\ No newline at end of file
+    constructor(name: string, role?: string) {
+        super();
+        this.role = role ? role : AuthenticationProviderConfig.AUTHENTICATION_ROLE;
+        this.name = name;
+        this.enabled = 'true'; // enable by default
+        this.params = new Map<string, string>();
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-wizard.ts
index 0f8ec4f..80fab97 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/authentication-wizard.ts
@@ -15,86 +15,84 @@
  * limitations under the License.
  */
 
-import {CategoryWizard} from "./category-wizard";
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {LDAPProviderConfig} from "./ldap-provider-config";
-import {PAMProviderConfig} from "./pam-provider-config";
-import {KerberosProviderConfig} from "./kerberos-provider-config";
-import {PreAuthSSOProviderConfig} from "./preauth-sso-provider-config";
-import {SSOCookieProviderConfig} from "./sso-cookie-provider-config";
-import {JWTProviderConfig} from "./jwt-provider-config";
-import {CASProviderConfig} from "./cas-provider-config";
-import {SAMLProviderConfig} from "./saml-provider-config";
-import {OIDCProviderConfig} from "./oidc-provider-config";
-import {OAUTHProviderConfig} from "./oauth-provider-config";
-import {AnonymousProviderConfig} from "./AnonymousProviderConfig";
+import {CategoryWizard} from './category-wizard';
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {LDAPProviderConfig} from './ldap-provider-config';
+import {PAMProviderConfig} from './pam-provider-config';
+import {KerberosProviderConfig} from './kerberos-provider-config';
+import {PreAuthSSOProviderConfig} from './preauth-sso-provider-config';
+import {SSOCookieProviderConfig} from './sso-cookie-provider-config';
+import {JWTProviderConfig} from './jwt-provider-config';
+import {CASProviderConfig} from './cas-provider-config';
+import {SAMLProviderConfig} from './saml-provider-config';
+import {OIDCProviderConfig} from './oidc-provider-config';
+import {OAUTHProviderConfig} from './oauth-provider-config';
+import {AnonymousProviderConfig} from './AnonymousProviderConfig';
 
 export class AuthenticationWizard extends CategoryWizard {
+    // Authentication provider types
+    private static AUTH_LDAP = 'LDAP';
+    private static AUTH_PAM = 'PAM';
+    private static AUTH_HADOOP = 'Kerberos';
+    private static AUTH_SSO = 'SSO';
+    private static AUTH_SSO_COOKIE = 'SSO Cookie';
+    private static AUTH_JWT = 'JSON Web Tokens';
+    private static AUTH_CAS = 'CAS';
+    private static AUTH_OAUTH = 'OAuth';
+    private static AUTH_SAML = 'SAML';
+    private static AUTH_OIDC = 'OpenID Connect';
+    private static AUTH_ANONYMOUS = 'Anonymous';
+    private static authTypes: string[] = [AuthenticationWizard.AUTH_LDAP,
+        AuthenticationWizard.AUTH_PAM,
+        AuthenticationWizard.AUTH_HADOOP,
+        AuthenticationWizard.AUTH_SSO,
+        AuthenticationWizard.AUTH_SSO_COOKIE,
+        AuthenticationWizard.AUTH_JWT,
+        AuthenticationWizard.AUTH_CAS,
+        AuthenticationWizard.AUTH_OAUTH,
+        AuthenticationWizard.AUTH_SAML,
+        AuthenticationWizard.AUTH_OIDC,
+        AuthenticationWizard.AUTH_ANONYMOUS
+    ];
 
-  private stepCount: number = 4;
+    private static typeConfigMap: Map<string, typeof AuthenticationProviderConfig> =
+        new Map([[AuthenticationWizard.AUTH_LDAP, LDAPProviderConfig],
+            [AuthenticationWizard.AUTH_PAM, PAMProviderConfig],
+            [AuthenticationWizard.AUTH_HADOOP, KerberosProviderConfig],
+            [AuthenticationWizard.AUTH_SSO, PreAuthSSOProviderConfig],
+            [AuthenticationWizard.AUTH_SSO_COOKIE, SSOCookieProviderConfig],
+            [AuthenticationWizard.AUTH_JWT, JWTProviderConfig],
+            [AuthenticationWizard.AUTH_CAS, CASProviderConfig],
+            [AuthenticationWizard.AUTH_OAUTH, OAUTHProviderConfig],
+            [AuthenticationWizard.AUTH_SAML, SAMLProviderConfig],
+            [AuthenticationWizard.AUTH_OIDC, OIDCProviderConfig],
+            [AuthenticationWizard.AUTH_ANONYMOUS, AnonymousProviderConfig]
+        ] as [string, typeof AuthenticationProviderConfig][]);
 
-  // Authentication provider types
-  private static AUTH_LDAP: string       = 'LDAP';
-  private static AUTH_PAM: string        = 'PAM';
-  private static AUTH_HADOOP: string     = 'Kerberos';
-  private static AUTH_SSO: string        = 'SSO';
-  private static AUTH_SSO_COOKIE: string = 'SSO Cookie';
-  private static AUTH_JWT: string        = 'JSON Web Tokens';
-  private static AUTH_CAS: string        = 'CAS';
-  private static AUTH_OAUTH: string      = 'OAuth';
-  private static AUTH_SAML: string       = 'SAML';
-  private static AUTH_OIDC: string       = 'OpenID Connect';
-  private static AUTH_ANONYMOUS: string  = 'Anonymous';
-  private static authTypes: string[] = [ AuthenticationWizard.AUTH_LDAP,
-                                         AuthenticationWizard.AUTH_PAM,
-                                         AuthenticationWizard.AUTH_HADOOP,
-                                         AuthenticationWizard.AUTH_SSO,
-                                         AuthenticationWizard.AUTH_SSO_COOKIE,
-                                         AuthenticationWizard.AUTH_JWT,
-                                         AuthenticationWizard.AUTH_CAS,
-                                         AuthenticationWizard.AUTH_OAUTH,
-                                         AuthenticationWizard.AUTH_SAML,
-                                         AuthenticationWizard.AUTH_OIDC,
-                                         AuthenticationWizard.AUTH_ANONYMOUS
-                                       ];
+    private stepCount = 4;
 
-  private static typeConfigMap: Map<string, typeof AuthenticationProviderConfig> =
-           new Map([ [AuthenticationWizard.AUTH_LDAP,       LDAPProviderConfig],
-                     [AuthenticationWizard.AUTH_PAM,        PAMProviderConfig],
-                     [AuthenticationWizard.AUTH_HADOOP,     KerberosProviderConfig],
-                     [AuthenticationWizard.AUTH_SSO,        PreAuthSSOProviderConfig],
-                     [AuthenticationWizard.AUTH_SSO_COOKIE, SSOCookieProviderConfig],
-                     [AuthenticationWizard.AUTH_JWT,        JWTProviderConfig],
-                     [AuthenticationWizard.AUTH_CAS,        CASProviderConfig],
-                     [AuthenticationWizard.AUTH_OAUTH,      OAUTHProviderConfig],
-                     [AuthenticationWizard.AUTH_SAML,       SAMLProviderConfig],
-                     [AuthenticationWizard.AUTH_OIDC,       OIDCProviderConfig],
-                     [AuthenticationWizard.AUTH_ANONYMOUS,  AnonymousProviderConfig]
-                   ] as [string, typeof AuthenticationProviderConfig][]);
-
-
-  getTypes(): string[] {
-    return AuthenticationWizard.authTypes;
-  }
+    getTypes(): string[] {
+        return AuthenticationWizard.authTypes;
+    }
 
-  getSteps(): number {
-    return this.stepCount;
-  }
+    getSteps(): number {
+        return this.stepCount;
+    }
 
-  onChange() {
-    let configType = AuthenticationWizard.typeConfigMap.get(this.selectedType);
-    if (configType) {
-      this.providerConfig = Object.create(configType.prototype) as AuthenticationProviderConfig;
-      this.providerConfig.constructor.apply(this.providerConfig);
-      (this.providerConfig as AuthenticationProviderConfig).setType(this.selectedType);
-    } else {
-      console.debug('AuthenticationWizard --> No provider configuration type mapped for ' + this.selectedType);
-      this.providerConfig = null;
+    onChange() {
+        let configType = AuthenticationWizard.typeConfigMap.get(this.selectedType);
+        if (configType) {
+            this.providerConfig = Object.create(configType.prototype) as AuthenticationProviderConfig;
+            this.providerConfig.constructor.apply(this.providerConfig);
+            (this.providerConfig as AuthenticationProviderConfig).setType(this.selectedType);
+        } else {
+            console.debug('AuthenticationWizard --> No provider configuration type mapped for ' + this.selectedType);
+            this.providerConfig = null;
+        }
     }
-  }
 
-  getProviderConfig(): AuthenticationProviderConfig {
-    return (this.providerConfig as AuthenticationProviderConfig);
-  }
+    getProviderConfig(): AuthenticationProviderConfig {
+        return (this.providerConfig as AuthenticationProviderConfig);
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/authorization-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/authorization-wizard.ts
index 2361cbe..5eb7fe4 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/authorization-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/authorization-wizard.ts
@@ -14,48 +14,44 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import {CategoryWizard} from "./category-wizard";
-import {ACLsAuthznProviderConfig} from "./acls-authzn-provider-config";
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {CategoryWizard} from './category-wizard';
+import {ACLsAuthznProviderConfig} from './acls-authzn-provider-config';
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export class AuthorizationWizard extends CategoryWizard {
+    // Authorization provider types
+    private static AUTHZN_ACLS = 'Access Control Lists';
 
-  private stepCount: number = 4;
-
-
-  // Authorization provider types
-  private static AUTHZN_ACLS: string = 'Access Control Lists';
-
-  private static authznTypes: string[] = [ AuthorizationWizard.AUTHZN_ACLS ];
+    private static authznTypes: string[] = [AuthorizationWizard.AUTHZN_ACLS];
 
-  private static typeConfigMap: Map<string, typeof DisplayBindingProviderConfig> =
-                          new Map([
-                                  [AuthorizationWizard.AUTHZN_ACLS, ACLsAuthznProviderConfig]
-                                ] as [string, typeof DisplayBindingProviderConfig][]);
+    private static typeConfigMap: Map<string, typeof DisplayBindingProviderConfig> =
+        new Map([
+            [AuthorizationWizard.AUTHZN_ACLS, ACLsAuthznProviderConfig]
+        ] as [string, typeof DisplayBindingProviderConfig][]);
 
-  getTypes(): string[] {
-    return AuthorizationWizard.authznTypes;
-  }
+    private stepCount = 4;
 
-  getSteps(): number {
-    return this.stepCount;
-  }
+    getTypes(): string[] {
+        return AuthorizationWizard.authznTypes;
+    }
 
-  onChange() {
-    let configType = AuthorizationWizard.typeConfigMap.get(this.selectedType);
-    if (configType) {
-      this.providerConfig = Object.create(configType.prototype) as DisplayBindingProviderConfig;
-      this.providerConfig.constructor.apply(this.providerConfig);
-      (this.providerConfig as DisplayBindingProviderConfig).setType(this.selectedType);
-    } else {
-      console.debug('AuthorizationWizard --> No provider configuration type mapped for ' + this.selectedType);
-      this.providerConfig = null;
+    getSteps(): number {
+        return this.stepCount;
     }
-  }
 
-  getProviderConfig(): DisplayBindingProviderConfig {
-    return (this.providerConfig as DisplayBindingProviderConfig);
-  }
+    onChange() {
+        let configType = AuthorizationWizard.typeConfigMap.get(this.selectedType);
+        if (configType) {
+            this.providerConfig = Object.create(configType.prototype) as DisplayBindingProviderConfig;
+            this.providerConfig.constructor.apply(this.providerConfig);
+            (this.providerConfig as DisplayBindingProviderConfig).setType(this.selectedType);
+        } else {
+            console.debug('AuthorizationWizard --> No provider configuration type mapped for ' + this.selectedType);
+            this.providerConfig = null;
+        }
+    }
 
-}
\ No newline at end of file
+    getProviderConfig(): DisplayBindingProviderConfig {
+        return (this.providerConfig as DisplayBindingProviderConfig);
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/cas-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/cas-provider-config.ts
index 644a0e3..7da8335 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/cas-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/cas-provider-config.ts
@@ -15,86 +15,86 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class CASProviderConfig extends AuthenticationProviderConfig {
 
-  static CALLBACK_URL         = 'Callback URL';
-  static LOGIN_URL            = 'Login URL';
-  static PROTOCOL             = 'Protocol';
-  static COOKIE_DOMAIN_SUFFIX = 'Cookie Domain Suffix';
-
-  private static displayPropertyNames = [ CASProviderConfig.CALLBACK_URL,
-                                          CASProviderConfig.LOGIN_URL,
-                                          CASProviderConfig.PROTOCOL,
-                                          CASProviderConfig.COOKIE_DOMAIN_SUFFIX
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                                        new Map([
-                                          [CASProviderConfig.CALLBACK_URL,         'pac4j.callbackUrl'],
-                                          [CASProviderConfig.COOKIE_DOMAIN_SUFFIX, 'pac4j.cookie.domain.suffix'],
-                                          [CASProviderConfig.LOGIN_URL,            'cas.loginUrl'],
-                                          [CASProviderConfig.PROTOCOL,             'cas.protocol']
-                                        ]);
-
-
-  constructor() {
-    super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return CASProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    return CASProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
-
-    switch (paramName) {
-      case CASProviderConfig.CALLBACK_URL:
-      case CASProviderConfig.LOGIN_URL:
-        isValid = this.isValidURL(paramName);
-        break;
-      case CASProviderConfig.PROTOCOL:
-        isValid = this.isValidProtocol();
-        break;
-      default:
-        isValid = true;
+    static CALLBACK_URL = 'Callback URL';
+    static LOGIN_URL = 'Login URL';
+    static PROTOCOL = 'Protocol';
+    static COOKIE_DOMAIN_SUFFIX = 'Cookie Domain Suffix';
+
+    private static displayPropertyNames = [CASProviderConfig.CALLBACK_URL,
+        CASProviderConfig.LOGIN_URL,
+        CASProviderConfig.PROTOCOL,
+        CASProviderConfig.COOKIE_DOMAIN_SUFFIX
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [CASProviderConfig.CALLBACK_URL, 'pac4j.callbackUrl'],
+            [CASProviderConfig.COOKIE_DOMAIN_SUFFIX, 'pac4j.cookie.domain.suffix'],
+            [CASProviderConfig.LOGIN_URL, 'cas.loginUrl'],
+            [CASProviderConfig.PROTOCOL, 'cas.protocol']
+        ]);
+
+
+    constructor() {
+        super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
+    }
+
+    getDisplayPropertyNames(): string[] {
+        return CASProviderConfig.displayPropertyNames;
     }
 
-    return isValid;
-  }
-
-  private isValidURL(param: string): boolean {
-    let isValid: boolean = true;
-    let url = this.getParam(this.getDisplayNamePropertyBinding(param));
-    if (url) {
-      isValid = ValidationUtils.isValidHttpURL(url);
-      if (!isValid) {
-        console.debug(param + ' value is not a valid URL.');
-      }
+    getDisplayNamePropertyBinding(name: string) {
+        return CASProviderConfig.displayPropertyNameBindings.get(name);
     }
-    return isValid;
-  }
-
-  private isValidProtocol(): boolean {
-    let isValid: boolean = true;
-
-    let protocol = this.getParam(this.getDisplayNamePropertyBinding(CASProviderConfig.PROTOCOL));
-    if (protocol) {
-      isValid = isValid = ValidationUtils.isValidCASProtocol(protocol);
-      if (!isValid) {
-        console.debug(CASProviderConfig.PROTOCOL + ' value is not a valid protocol: ' +
-                      ValidationUtils.CAS_PROTOCOLS.toString());
-      }
+
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
+
+        switch (paramName) {
+            case CASProviderConfig.CALLBACK_URL:
+            case CASProviderConfig.LOGIN_URL:
+                isValid = this.isValidURL(paramName);
+                break;
+            case CASProviderConfig.PROTOCOL:
+                isValid = this.isValidProtocol();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
+    }
+
+    private isValidURL(param: string): boolean {
+        let isValid = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(param));
+        if (url) {
+            isValid = ValidationUtils.isValidHttpURL(url);
+            if (!isValid) {
+                console.debug(param + ' value is not a valid URL.');
+            }
+        }
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidProtocol(): boolean {
+        let isValid = true;
+
+        let protocol = this.getParam(this.getDisplayNamePropertyBinding(CASProviderConfig.PROTOCOL));
+        if (protocol) {
+            isValid = isValid = ValidationUtils.isValidCASProtocol(protocol);
+            if (!isValid) {
+                console.debug(CASProviderConfig.PROTOCOL + ' value is not a valid protocol: ' +
+                    ValidationUtils.CAS_PROTOCOLS.toString());
+            }
+        }
+
+        return isValid;
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/category-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/category-wizard.ts
index 0929c5a..a28e15f 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/category-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/category-wizard.ts
@@ -15,29 +15,29 @@
  * limitations under the License.
  */
 
-import {ProviderConfig} from "../resource-detail/provider-config";
+import {ProviderConfig} from '../resource-detail/provider-config';
 
 export abstract class CategoryWizard {
 
-  selectedType: string;
+    selectedType: string;
 
-  providerConfig: ProviderConfig;
+    providerConfig: ProviderConfig;
 
-  reset() {
-    this.providerConfig = null;
-    this.selectedType   = null;
-  }
+    reset() {
+        this.providerConfig = null;
+        this.selectedType = null;
+    }
 
-  getSelectedType(): string {
-    return this.selectedType;
-  };
+    getSelectedType(): string {
+        return this.selectedType;
+    }
 
-  abstract getTypes(): string[];
+    abstract getTypes(): string[];
 
-  abstract getSteps(): number;
+    abstract getSteps(): number;
 
-  abstract onChange();
+    abstract onChange();
 
-  abstract getProviderConfig(): ProviderConfig;
+    abstract getProviderConfig(): ProviderConfig;
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/concat-idassertion-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/concat-idassertion-provider-config.ts
index 699b715..79d0df2 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/concat-idassertion-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/concat-idassertion-provider-config.ts
@@ -15,33 +15,33 @@
  * limitations under the License.
  */
 
-import {IdentityAssertionProviderConfig} from "./identity-assertion-provider-config";
+import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
 
 export class ConcatAssertionProviderConfig extends IdentityAssertionProviderConfig {
 
-  static PREFIX = 'Prefix';
-  static SUFFIX = 'Suffix';
+    static PREFIX = 'Prefix';
+    static SUFFIX = 'Suffix';
 
-  private static displayPropertyNames = [ ConcatAssertionProviderConfig.PREFIX,
-                                          ConcatAssertionProviderConfig.SUFFIX
-                                        ];
+    private static displayPropertyNames = [ConcatAssertionProviderConfig.PREFIX,
+        ConcatAssertionProviderConfig.SUFFIX
+    ];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-                                        new Map([
-                                          [ConcatAssertionProviderConfig.PREFIX, 'concat.prefix'],
-                                          [ConcatAssertionProviderConfig.SUFFIX, 'concat.suffix']
-                                        ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [ConcatAssertionProviderConfig.PREFIX, 'concat.prefix'],
+            [ConcatAssertionProviderConfig.SUFFIX, 'concat.suffix']
+        ]);
 
-  constructor() {
-    super('Concat');
-  }
+    constructor() {
+        super('Concat');
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return ConcatAssertionProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return ConcatAssertionProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return ConcatAssertionProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return ConcatAssertionProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/cors-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/cors-provider-config.ts
index f3e160b..efb8e84 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/cors-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/cors-provider-config.ts
@@ -14,103 +14,98 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import {ValidationUtils} from "../utils/validation-utils";
-import {WebAppSecurityContributor} from "./webappsec-contributor";
+import {ValidationUtils} from '../utils/validation-utils';
+import {WebAppSecurityContributor} from './webappsec-contributor';
 
 export class CORSProviderConfig extends WebAppSecurityContributor {
+    public static ALLOW_GENERIC_REQUESTS = 'Allow generic requests';
+    public static ALLOWED_ORIGINS = 'Allowed origins';
+    public static ALLOW_SUBDOMAINS = 'Allow sub-domains';
+    public static SUPPORTED_METHODS = 'Supported HTTP methods';
+    public static SUPPORTED_HEADERS = 'Supported HTTP headers';
+    public static EXPOSED_HEADERS = 'Exposed HTTP headers';
+    public static SUPPORTS_CREDS = 'Supports credentials';
+    public static MAX_AGE = 'Access control max age';
+    public static TAG_REQUESTS = 'Request tagging';
 
-  public static TYPE: string = 'cors';
-
-  public static ALLOW_GENERIC_REQUESTS: string = 'Allow generic requests';
-  public static ALLOWED_ORIGINS: string        = 'Allowed origins';
-  public static ALLOW_SUBDOMAINS: string       = 'Allow sub-domains';
-  public static SUPPORTED_METHODS: string      = 'Supported HTTP methods';
-  public static SUPPORTED_HEADERS: string      = 'Supported HTTP headers';
-  public static EXPOSED_HEADERS: string        = 'Exposed HTTP headers';
-  public static SUPPORTS_CREDS: string         = 'Supports credentials';
-  public static MAX_AGE: string                = 'Access control max age';
-  public static TAG_REQUESTS: string           = 'Request tagging';
-
-  private static displayPropertyNames = [ CORSProviderConfig.ALLOW_GENERIC_REQUESTS,
-                                          CORSProviderConfig.ALLOWED_ORIGINS,
-                                          CORSProviderConfig.ALLOW_SUBDOMAINS,
-                                          CORSProviderConfig.SUPPORTED_METHODS,
-                                          CORSProviderConfig.SUPPORTED_HEADERS,
-                                          CORSProviderConfig.EXPOSED_HEADERS,
-                                          CORSProviderConfig.SUPPORTS_CREDS,
-                                          CORSProviderConfig.MAX_AGE,
-                                          CORSProviderConfig.TAG_REQUESTS
-                                        ];
+    private static displayPropertyNames = [CORSProviderConfig.ALLOW_GENERIC_REQUESTS,
+        CORSProviderConfig.ALLOWED_ORIGINS,
+        CORSProviderConfig.ALLOW_SUBDOMAINS,
+        CORSProviderConfig.SUPPORTED_METHODS,
+        CORSProviderConfig.SUPPORTED_HEADERS,
+        CORSProviderConfig.EXPOSED_HEADERS,
+        CORSProviderConfig.SUPPORTS_CREDS,
+        CORSProviderConfig.MAX_AGE,
+        CORSProviderConfig.TAG_REQUESTS
+    ];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([
-      [CORSProviderConfig.ALLOW_GENERIC_REQUESTS, 'cors.allowGenericHttpRequests'],
-      [CORSProviderConfig.ALLOWED_ORIGINS,        'cors.allowOrigin'],
-      [CORSProviderConfig.ALLOW_SUBDOMAINS,       'cors.allowSubdomains'],
-      [CORSProviderConfig.SUPPORTED_METHODS,      'cors.supportedMethods'],
-      [CORSProviderConfig.SUPPORTED_HEADERS,      'cors.supportedHeaders'],
-      [CORSProviderConfig.EXPOSED_HEADERS,        'cors.exposedHeaders'],
-      [CORSProviderConfig.SUPPORTS_CREDS,         'cors.supportsCredentials'],
-      [CORSProviderConfig.MAX_AGE,                'cors.maxAge'],
-      [CORSProviderConfig.TAG_REQUESTS,           'cors.tagRequests']
-    ] as [string, string][]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [CORSProviderConfig.ALLOW_GENERIC_REQUESTS, 'cors.allowGenericHttpRequests'],
+            [CORSProviderConfig.ALLOWED_ORIGINS, 'cors.allowOrigin'],
+            [CORSProviderConfig.ALLOW_SUBDOMAINS, 'cors.allowSubdomains'],
+            [CORSProviderConfig.SUPPORTED_METHODS, 'cors.supportedMethods'],
+            [CORSProviderConfig.SUPPORTED_HEADERS, 'cors.supportedHeaders'],
+            [CORSProviderConfig.EXPOSED_HEADERS, 'cors.exposedHeaders'],
+            [CORSProviderConfig.SUPPORTS_CREDS, 'cors.supportsCredentials'],
+            [CORSProviderConfig.MAX_AGE, 'cors.maxAge'],
+            [CORSProviderConfig.TAG_REQUESTS, 'cors.tagRequests']
+        ] as [string, string][]);
 
 
-  constructor() {
-    super();
-    // Set default values
-    this.setParam('cors.enabled', 'true');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.ALLOW_GENERIC_REQUESTS), 'true');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.ALLOWED_ORIGINS), '*');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.ALLOW_SUBDOMAINS), 'false');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.SUPPORTED_METHODS), 'GET,POST,HEAD,OPTIONS');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.SUPPORTED_HEADERS), '*');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.SUPPORTS_CREDS), 'true');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.MAX_AGE), '-1');
-    this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.TAG_REQUESTS), 'false');
-  }
+    constructor() {
+        super();
+        // Set default values
+        this.setParam('cors.enabled', 'true');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.ALLOW_GENERIC_REQUESTS), 'true');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.ALLOWED_ORIGINS), '*');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.ALLOW_SUBDOMAINS), 'false');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.SUPPORTED_METHODS), 'GET,POST,HEAD,OPTIONS');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.SUPPORTED_HEADERS), '*');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.SUPPORTS_CREDS), 'true');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.MAX_AGE), '-1');
+        this.setParam(CORSProviderConfig.displayPropertyNameBindings.get(CORSProviderConfig.TAG_REQUESTS), 'false');
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return CORSProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return CORSProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string): string {
-    return CORSProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string): string {
+        return CORSProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
 
-    let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
-    switch (paramName) {
-      case CORSProviderConfig.SUPPORTED_METHODS:
-        if (value) {
-          let methodList: string[] = value.split(',');
-          for (let method of methodList) {
-            isValid = isValid && ValidationUtils.isValidHTTPMethod(method.trim().toUpperCase());
-          }
+        let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
+        switch (paramName) {
+            case CORSProviderConfig.SUPPORTED_METHODS:
+                if (value) {
+                    let methodList: string[] = value.split(',');
+                    for (let method of methodList) {
+                        isValid = isValid && ValidationUtils.isValidHTTPMethod(method.trim().toUpperCase());
+                    }
+                }
+                break;
+            case CORSProviderConfig.ALLOW_GENERIC_REQUESTS:
+            case CORSProviderConfig.ALLOW_SUBDOMAINS:
+            case CORSProviderConfig.SUPPORTS_CREDS:
+            case CORSProviderConfig.TAG_REQUESTS:
+                if (value) {
+                    isValid = ValidationUtils.isValidBoolean(value);
+                }
+                break;
+            case CORSProviderConfig.MAX_AGE:
+                isValid = ValidationUtils.isValidSignedNumber(value);
+                break;
+            default:
+                if (value) {
+                    isValid = ValidationUtils.isValidString(value);
+                }
         }
-        break;
-      case CORSProviderConfig.ALLOW_GENERIC_REQUESTS:
-      case CORSProviderConfig.ALLOW_SUBDOMAINS:
-      case CORSProviderConfig.SUPPORTS_CREDS:
-      case CORSProviderConfig.TAG_REQUESTS:
-        if (value) {
-          isValid = ValidationUtils.isValidBoolean(value);
-        }
-        break;
-      case CORSProviderConfig.MAX_AGE:
-        isValid = ValidationUtils.isValidSignedNumber(value);
-        break;
-      default:
-        if (value) {
-          isValid = ValidationUtils.isValidString(value);
-        }
-    }
-
-    return isValid;
-  }
 
+        return isValid;
+    }
 }
 
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/csrf-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/csrf-provider-config.ts
index 7bef2c9..10044e2 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/csrf-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/csrf-provider-config.ts
@@ -15,60 +15,58 @@
  * limitations under the License.
  */
 
-import {ValidationUtils} from "../utils/validation-utils";
-import {WebAppSecurityContributor} from "./webappsec-contributor";
+import {ValidationUtils} from '../utils/validation-utils';
+import {WebAppSecurityContributor} from './webappsec-contributor';
 
 export class CSRFProviderConfig extends WebAppSecurityContributor {
+    public static CUSTOM_HEADER = 'Custom Header';
+    public static METHODS_TO_IGNORE = 'Methods to Ignore';
 
-  public static CUSTOM_HEADER: string     = 'Custom Header';
-  public static METHODS_TO_IGNORE: string = 'Methods to Ignore';
+    private static displayPropertyNames = [CSRFProviderConfig.CUSTOM_HEADER,
+        CSRFProviderConfig.METHODS_TO_IGNORE
+    ];
 
-  private static displayPropertyNames = [ CSRFProviderConfig.CUSTOM_HEADER,
-                                          CSRFProviderConfig.METHODS_TO_IGNORE
-                                        ];
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [CSRFProviderConfig.CUSTOM_HEADER, 'csrf.customHeader'],
+            [CSRFProviderConfig.METHODS_TO_IGNORE, 'csrf.methodsToIgnore']
+        ] as [string, string][]);
 
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([
-      [CSRFProviderConfig.CUSTOM_HEADER,    'csrf.customHeader'],
-      [CSRFProviderConfig.METHODS_TO_IGNORE, 'csrf.methodsToIgnore']
-    ] as [string, string][]);
 
+    constructor() {
+        super();
+        this.setParam('csrf.enabled', 'true');
+        this.setParam(CSRFProviderConfig.displayPropertyNameBindings.get(CSRFProviderConfig.CUSTOM_HEADER), 'X-XSRF-Header');
+        this.setParam(CSRFProviderConfig.displayPropertyNameBindings.get(CSRFProviderConfig.METHODS_TO_IGNORE), 'GET,OPTIONS,HEAD');
+    }
 
-  constructor() {
-    super();
-    this.setParam('csrf.enabled', 'true');
-    this.setParam(CSRFProviderConfig.displayPropertyNameBindings.get(CSRFProviderConfig.CUSTOM_HEADER), 'X-XSRF-Header');
-    this.setParam(CSRFProviderConfig.displayPropertyNameBindings.get(CSRFProviderConfig.METHODS_TO_IGNORE), 'GET,OPTIONS,HEAD');
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return CSRFProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return CSRFProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string): string {
-    return CSRFProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string): string {
+        return CSRFProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
 
-    let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
-    if (value) {
-      switch (paramName) {
-        case CSRFProviderConfig.CUSTOM_HEADER:
-          isValid = ValidationUtils.isValidString(value);
-          break;
-        case CSRFProviderConfig.METHODS_TO_IGNORE:
-          let methodList: string[] = value.split(',');
-          for (let method of methodList) {
-            isValid = isValid && ValidationUtils.isValidHTTPMethod(method.trim().toUpperCase());
-          }
-          break;
-        default:
-      }
+        let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
+        if (value) {
+            switch (paramName) {
+                case CSRFProviderConfig.CUSTOM_HEADER:
+                    isValid = ValidationUtils.isValidString(value);
+                    break;
+                case CSRFProviderConfig.METHODS_TO_IGNORE:
+                    let methodList: string[] = value.split(',');
+                    for (let method of methodList) {
+                        isValid = isValid && ValidationUtils.isValidHTTPMethod(method.trim().toUpperCase());
+                    }
+                    break;
+                default:
+            }
+        }
+        return isValid;
     }
-    return isValid;
-  }
-
 }
 
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/default-idassertion-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/default-idassertion-provider-config.ts
index a4b1830..84a89d8 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/default-idassertion-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/default-idassertion-provider-config.ts
@@ -15,64 +15,64 @@
  * limitations under the License.
  */
 
-import {IdentityAssertionProviderConfig} from "./identity-assertion-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class DefaultIdAssertionProviderConfig extends IdentityAssertionProviderConfig {
 
-  private static PRINCIPAL_MAPPING       = 'Principal Mapping';
-  private static GROUP_PRINCIPAL_MAPPING = 'Group Principal Mapping';
+    private static PRINCIPAL_MAPPING = 'Principal Mapping';
+    private static GROUP_PRINCIPAL_MAPPING = 'Group Principal Mapping';
 
-  private static displayPropertyNames = [ DefaultIdAssertionProviderConfig.PRINCIPAL_MAPPING,
-                                          DefaultIdAssertionProviderConfig.GROUP_PRINCIPAL_MAPPING
-                                        ];
+    private static displayPropertyNames = [DefaultIdAssertionProviderConfig.PRINCIPAL_MAPPING,
+        DefaultIdAssertionProviderConfig.GROUP_PRINCIPAL_MAPPING
+    ];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([
-      [DefaultIdAssertionProviderConfig.PRINCIPAL_MAPPING,       'principal.mapping'],
-      [DefaultIdAssertionProviderConfig.GROUP_PRINCIPAL_MAPPING, 'group.principal.mapping']
-    ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [DefaultIdAssertionProviderConfig.PRINCIPAL_MAPPING, 'principal.mapping'],
+            [DefaultIdAssertionProviderConfig.GROUP_PRINCIPAL_MAPPING, 'group.principal.mapping']
+        ]);
 
-  constructor() {
-    console.debug('new DefaultIdAssertionProviderConfig()');
-    super('Default');
-  }
+    constructor() {
+        console.debug('new DefaultIdAssertionProviderConfig()');
+        super('Default');
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return DefaultIdAssertionProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return DefaultIdAssertionProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return DefaultIdAssertionProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return DefaultIdAssertionProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
 
-    switch (paramName) {
-      case DefaultIdAssertionProviderConfig.PRINCIPAL_MAPPING:
-      case DefaultIdAssertionProviderConfig.GROUP_PRINCIPAL_MAPPING:
-        isValid = this.isValidPrincipalMapping(paramName);
-        break;
-      default:
-        isValid = true;
+        switch (paramName) {
+            case DefaultIdAssertionProviderConfig.PRINCIPAL_MAPPING:
+            case DefaultIdAssertionProviderConfig.GROUP_PRINCIPAL_MAPPING:
+                isValid = this.isValidPrincipalMapping(paramName);
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidPrincipalMapping(param: string) {
+        let isValid = true;
 
-  private isValidPrincipalMapping(param: string) {
-    let isValid: boolean = true;
+        let mapping = this.getParam(this.getDisplayNamePropertyBinding(param));
+        if (mapping) {
+            isValid = ValidationUtils.isValidPrincipalMapping(mapping);
+            if (!isValid) {
+                console.debug(param + ' value is not a valid principal mapping.');
+            }
+        }
 
-    let mapping = this.getParam(this.getDisplayNamePropertyBinding(param));
-    if (mapping) {
-      isValid = ValidationUtils.isValidPrincipalMapping(mapping);
-      if (!isValid) {
-        console.debug(param + ' value is not a valid principal mapping.')
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/display-binding-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/display-binding-provider-config.ts
index 2309122..7d864cf 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/display-binding-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/display-binding-provider-config.ts
@@ -15,72 +15,72 @@
  * limitations under the License.
  */
 
-import {ProviderConfig} from "../resource-detail/provider-config";
+import {ProviderConfig} from '../resource-detail/provider-config';
 
 export abstract class DisplayBindingProviderConfig extends ProviderConfig {
 
-  protected providerType: string;
+    protected providerType: string;
 
-  setType(type: string) {
-    this.providerType = type;
-  }
+    setType(type: string) {
+        this.providerType = type;
+    }
 
-  getType(): string {
-    return this.providerType;
-  }
+    getType(): string {
+        return this.providerType;
+    }
 
-  getName(): string {
-    return this.name;
-  }
+    getName(): string {
+        return this.name;
+    }
 
-  getRole(): string {
-    return this.role;
-  }
+    getRole(): string {
+        return this.role;
+    }
 
-  isEnabled() {
-    return this.enabled;
-  }
+    isEnabled() {
+        return this.enabled;
+    }
 
-  setParam(name: string, value: string) {
-    this.params[name] = value;
-  }
+    setParam(name: string, value: string) {
+        this.params[name] = value;
+    }
 
-  removeParam(name: string): string {
-    let value = this.getParam(name);
-    delete this.params[name];
-    return value;
-  }
+    removeParam(name: string): string {
+        let value = this.getParam(name);
+        delete this.params[name];
+        return value;
+    }
 
-  getParamNames(): string[] {
-    return Object.getOwnPropertyNames(this.params);
-  }
+    getParamNames(): string[] {
+        return Object.getOwnPropertyNames(this.params);
+    }
+
+    getParam(name: string): string {
+        return this.params[name];
+    }
 
-  getParam(name: string): string {
-    return this.params[name];
-  }
+    isPasswordParam(name: string): boolean {
+        return false;
+    }
 
-  isPasswordParam(name: string): boolean {
-    return false;
-  }
+    isValidParamValue(paramName: string) {
+        return true;
+    }
 
-  isValidParamValue(paramName: string) {
-    return true;
-  }
+    isValid(): boolean {
+        let isValid = true;
 
-  isValid(): boolean {
-    let isValid: boolean = true;
+        for (let param of this.getDisplayPropertyNames()) {
+            if (isValid) { // quit if invalid param is discovered
+                isValid = isValid && this.isValidParamValue(param);
+            }
+        }
 
-    for (let param of this.getDisplayPropertyNames()) {
-      if (isValid) { // quit if invalid param is discovered
-        isValid = isValid && this.isValidParamValue(param);
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
-
-  abstract getDisplayPropertyNames(): string[];
+    abstract getDisplayPropertyNames(): string[];
 
-  abstract getDisplayNamePropertyBinding(name: string): string;
+    abstract getDisplayNamePropertyBinding(name: string): string;
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/grouplookup-id-assertion-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/grouplookup-id-assertion-provider-config.ts
index a4aaeb1..c085d48 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/grouplookup-id-assertion-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/grouplookup-id-assertion-provider-config.ts
@@ -15,127 +15,111 @@
  * limitations under the License.
  */
 
-import {IdentityAssertionProviderConfig} from "./identity-assertion-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class GroupLookupAssertionProviderConfig extends IdentityAssertionProviderConfig {
+    private static GROUP_MAPPING = 'Group Mapping';
+    private static URL = 'LDAP URL';
+    private static BIND_USER = 'Bind User';
+    private static BIND_PWD = 'Bind Password';
+    private static USER_SEARCH_FILTER = 'User Search Filter';
+    private static USER_BASE = 'User Search Base';
+    private static GROUP_SEARCH_FILTER = 'Group Search Filter';
+    private static MEMBER_SEARCH_ATTR = 'Group Member Attribute';
+    private static GROUP_SEARCH_ATTR = 'Group Name Attribute';
+
+    private static displayPropertyNames = [GroupLookupAssertionProviderConfig.URL,
+        GroupLookupAssertionProviderConfig.BIND_USER,
+        GroupLookupAssertionProviderConfig.BIND_PWD,
+        GroupLookupAssertionProviderConfig.USER_BASE,
+        GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER,
+        GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER,
+        GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR,
+        GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [GroupLookupAssertionProviderConfig.GROUP_MAPPING, 'hadoop.security.group.mapping'],
+            [GroupLookupAssertionProviderConfig.BIND_USER, 'hadoop.security.group.mapping.ldap.bind.user'],
+            [GroupLookupAssertionProviderConfig.BIND_PWD, 'hadoop.security.group.mapping.ldap.bind.password'],
+            [GroupLookupAssertionProviderConfig.URL, 'hadoop.security.group.mapping.ldap.url'],
+            [GroupLookupAssertionProviderConfig.USER_BASE, 'hadoop.security.group.mapping.ldap.base'],
+            [GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER, 'hadoop.security.group.mapping.ldap.search.filter.user'],
+            [GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER, 'hadoop.security.group.mapping.ldap.search.filter.group'],
+            [GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR, 'hadoop.security.group.mapping.ldap.search.attr.member'],
+            [GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR, 'hadoop.security.group.mapping.ldap.search.attr.group.name']
+        ]);
+
+    constructor() {
+        super('HadoopGroupProvider');
+        this.setParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.GROUP_MAPPING),
+            'org.apache.hadoop.security.LdapGroupsMapping');
+    }
 
-  private static GROUP_MAPPING: string       = 'Group Mapping';
-  private static URL: string                 = 'LDAP URL';
-  private static BIND_USER: string           = 'Bind User';
-  private static BIND_PWD: string            = 'Bind Password';
-  private static USER_SEARCH_FILTER: string  = 'User Search Filter';
-  private static USER_BASE: string           = 'User Search Base';
-  private static GROUP_SEARCH_FILTER: string = 'Group Search Filter';
-  private static MEMBER_SEARCH_ATTR: string  = 'Group Member Attribute';
-  private static GROUP_SEARCH_ATTR: string   = 'Group Name Attribute';
-
-
-  private static displayPropertyNames = [ GroupLookupAssertionProviderConfig.URL,
-                                          GroupLookupAssertionProviderConfig.BIND_USER,
-                                          GroupLookupAssertionProviderConfig.BIND_PWD,
-                                          GroupLookupAssertionProviderConfig.USER_BASE,
-                                          GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER,
-                                          GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER,
-                                          GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR,
-                                          GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([
-      [GroupLookupAssertionProviderConfig.GROUP_MAPPING, 'hadoop.security.group.mapping'],
-      [GroupLookupAssertionProviderConfig.BIND_USER, 'hadoop.security.group.mapping.ldap.bind.user'],
-      [GroupLookupAssertionProviderConfig.BIND_PWD, 'hadoop.security.group.mapping.ldap.bind.password'],
-      [GroupLookupAssertionProviderConfig.URL, 'hadoop.security.group.mapping.ldap.url'],
-      [GroupLookupAssertionProviderConfig.USER_BASE, 'hadoop.security.group.mapping.ldap.base'],
-      [GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER, 'hadoop.security.group.mapping.ldap.search.filter.user'],
-      [GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER, 'hadoop.security.group.mapping.ldap.search.filter.group'],
-      [GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR, 'hadoop.security.group.mapping.ldap.search.attr.member'],
-      [GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR, 'hadoop.security.group.mapping.ldap.search.attr.group.name']
-    ]);
-
-  constructor() {
-    super('HadoopGroupProvider');
-    this.setParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.GROUP_MAPPING),
-                  'org.apache.hadoop.security.LdapGroupsMapping');
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return GroupLookupAssertionProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    return GroupLookupAssertionProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  isPasswordParam(name: string): boolean {
-    return (name === GroupLookupAssertionProviderConfig.BIND_PWD);
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
-
-    switch (paramName) {
-      case GroupLookupAssertionProviderConfig.BIND_USER:
-        isValid = this.isBindUserValid();
-        break;
-      case GroupLookupAssertionProviderConfig.URL:
-        isValid = this.isLdapURLValid();
-        break;
-      case GroupLookupAssertionProviderConfig.BIND_PWD:
-      case GroupLookupAssertionProviderConfig.USER_BASE:
-      case GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER:
-      case GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER:
-      case GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR:
-      case GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR:
-      default:
-        isValid = true;
+    getDisplayPropertyNames(): string[] {
+        return GroupLookupAssertionProviderConfig.displayPropertyNames;
     }
 
-    return isValid;
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return GroupLookupAssertionProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  private isBindUserValid(): boolean {
-    let isValid: boolean = true;
+    isPasswordParam(name: string): boolean {
+        return (name === GroupLookupAssertionProviderConfig.BIND_PWD);
+    }
 
-    let url = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.BIND_USER));
-    if (url) {
-      isValid = ValidationUtils.isValidDNTemplate(url);
-      if (!isValid) {
-        console.debug(GroupLookupAssertionProviderConfig.BIND_USER + ' value is not a valid DN');
-      }
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
+
+        switch (paramName) {
+            case GroupLookupAssertionProviderConfig.BIND_USER:
+                isValid = this.isBindUserValid();
+                break;
+            case GroupLookupAssertionProviderConfig.URL:
+                isValid = this.isLdapURLValid();
+                break;
+            case GroupLookupAssertionProviderConfig.BIND_PWD:
+            case GroupLookupAssertionProviderConfig.USER_BASE:
+            case GroupLookupAssertionProviderConfig.USER_SEARCH_FILTER:
+            case GroupLookupAssertionProviderConfig.GROUP_SEARCH_FILTER:
+            case GroupLookupAssertionProviderConfig.MEMBER_SEARCH_ATTR:
+            case GroupLookupAssertionProviderConfig.GROUP_SEARCH_ATTR:
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isBindUserValid(): boolean {
+        let isValid = true;
 
-  private isLdapURLValid(): boolean {
-    let isValid: boolean = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.BIND_USER));
+        if (url) {
+            isValid = ValidationUtils.isValidDNTemplate(url);
+            if (!isValid) {
+                console.debug(GroupLookupAssertionProviderConfig.BIND_USER + ' value is not a valid DN');
+            }
+        }
 
-    let url = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.URL));
-    if (url) {
-      isValid = ValidationUtils.isValidLdapURL(url);
-      if (!isValid) {
-        console.debug(GroupLookupAssertionProviderConfig.URL+ ' value is not valid.');
-      }
-    } else {
-      isValid = false; // URL must be specified
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isLdapURLValid(): boolean {
+        let isValid = true;
 
-  private isDnTemplateValid(): boolean {
-    let isValid: boolean = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.URL));
+        if (url) {
+            isValid = ValidationUtils.isValidLdapURL(url);
+            if (!isValid) {
+                console.debug(GroupLookupAssertionProviderConfig.URL + ' value is not valid.');
+            }
+        } else {
+            isValid = false; // URL must be specified
+        }
 
-    let dnTemplate = this.getParam(this.getDisplayNamePropertyBinding(GroupLookupAssertionProviderConfig.BIND_USER));
-    if (dnTemplate) {
-      isValid = ValidationUtils.isValidDNTemplate(dnTemplate);
-      if (!isValid) {
-        console.debug(GroupLookupAssertionProviderConfig.BIND_USER + ' value is not valid.');
-      }
+        return isValid;
     }
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-provider-config.ts
index b085412..b39b227 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-provider-config.ts
@@ -15,108 +15,107 @@
  * limitations under the License.
  */
 
-import {ValidationUtils} from "../utils/validation-utils";
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {ValidationUtils} from '../utils/validation-utils';
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export class HaProviderConfig extends DisplayBindingProviderConfig {
+    public static TYPE = 'HaProvider';
+
+    private static ENSEMBLE_REGEXP: RegExp = new RegExp('^([a-zA-Z\\d-.]+:\\d+)(,[a-zA-Z\\d-.]+:\\d+)*$');
+
+    public static SERVICE_NAME = 'Service Name';
+    public static MAX_FAILOVER_ATTEMPTS = 'Failover Atttempts Limit';
+    public static FAILOVER_SLEEP = 'Failover Interval';
+    public static MAX_RETRY_ATTEMPTS = 'Retry Attempts Limit';
+    public static RETRY_SLEEP = 'Retry Interval';
+    public static ZK_ENSEMBLE = 'ZooKeeper Ensemble';
+    public static ZK_NAMESPACE = 'ZooKeeper Namespace';
+
+    private static displayPropertyNames = [HaProviderConfig.SERVICE_NAME,
+        HaProviderConfig.MAX_FAILOVER_ATTEMPTS,
+        HaProviderConfig.FAILOVER_SLEEP,
+        HaProviderConfig.MAX_RETRY_ATTEMPTS,
+        HaProviderConfig.RETRY_SLEEP,
+        HaProviderConfig.ZK_ENSEMBLE,
+        HaProviderConfig.ZK_NAMESPACE
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [HaProviderConfig.SERVICE_NAME, 'serviceName'],
+            [HaProviderConfig.MAX_FAILOVER_ATTEMPTS, 'maxFailoverAttempts'],
+            [HaProviderConfig.FAILOVER_SLEEP, 'failoverSleep'],
+            [HaProviderConfig.MAX_RETRY_ATTEMPTS, 'maxRetryAttempts'],
+            [HaProviderConfig.RETRY_SLEEP, 'retrySleep'],
+            [HaProviderConfig.ZK_ENSEMBLE, 'zookeeperEnsemble'],
+            [HaProviderConfig.ZK_NAMESPACE, 'zookeeperNamespace']
+        ] as [string, string][]);
+
+    constructor() {
+        super();
+        this.setType(HaProviderConfig.TYPE);
+        this.enabled = 'true';
+        this.name = HaProviderConfig.TYPE;
+        this.role = 'ha';
+        this.params = new Map<string, string>();
+    }
 
-  public static TYPE: string = 'HaProvider';
-
-  private static ENSEMBLE_REGEXP: RegExp = new RegExp('^([a-zA-Z\\d-.]+:\\d+)(,[a-zA-Z\\d-.]+:\\d+)*$');
-
-  public static SERVICE_NAME          = 'Service Name';
-  public static MAX_FAILOVER_ATTEMPTS = 'Failover Atttempts Limit';
-  public static FAILOVER_SLEEP        = 'Failover Interval';
-  public static MAX_RETRY_ATTEMPTS    = 'Retry Attempts Limit';
-  public static RETRY_SLEEP           = 'Retry Interval';
-  public static ZK_ENSEMBLE           = 'ZooKeeper Ensemble';
-  public static ZK_NAMESPACE          = 'ZooKeeper Namespace';
-
-  private static displayPropertyNames = [ HaProviderConfig.SERVICE_NAME,
-                                          HaProviderConfig.MAX_FAILOVER_ATTEMPTS,
-                                          HaProviderConfig.FAILOVER_SLEEP,
-                                          HaProviderConfig.MAX_RETRY_ATTEMPTS,
-                                          HaProviderConfig.RETRY_SLEEP,
-                                          HaProviderConfig.ZK_ENSEMBLE,
-                                          HaProviderConfig.ZK_NAMESPACE
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                                        new Map([
-                                          [HaProviderConfig.SERVICE_NAME,          'serviceName'],
-                                          [HaProviderConfig.MAX_FAILOVER_ATTEMPTS, 'maxFailoverAttempts'],
-                                          [HaProviderConfig.FAILOVER_SLEEP,        'failoverSleep'],
-                                          [HaProviderConfig.MAX_RETRY_ATTEMPTS,    'maxRetryAttempts'],
-                                          [HaProviderConfig.RETRY_SLEEP,           'retrySleep'],
-                                          [HaProviderConfig.ZK_ENSEMBLE,           'zookeeperEnsemble'],
-                                          [HaProviderConfig.ZK_NAMESPACE,          'zookeeperNamespace']
-                                        ] as [string, string][]);
-
-  constructor() {
-    super();
-    this.setType(HaProviderConfig.TYPE);
-    this.enabled = 'true';
-    this.name = HaProviderConfig.TYPE;
-    this.role = 'ha';
-    this.params = new Map<string, string>();
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return HaProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string): string {
-    return HaProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
-
-    let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
-
-    switch (paramName) {
-      case HaProviderConfig.SERVICE_NAME:
-        isValid = ValidationUtils.isValidString(value) && !ValidationUtils.isValidNumber(value);
-        break;
-      case HaProviderConfig.ZK_ENSEMBLE:
-        if (value) {
-          isValid = this.isValidZooKeeperEnsemble(value);
-        }
-        break;
-      case HaProviderConfig.ZK_NAMESPACE:
-        if (value) {
-          isValid = ValidationUtils.isValidString(value);
-        }
-        break;
-      default:
-        if (value) {
-          isValid = ValidationUtils.isValidNumber(value);
-        }
+    getDisplayPropertyNames(): string[] {
+        return HaProviderConfig.displayPropertyNames;
     }
 
-    if (!isValid) {
-      console.debug(paramName + ' (' + this.getDisplayNamePropertyBinding(paramName) + ') value is NOT valid: ' + value);
+    getDisplayNamePropertyBinding(name: string): string {
+        return HaProviderConfig.displayPropertyNameBindings.get(name);
     }
 
-    return isValid;
-  }
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
+
+        let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
+
+        switch (paramName) {
+            case HaProviderConfig.SERVICE_NAME:
+                isValid = ValidationUtils.isValidString(value) && !ValidationUtils.isValidNumber(value);
+                break;
+            case HaProviderConfig.ZK_ENSEMBLE:
+                if (value) {
+                    isValid = this.isValidZooKeeperEnsemble(value);
+                }
+                break;
+            case HaProviderConfig.ZK_NAMESPACE:
+                if (value) {
+                    isValid = ValidationUtils.isValidString(value);
+                }
+                break;
+            default:
+                if (value) {
+                    isValid = ValidationUtils.isValidNumber(value);
+                }
+        }
+
+        if (!isValid) {
+            console.debug(paramName + ' (' + this.getDisplayNamePropertyBinding(paramName) + ') value is NOT valid: ' + value);
+        }
+
+        return isValid;
+    }
 
-  private isValidZooKeeperEnsemble(value: string): boolean {
-    let isValid: boolean = HaProviderConfig.ENSEMBLE_REGEXP.test(value);
-    if (isValid) {
-      // Check each hostname for validity
-      let addresses: string[] = value.split(';');
-      for (let address of addresses) {
+    private isValidZooKeeperEnsemble(value: string): boolean {
+        let isValid: boolean = HaProviderConfig.ENSEMBLE_REGEXP.test(value);
         if (isValid) {
-          let hostport: string[] = address.split(':');
-          isValid = isValid && ValidationUtils.isValidHostName(hostport[0]);
-        } else {
-          break;
+            // Check each hostname for validity
+            let addresses: string[] = value.split(';');
+            for (let address of addresses) {
+                if (isValid) {
+                    let hostport: string[] = address.split(':');
+                    isValid = isValid && ValidationUtils.isValidHostName(hostport[0]);
+                } else {
+                    break;
+                }
+            }
         }
-      }
+        return isValid;
     }
-    return isValid;
-  }
 
 }
 
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-wizard.ts
index 45c6030..84f489b 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ha-wizard.ts
@@ -15,59 +15,57 @@
  * limitations under the License.
  */
 
-import {CategoryWizard} from "./category-wizard";
-import {ProviderConfig} from "../resource-detail/provider-config";
-import {ProviderContributorWizard} from "./provider-contributor-wizard";
-import {HaProviderConfig} from "./ha-provider-config";
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {CategoryWizard} from './category-wizard';
+import {ProviderConfig} from '../resource-detail/provider-config';
+import {ProviderContributorWizard} from './provider-contributor-wizard';
+import {HaProviderConfig} from './ha-provider-config';
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export class HaWizard extends CategoryWizard implements ProviderContributorWizard {
+    private static DEFAULT_TYPE = 'Add service';
 
-  private static DEFAULT_TYPE: string = 'Add service';
+    private stepCount = 4;
 
-  private stepCount: number = 4;
-
-  getTypes(): string[] {
-    return [HaWizard.DEFAULT_TYPE];
-  }
+    getTypes(): string[] {
+        return [HaWizard.DEFAULT_TYPE];
+    }
 
-  getSteps(): number {
-    return this.stepCount;
-  }
+    getSteps(): number {
+        return this.stepCount;
+    }
 
-  onChange() {
-    this.providerConfig = this.createNewProviderConfig();
-  }
+    onChange() {
+        this.providerConfig = this.createNewProviderConfig();
+    }
 
-  getProviderConfig(): ProviderConfig {
-    return (this.providerConfig as HaProviderConfig);
-  }
+    getProviderConfig(): ProviderConfig {
+        return (this.providerConfig as HaProviderConfig);
+    }
 
-  getProviderRole(): string {
-    return this.providerConfig.role;
-  }
+    getProviderRole(): string {
+        return this.providerConfig.role;
+    }
 
-  createNewProviderConfig(): ProviderConfig {
-    return new HaProviderConfig();
-  }
+    createNewProviderConfig(): ProviderConfig {
+        return new HaProviderConfig();
+    }
 
-  contribute(target: ProviderConfig) {
-    let svcNameProperty =
-      (this.providerConfig as DisplayBindingProviderConfig).getDisplayNamePropertyBinding(HaProviderConfig.SERVICE_NAME);
-    let serviceName = (this.providerConfig as DisplayBindingProviderConfig).getParam(svcNameProperty);
+    contribute(target: ProviderConfig) {
+        let svcNameProperty =
+            (this.providerConfig as DisplayBindingProviderConfig).getDisplayNamePropertyBinding(HaProviderConfig.SERVICE_NAME);
+        let serviceName = (this.providerConfig as DisplayBindingProviderConfig).getParam(svcNameProperty);
 
-    let paramValue: string = "enabled=true";
+        let paramValue = 'enabled=true';
 
-    for (let propertyName in this.providerConfig.params) {
-      if (propertyName !== svcNameProperty) {
-        let value = (this.providerConfig as DisplayBindingProviderConfig).getParam(propertyName);
-        if (value && value.trim().length > 0) {
-          paramValue += ';' + propertyName + '=' + value;
+        for (let propertyName in this.providerConfig.params) {
+            if (propertyName !== svcNameProperty) {
+                let value = (this.providerConfig as DisplayBindingProviderConfig).getParam(propertyName);
+                if (value && value.trim().length > 0) {
+                    paramValue += ';' + propertyName + '=' + value;
+                }
+            }
         }
-      }
-    }
 
-    (target as DisplayBindingProviderConfig).setParam(serviceName, paramValue);
-  }
-
-}
\ No newline at end of file
+        (target as DisplayBindingProviderConfig).setParam(serviceName, paramValue);
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/hostmap-provider-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/hostmap-provider-wizard.ts
index c0e82ca..8fedb3e 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/hostmap-provider-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/hostmap-provider-wizard.ts
@@ -14,35 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import {CategoryWizard} from "./category-wizard";
-import {ProviderConfig} from "../resource-detail/provider-config";
-
+import {CategoryWizard} from './category-wizard';
+import {ProviderConfig} from '../resource-detail/provider-config';
 
 export class HostMapProviderWizard extends CategoryWizard {
-
-  private stepCount: number = 2;
-
-  getTypes(): string[] {
-    return [];
-  }
-
-  getSteps(): number {
-    return this.stepCount;
-  }
-
-  onChange() {
-    // Nothing to do
-  }
-
-  getProviderConfig(): ProviderConfig {
-    this.providerConfig = new ProviderConfig();
-    this.providerConfig.role = 'hostmap';
-    this.providerConfig.name = 'static';
-    this.providerConfig.enabled = 'true';
-    this.providerConfig.params = new Map<string, string>();
-    return this.providerConfig;
-  }
-
+    private stepCount = 2;
+
+    getTypes(): string[] {
+        return [];
+    }
+
+    getSteps(): number {
+        return this.stepCount;
+    }
+
+    onChange() {
+        // Nothing to do
+    }
+
+    getProviderConfig(): ProviderConfig {
+        this.providerConfig = new ProviderConfig();
+        this.providerConfig.role = 'hostmap';
+        this.providerConfig.name = 'static';
+        this.providerConfig.enabled = 'true';
+        this.providerConfig.params = new Map<string, string>();
+        return this.providerConfig;
+    }
 }
 
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-provider-config.ts
index 2c6abfa..e680865 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-provider-config.ts
@@ -14,19 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export abstract class IdentityAssertionProviderConfig extends DisplayBindingProviderConfig {
+    static ID_ASSERTION_ROLE = 'identity-assertion';
 
-  static ID_ASSERTION_ROLE: string = 'identity-assertion';
-
-  constructor(name: string, role?: string) {
-    super();
-    this.role = role ? role : IdentityAssertionProviderConfig.ID_ASSERTION_ROLE;
-    this.name = name;
-    this.enabled = 'true'; // enable by default
-    this.params  = new Map<string, string>();
-  }
-
-}
\ No newline at end of file
+    constructor(name: string, role?: string) {
+        super();
+        this.role = role ? role : IdentityAssertionProviderConfig.ID_ASSERTION_ROLE;
+        this.name = name;
+        this.enabled = 'true'; // enable by default
+        this.params = new Map<string, string>();
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-wizard.ts
index c704472..c2b8642 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/identity-assertion-wizard.ts
@@ -15,62 +15,60 @@
  * limitations under the License.
  */
 
-import {CategoryWizard} from "./category-wizard";
-import {ProviderConfig} from "../resource-detail/provider-config";
-import {IdentityAssertionProviderConfig} from "./identity-assertion-provider-config";
-import {DefaultIdAssertionProviderConfig} from "./default-idassertion-provider-config";
-import {ConcatAssertionProviderConfig} from "./concat-idassertion-provider-config";
-import {SwitchCaseAssertionProviderConfig} from "./switchcase-idassertion-provider-config";
-import {RegexAssertionProviderConfig} from "./regex-idassertion-provider-config";
-import {GroupLookupAssertionProviderConfig} from "./grouplookup-id-assertion-provider-config";
+import {CategoryWizard} from './category-wizard';
+import {ProviderConfig} from '../resource-detail/provider-config';
+import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
+import {DefaultIdAssertionProviderConfig} from './default-idassertion-provider-config';
+import {ConcatAssertionProviderConfig} from './concat-idassertion-provider-config';
+import {SwitchCaseAssertionProviderConfig} from './switchcase-idassertion-provider-config';
+import {RegexAssertionProviderConfig} from './regex-idassertion-provider-config';
+import {GroupLookupAssertionProviderConfig} from './grouplookup-id-assertion-provider-config';
 
 export class IdentityAssertionWizard extends CategoryWizard {
+    private static DEFAULT = 'Default';
+    private static CONCAT = 'Concatenation';
+    private static SWITCHCASE = 'SwitchCase';
+    private static REGEXP = 'Regular Expression';
+    private static GROUP_LOOKUP = 'Hadoop Group Lookup (LDAP)';
 
-  private stepCount: number = 4;
+    private static assertionTypes: string[] = [IdentityAssertionWizard.DEFAULT,
+        IdentityAssertionWizard.CONCAT,
+        IdentityAssertionWizard.SWITCHCASE,
+        IdentityAssertionWizard.REGEXP,
+        IdentityAssertionWizard.GROUP_LOOKUP
+    ];
 
-  private static DEFAULT: string      = 'Default';
-  private static CONCAT: string       = 'Concatenation';
-  private static SWITCHCASE: string   = 'SwitchCase';
-  private static REGEXP: string       = 'Regular Expression';
-  private static GROUP_LOOKUP: string = 'Hadoop Group Lookup (LDAP)';
+    private static typeConfigMap: Map<string, typeof IdentityAssertionProviderConfig> =
+        new Map([[IdentityAssertionWizard.DEFAULT, DefaultIdAssertionProviderConfig],
+            [IdentityAssertionWizard.CONCAT, ConcatAssertionProviderConfig],
+            [IdentityAssertionWizard.SWITCHCASE, SwitchCaseAssertionProviderConfig],
+            [IdentityAssertionWizard.REGEXP, RegexAssertionProviderConfig],
+            [IdentityAssertionWizard.GROUP_LOOKUP, GroupLookupAssertionProviderConfig],
+        ] as [string, typeof IdentityAssertionProviderConfig][]);
 
-  private static assertionTypes: string[] = [ IdentityAssertionWizard.DEFAULT,
-                                              IdentityAssertionWizard.CONCAT,
-                                              IdentityAssertionWizard.SWITCHCASE,
-                                              IdentityAssertionWizard.REGEXP,
-                                              IdentityAssertionWizard.GROUP_LOOKUP
-                                            ];
+    private stepCount = 4;
 
-  private static typeConfigMap: Map<string, typeof IdentityAssertionProviderConfig> =
-                        new Map([ [IdentityAssertionWizard.DEFAULT,      DefaultIdAssertionProviderConfig],
-                                  [IdentityAssertionWizard.CONCAT,       ConcatAssertionProviderConfig],
-                                  [IdentityAssertionWizard.SWITCHCASE,   SwitchCaseAssertionProviderConfig],
-                                  [IdentityAssertionWizard.REGEXP,       RegexAssertionProviderConfig],
-                                  [IdentityAssertionWizard.GROUP_LOOKUP, GroupLookupAssertionProviderConfig],
-                                ] as [string, typeof IdentityAssertionProviderConfig][]);
-
-  getTypes(): string[] {
-    return IdentityAssertionWizard.assertionTypes;
-  }
-
-  getSteps(): number {
-    return this.stepCount;
-  }
+    getTypes(): string[] {
+        return IdentityAssertionWizard.assertionTypes;
+    }
 
-  onChange() {
-    let configType = IdentityAssertionWizard.typeConfigMap.get(this.selectedType);
-    if (configType) {
-      this.providerConfig = Object.create(configType.prototype) as IdentityAssertionProviderConfig;
-      this.providerConfig.constructor.apply(this.providerConfig);
-      (this.providerConfig as IdentityAssertionProviderConfig).setType(this.selectedType);
-    } else {
-      console.debug('IdentityAssertionWizard --> No provider configuration type mapped for ' + this.selectedType);
-      this.providerConfig = null;
+    getSteps(): number {
+        return this.stepCount;
     }
-  }
 
-  getProviderConfig(): ProviderConfig {
-    return (this.providerConfig as IdentityAssertionProviderConfig);
-  }
+    onChange() {
+        let configType = IdentityAssertionWizard.typeConfigMap.get(this.selectedType);
+        if (configType) {
+            this.providerConfig = Object.create(configType.prototype) as IdentityAssertionProviderConfig;
+            this.providerConfig.constructor.apply(this.providerConfig);
+            (this.providerConfig as IdentityAssertionProviderConfig).setType(this.selectedType);
+        } else {
+            console.debug('IdentityAssertionWizard --> No provider configuration type mapped for ' + this.selectedType);
+            this.providerConfig = null;
+        }
+    }
 
-}
\ No newline at end of file
+    getProviderConfig(): ProviderConfig {
+        return (this.providerConfig as IdentityAssertionProviderConfig);
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/jwt-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/jwt-provider-config.ts
index 3f91fa1..89d4e83 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/jwt-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/jwt-provider-config.ts
@@ -15,29 +15,29 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
 
 export class JWTProviderConfig extends AuthenticationProviderConfig {
 
-  static KNOXTOKEN_AUDIENCES  = 'KnoxToken Audiences';
+    static KNOXTOKEN_AUDIENCES = 'KnoxToken Audiences';
 
-  private static displayPropertyNames = [ JWTProviderConfig.KNOXTOKEN_AUDIENCES ];
+    private static displayPropertyNames = [JWTProviderConfig.KNOXTOKEN_AUDIENCES];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([ [JWTProviderConfig.KNOXTOKEN_AUDIENCES, 'knox.token.audiences'] ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([[JWTProviderConfig.KNOXTOKEN_AUDIENCES, 'knox.token.audiences']]);
 
 
-  constructor() {
-    console.debug('new JWTProviderConfig()');
-    super('JWTProvider', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
+    constructor() {
+        console.debug('new JWTProviderConfig()');
+        super('JWTProvider', AuthenticationProviderConfig.FEDERATION_ROLE);
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return JWTProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return JWTProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return JWTProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return JWTProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/kerberos-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/kerberos-provider-config.ts
index dff3124..37c2dda 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/kerberos-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/kerberos-provider-config.ts
@@ -15,143 +15,142 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class KerberosProviderConfig extends AuthenticationProviderConfig {
 
-  static CONFIG_PREFIX    = 'Config Prefix';
-  static SIG_SECRET       = 'Signature Secret';
-  static TYPE             = 'Type';
-  static ANON_ALLOWED     = 'Allow Anonymous';
-  static TOKEN_VALIDITY   = 'Token Expiration';
-  static COOKIE_DOMAIN    = 'Domain';
-  static COOKIE_PATH      = 'Path';
-  static KRB_PRINCIPAL    = 'Principal';
-  static KRB_KEYTAB       = 'KeyTab';
-  static KRB_RULES        = 'Name Rules';
-
-  private static displayPropertyNames = [ KerberosProviderConfig.CONFIG_PREFIX,
-                                          KerberosProviderConfig.SIG_SECRET,
-                                          KerberosProviderConfig.ANON_ALLOWED,
-                                          KerberosProviderConfig.TOKEN_VALIDITY,
-                                          KerberosProviderConfig.COOKIE_DOMAIN,
-                                          KerberosProviderConfig.COOKIE_PATH,
-                                          KerberosProviderConfig.KRB_PRINCIPAL,
-                                          KerberosProviderConfig.KRB_KEYTAB,
-                                          KerberosProviderConfig.KRB_RULES
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                                        new Map([
-                                          [KerberosProviderConfig.CONFIG_PREFIX,  'config.prefix'],
-                                          [KerberosProviderConfig.SIG_SECRET,     'signature.secret'],
-                                          [KerberosProviderConfig.TYPE,           'type'],
-                                          [KerberosProviderConfig.ANON_ALLOWED,   'simple.anonymous.allowed'],
-                                          [KerberosProviderConfig.TOKEN_VALIDITY, 'token.validity'],
-                                          [KerberosProviderConfig.COOKIE_DOMAIN,  'cookie.domain'],
-                                          [KerberosProviderConfig.COOKIE_PATH,    'cookie.path'],
-                                          [KerberosProviderConfig.KRB_PRINCIPAL,  'kerberos.principal'],
-                                          [KerberosProviderConfig.KRB_KEYTAB,     'kerberos.keytab'],
-                                          [KerberosProviderConfig.KRB_RULES,      'kerberos.name.rules']
-                                        ]);
-
-
-  constructor() {
-    super('HadoopAuth');
-    this.setParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.CONFIG_PREFIX), 'hadoop.auth.config');
-    this.setParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.TYPE), 'kerberos');
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return KerberosProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    let propName: string;
-    if (name === KerberosProviderConfig.CONFIG_PREFIX) {
-      propName = KerberosProviderConfig.displayPropertyNameBindings.get(name);
-    } else {
-      let prefix = this.getParam(KerberosProviderConfig.displayPropertyNameBindings.get(KerberosProviderConfig.CONFIG_PREFIX));
-      if (prefix) {
-        propName = prefix + '.' + KerberosProviderConfig.displayPropertyNameBindings.get(name);
-      } else {
-        propName = KerberosProviderConfig.displayPropertyNameBindings.get(name);
-      }
+    static CONFIG_PREFIX = 'Config Prefix';
+    static SIG_SECRET = 'Signature Secret';
+    static TYPE = 'Type';
+    static ANON_ALLOWED = 'Allow Anonymous';
+    static TOKEN_VALIDITY = 'Token Expiration';
+    static COOKIE_DOMAIN = 'Domain';
+    static COOKIE_PATH = 'Path';
+    static KRB_PRINCIPAL = 'Principal';
+    static KRB_KEYTAB = 'KeyTab';
+    static KRB_RULES = 'Name Rules';
+
+    private static displayPropertyNames = [KerberosProviderConfig.CONFIG_PREFIX,
+        KerberosProviderConfig.SIG_SECRET,
+        KerberosProviderConfig.ANON_ALLOWED,
+        KerberosProviderConfig.TOKEN_VALIDITY,
+        KerberosProviderConfig.COOKIE_DOMAIN,
+        KerberosProviderConfig.COOKIE_PATH,
+        KerberosProviderConfig.KRB_PRINCIPAL,
+        KerberosProviderConfig.KRB_KEYTAB,
+        KerberosProviderConfig.KRB_RULES
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [KerberosProviderConfig.CONFIG_PREFIX, 'config.prefix'],
+            [KerberosProviderConfig.SIG_SECRET, 'signature.secret'],
+            [KerberosProviderConfig.TYPE, 'type'],
+            [KerberosProviderConfig.ANON_ALLOWED, 'simple.anonymous.allowed'],
+            [KerberosProviderConfig.TOKEN_VALIDITY, 'token.validity'],
+            [KerberosProviderConfig.COOKIE_DOMAIN, 'cookie.domain'],
+            [KerberosProviderConfig.COOKIE_PATH, 'cookie.path'],
+            [KerberosProviderConfig.KRB_PRINCIPAL, 'kerberos.principal'],
+            [KerberosProviderConfig.KRB_KEYTAB, 'kerberos.keytab'],
+            [KerberosProviderConfig.KRB_RULES, 'kerberos.name.rules']
+        ]);
+
+
+    constructor() {
+        super('HadoopAuth');
+        this.setParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.CONFIG_PREFIX), 'hadoop.auth.config');
+        this.setParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.TYPE), 'kerberos');
     }
-    return propName;
-  }
-
-  isPasswordParam(name: string): boolean {
-    return (name === KerberosProviderConfig.SIG_SECRET);
-  }
-
-  setParam(name: string, value: string) {
-    console.debug('KerberosProviderConfig --> setParam(' + name + ', ' + value + ')'); // TODO: PJZ: DELETE ME
-    if (name === this.getDisplayNamePropertyBinding(KerberosProviderConfig.CONFIG_PREFIX)) {
-      // If the config prefix property has changed, then the properties need to be modified accordingly
-      let prevPrefix = this.getParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.CONFIG_PREFIX));
-      if (value !== prevPrefix) {
-        // Iterate over those properties which have already been set
-        for (let propName of this.getParamNames()) {
-          console.debug('\tPrevious property ' + propName);
-          if (propName.startsWith(prevPrefix)) { // If the property name includes the previous config prefix
-            let suffix = propName.substring(prevPrefix.length + 1); // prefix + '.'
-            let newPropName = value + '.' + suffix;
-            this.setParam(newPropName, this.getParam(propName));
-            console.debug('\tRenamed ' + propName + ' to ' + newPropName + ' because config prefix changed.');
-            this.removeParam(propName);
-            console.debug('\tDeleted ' + propName + ' because config prefix changed.');
-          }
+
+    getDisplayPropertyNames(): string[] {
+        return KerberosProviderConfig.displayPropertyNames;
+    }
+
+    getDisplayNamePropertyBinding(name: string) {
+        let propName: string;
+        if (name === KerberosProviderConfig.CONFIG_PREFIX) {
+            propName = KerberosProviderConfig.displayPropertyNameBindings.get(name);
+        } else {
+            let prefix = this.getParam(KerberosProviderConfig.displayPropertyNameBindings.get(KerberosProviderConfig.CONFIG_PREFIX));
+            if (prefix) {
+                propName = prefix + '.' + KerberosProviderConfig.displayPropertyNameBindings.get(name);
+            } else {
+                propName = KerberosProviderConfig.displayPropertyNameBindings.get(name);
+            }
         }
-        super.setParam(name, value); // Update the config prefix property itself
-      }
-    } else {
-      super.setParam(name, value);
+        return propName;
     }
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
-
-    switch (paramName) {
-      case KerberosProviderConfig.ANON_ALLOWED:
-        isValid = this.isValidAllowAnon();
-        break;
-      case KerberosProviderConfig.TOKEN_VALIDITY:
-        isValid = this.isValidTokenExpiration();
-        break;
-      default:
-        isValid = true;
+
+    isPasswordParam(name: string): boolean {
+        return (name === KerberosProviderConfig.SIG_SECRET);
     }
 
-    return isValid;
-  }
+    setParam(name: string, value: string) {
+        console.debug('KerberosProviderConfig --> setParam(' + name + ', ' + value + ')'); // TODO: PJZ: DELETE ME
+        if (name === this.getDisplayNamePropertyBinding(KerberosProviderConfig.CONFIG_PREFIX)) {
+            // If the config prefix property has changed, then the properties need to be modified accordingly
+            let prevPrefix = this.getParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.CONFIG_PREFIX));
+            if (value !== prevPrefix) {
+                // Iterate over those properties which have already been set
+                for (let propName of this.getParamNames()) {
+                    console.debug('\tPrevious property ' + propName);
+                    if (propName.startsWith(prevPrefix)) { // If the property name includes the previous config prefix
+                        let suffix = propName.substring(prevPrefix.length + 1); // prefix + '.'
+                        let newPropName = value + '.' + suffix;
+                        this.setParam(newPropName, this.getParam(propName));
+                        console.debug('\tRenamed ' + propName + ' to ' + newPropName + ' because config prefix changed.');
+                        this.removeParam(propName);
+                        console.debug('\tDeleted ' + propName + ' because config prefix changed.');
+                    }
+                }
+                super.setParam(name, value); // Update the config prefix property itself
+            }
+        } else {
+            super.setParam(name, value);
+        }
+    }
 
-  private isValidTokenExpiration(): boolean {
-    let isValid: boolean = true;
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
+
+        switch (paramName) {
+            case KerberosProviderConfig.ANON_ALLOWED:
+                isValid = this.isValidAllowAnon();
+                break;
+            case KerberosProviderConfig.TOKEN_VALIDITY:
+                isValid = this.isValidTokenExpiration();
+                break;
+            default:
+                isValid = true;
+        }
 
-    let tokenExpiration = this.getParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.TOKEN_VALIDITY));
-    if (tokenExpiration) {
-      isValid = ValidationUtils.isValidNumber(tokenExpiration);
-      if (!isValid) {
-        console.debug(KerberosProviderConfig.TOKEN_VALIDITY + ' value is not valid.');
-      }
+        return isValid;
     }
-    return isValid;
-  }
-
-  private isValidAllowAnon(): boolean {
-    let isValid: boolean = true;
-
-    let allowAnon = this.getParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.ANON_ALLOWED));
-    if (allowAnon) {
-      isValid = ValidationUtils.isValidBoolean(allowAnon);
-      if (!isValid) {
-        console.debug(KerberosProviderConfig.ANON_ALLOWED + ' value is not valid.');
-      }
+
+    private isValidTokenExpiration(): boolean {
+        let isValid = true;
+
+        let tokenExpiration = this.getParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.TOKEN_VALIDITY));
+        if (tokenExpiration) {
+            isValid = ValidationUtils.isValidNumber(tokenExpiration);
+            if (!isValid) {
+                console.debug(KerberosProviderConfig.TOKEN_VALIDITY + ' value is not valid.');
+            }
+        }
+        return isValid;
     }
-    return isValid;
-  }
 
-}
\ No newline at end of file
+    private isValidAllowAnon(): boolean {
+        let isValid = true;
+
+        let allowAnon = this.getParam(this.getDisplayNamePropertyBinding(KerberosProviderConfig.ANON_ALLOWED));
+        if (allowAnon) {
+            isValid = ValidationUtils.isValidBoolean(allowAnon);
+            if (!isValid) {
+                console.debug(KerberosProviderConfig.ANON_ALLOWED + ' value is not valid.');
+            }
+        }
+        return isValid;
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ldap-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ldap-provider-config.ts
index ada9f99..20879c0 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ldap-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ldap-provider-config.ts
@@ -15,153 +15,151 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {OrderedParamContainer} from "./ordered-param-container";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {OrderedParamContainer} from './ordered-param-container';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class LDAPProviderConfig extends AuthenticationProviderConfig implements OrderedParamContainer {
+    private static SESSION_TIMEOUT = 'Session Timeout';
+    private static DN_TEMPLATE = 'User DN Template';
+    private static URL = 'URL';
+    private static MECHANISM = 'Mechanism';
+    private static REALM = 'Realm';
+    private static CONTEXT_FACTORY = 'LDAP Context Factory';
+    private static REALM_CONTEXT_FACTORY = 'Realm Context Factory';
+    private static AUTH_CHAIN = 'Authentication Chain';
+
+    private static displayPropertyNames = [LDAPProviderConfig.SESSION_TIMEOUT,
+        LDAPProviderConfig.URL,
+        LDAPProviderConfig.DN_TEMPLATE,
+        LDAPProviderConfig.MECHANISM,
+        LDAPProviderConfig.AUTH_CHAIN
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [LDAPProviderConfig.SESSION_TIMEOUT, 'sessionTimeout'],
+            [LDAPProviderConfig.DN_TEMPLATE, 'main.ldapRealm.userDnTemplate'],
+            [LDAPProviderConfig.URL, 'main.ldapRealm.contextFactory.url'],
+            [LDAPProviderConfig.MECHANISM, 'main.ldapRealm.contextFactory.authenticationMechanism'],
+            [LDAPProviderConfig.REALM, 'main.ldapRealm'],
+            [LDAPProviderConfig.CONTEXT_FACTORY, 'main.ldapContextFactory'],
+            [LDAPProviderConfig.REALM_CONTEXT_FACTORY, 'main.ldapRealm.contextFactory'],
+            [LDAPProviderConfig.AUTH_CHAIN, 'urls./**']
+        ] as [string, string][]);
+
+    private static paramsOrder: string[] =
+        [LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.SESSION_TIMEOUT),
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.REALM),
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.CONTEXT_FACTORY),
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.REALM_CONTEXT_FACTORY),
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.DN_TEMPLATE),
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.URL),
+            // user search attr name,              // TODO: PJZ: Define Me
+            // authzn enabled,                     // TODO: PJZ: Define Me
+            // realm context fact system user,     // TODO: PJZ: Define Me
+            // realm context fact system user pwd, // TODO: PJZ: Define Me
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.MECHANISM),
+            // user object class,                  // TODO: PJZ: Define Me
+            // realm search base,                  // TODO: PJZ: Define Me
+            // realm user search base              // TODO: PJZ: Define Me
+            LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.AUTH_CHAIN)
+        ];
+
+    constructor() {
+        super('ShiroProvider');
+        this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.REALM),
+            'org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm');
+        this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.CONTEXT_FACTORY),
+            'org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory');
+        this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.REALM_CONTEXT_FACTORY), '$ldapContextFactory');
+        this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.AUTH_CHAIN), 'authcBasic');
+    }
+
+    getDisplayPropertyNames(): string[] {
+        return LDAPProviderConfig.displayPropertyNames;
+    }
 
-  private static SESSION_TIMEOUT       = 'Session Timeout';
-  private static DN_TEMPLATE           = 'User DN Template';
-  private static URL                   = 'URL';
-  private static MECHANISM             = 'Mechanism';
-  private static REALM                 = 'Realm';
-  private static CONTEXT_FACTORY       = 'LDAP Context Factory';
-  private static REALM_CONTEXT_FACTORY = 'Realm Context Factory';
-  private static AUTH_CHAIN            = 'Authentication Chain';
-
-  private static displayPropertyNames = [ LDAPProviderConfig.SESSION_TIMEOUT,
-                                          LDAPProviderConfig.URL,
-                                          LDAPProviderConfig.DN_TEMPLATE,
-                                          LDAPProviderConfig.MECHANISM,
-                                          LDAPProviderConfig.AUTH_CHAIN
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-            new Map([
-              [LDAPProviderConfig.SESSION_TIMEOUT,       'sessionTimeout'],
-              [LDAPProviderConfig.DN_TEMPLATE,           'main.ldapRealm.userDnTemplate'],
-              [LDAPProviderConfig.URL,                   'main.ldapRealm.contextFactory.url'],
-              [LDAPProviderConfig.MECHANISM,             'main.ldapRealm.contextFactory.authenticationMechanism'],
-              [LDAPProviderConfig.REALM,                 'main.ldapRealm'],
-              [LDAPProviderConfig.CONTEXT_FACTORY,       'main.ldapContextFactory'],
-              [LDAPProviderConfig.REALM_CONTEXT_FACTORY, 'main.ldapRealm.contextFactory'],
-              [LDAPProviderConfig.AUTH_CHAIN,            'urls./**']
-            ] as [string, string][]);
-
-  private static paramsOrder: string[] =
-            [ LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.SESSION_TIMEOUT),
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.REALM),
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.CONTEXT_FACTORY),
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.REALM_CONTEXT_FACTORY),
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.DN_TEMPLATE),
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.URL),
-              // user search attr name,              // TODO: PJZ: Define Me
-              // authzn enabled,                     // TODO: PJZ: Define Me
-              // realm context fact system user,     // TODO: PJZ: Define Me
-              // realm context fact system user pwd, // TODO: PJZ: Define Me
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.MECHANISM),
-              // user object class,                  // TODO: PJZ: Define Me
-              // realm search base,                  // TODO: PJZ: Define Me
-              // realm user search base              // TODO: PJZ: Define Me
-              LDAPProviderConfig.displayPropertyNameBindings.get(LDAPProviderConfig.AUTH_CHAIN)
-            ];
-
-  constructor() {
-    super('ShiroProvider');
-    this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.REALM),
-                  'org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm');
-    this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.CONTEXT_FACTORY),
-                  'org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory');
-    this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.REALM_CONTEXT_FACTORY), '$ldapContextFactory');
-    this.setParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.AUTH_CHAIN), 'authcBasic');
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return LDAPProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    return LDAPProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  getOrderedParamNames(): string[] {
-    return LDAPProviderConfig.paramsOrder;
-  }
-
-  orderParams(params: Map<string, string>): Map<string, string> {
-    let result = new Map<string, string>();
-
-    for (let name of this.getOrderedParamNames()) {
-      let value = params[name];
-      if (value) {
-        result[name] = value;
-      }
+    getDisplayNamePropertyBinding(name: string) {
+        return LDAPProviderConfig.displayPropertyNameBindings.get(name);
     }
 
-    return result;
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
-
-    switch (paramName) {
-      case LDAPProviderConfig.SESSION_TIMEOUT:
-        isValid = this.isTimeoutValid();
-        break;
-      case LDAPProviderConfig.DN_TEMPLATE:
-        isValid = this.isDnTemplateValid();
-        break;
-      case LDAPProviderConfig.URL:
-        isValid = this.isLdapURLValid();
-        break;
-      default:
-        isValid = true;
+    getOrderedParamNames(): string[] {
+        return LDAPProviderConfig.paramsOrder;
     }
 
-    return isValid;
-  }
+    orderParams(params: Map<string, string>): Map<string, string> {
+        let result = new Map<string, string>();
 
-  private isTimeoutValid(): boolean {
-    let isValid: boolean = true;
+        for (let name of this.getOrderedParamNames()) {
+            let value = params[name];
+            if (value) {
+                result[name] = value;
+            }
+        }
 
-    let timeout = this.getParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.SESSION_TIMEOUT));
-    if (timeout) {
-      isValid = ValidationUtils.isValidNumber(timeout);
-      if (!isValid) {
-        console.debug(LDAPProviderConfig.SESSION_TIMEOUT + ' value is not valid.');
-      }
+        return result;
     }
-    return isValid;
-  }
-
-  private isLdapURLValid(): boolean {
-    let isValid: boolean = true;
-
-    let url = this.getParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.URL));
-    if (url) {
-      isValid = ValidationUtils.isValidLdapURL(url);
-      if (!isValid) {
-        console.debug(LDAPProviderConfig.URL+ ' value is not valid.');
-      }
-    } else {
-      isValid = false; // URL must be specified
+
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
+
+        switch (paramName) {
+            case LDAPProviderConfig.SESSION_TIMEOUT:
+                isValid = this.isTimeoutValid();
+                break;
+            case LDAPProviderConfig.DN_TEMPLATE:
+                isValid = this.isDnTemplateValid();
+                break;
+            case LDAPProviderConfig.URL:
+                isValid = this.isLdapURLValid();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isTimeoutValid(): boolean {
+        let isValid = true;
+
+        let timeout = this.getParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.SESSION_TIMEOUT));
+        if (timeout) {
+            isValid = ValidationUtils.isValidNumber(timeout);
+            if (!isValid) {
+                console.debug(LDAPProviderConfig.SESSION_TIMEOUT + ' value is not valid.');
+            }
+        }
+        return isValid;
+    }
+
+    private isLdapURLValid(): boolean {
+        let isValid = true;
 
-  private isDnTemplateValid(): boolean {
-    let isValid: boolean = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.URL));
+        if (url) {
+            isValid = ValidationUtils.isValidLdapURL(url);
+            if (!isValid) {
+                console.debug(LDAPProviderConfig.URL + ' value is not valid.');
+            }
+        } else {
+            isValid = false; // URL must be specified
+        }
 
-    let dnTemplate = this.getParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.DN_TEMPLATE));
-    if (dnTemplate) {
-      isValid = ValidationUtils.isValidDNTemplate(dnTemplate);
-      if (!isValid) {
-        console.debug(LDAPProviderConfig.DN_TEMPLATE + ' value is not valid.');
-      }
+        return isValid;
     }
-    return isValid;
-  }
 
-}
\ No newline at end of file
+    private isDnTemplateValid(): boolean {
+        let isValid = true;
+
+        let dnTemplate = this.getParam(this.getDisplayNamePropertyBinding(LDAPProviderConfig.DN_TEMPLATE));
+        if (dnTemplate) {
+            isValid = ValidationUtils.isValidDNTemplate(dnTemplate);
+            if (!isValid) {
+                console.debug(LDAPProviderConfig.DN_TEMPLATE + ' value is not valid.');
+            }
+        }
+        return isValid;
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/oauth-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/oauth-provider-config.ts
index b359a5d..2b8c42c 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/oauth-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/oauth-provider-config.ts
@@ -15,63 +15,63 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class OAUTHProviderConfig extends AuthenticationProviderConfig {
 
-  static CALLBACK_URL           = 'Callback URL';
-  static COOKIE_DOMAIN_SUFFIX   = 'Cookie Domain Suffix';
+    static CALLBACK_URL = 'Callback URL';
+    static COOKIE_DOMAIN_SUFFIX = 'Cookie Domain Suffix';
 
-  private static displayPropertyNames: string[] = [ OAUTHProviderConfig.CALLBACK_URL,
-                                                    OAUTHProviderConfig.COOKIE_DOMAIN_SUFFIX
-                                                  ];
+    private static displayPropertyNames: string[] = [OAUTHProviderConfig.CALLBACK_URL,
+        OAUTHProviderConfig.COOKIE_DOMAIN_SUFFIX
+    ];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-                            new Map([
-                              [OAUTHProviderConfig.CALLBACK_URL,         'pac4j.callbackUrl'],
-                              [OAUTHProviderConfig.COOKIE_DOMAIN_SUFFIX, 'pac4j.cookie.domain.suffix']
-                            ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [OAUTHProviderConfig.CALLBACK_URL, 'pac4j.callbackUrl'],
+            [OAUTHProviderConfig.COOKIE_DOMAIN_SUFFIX, 'pac4j.cookie.domain.suffix']
+        ]);
 
 
-  constructor() {
-    super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
+    constructor() {
+        super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return OAUTHProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return OAUTHProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return OAUTHProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return OAUTHProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
 
-    switch (paramName) {
-      case OAUTHProviderConfig.CALLBACK_URL:
-        isValid = this.isValidCallbackURL();
-        break;
-      default:
-        isValid = true;
+        switch (paramName) {
+            case OAUTHProviderConfig.CALLBACK_URL:
+                isValid = this.isValidCallbackURL();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidCallbackURL(): boolean {
+        let isValid = true;
 
-  private isValidCallbackURL(): boolean {
-    let isValid: boolean = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(OAUTHProviderConfig.CALLBACK_URL));
+        if (url) {
+            isValid = ValidationUtils.isValidHttpURL(url);
+            if (!isValid) {
+                console.debug(OAUTHProviderConfig.CALLBACK_URL + ' value is not a valid URL.');
+            }
+        }
 
-    let url = this.getParam(this.getDisplayNamePropertyBinding(OAUTHProviderConfig.CALLBACK_URL));
-    if (url) {
-      isValid = ValidationUtils.isValidHttpURL(url);
-      if (!isValid) {
-        console.debug(OAUTHProviderConfig.CALLBACK_URL + ' value is not a valid URL.');
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/oidc-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/oidc-provider-config.ts
index 49d2b4e..72920fe 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/oidc-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/oidc-provider-config.ts
@@ -15,122 +15,121 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class OIDCProviderConfig extends AuthenticationProviderConfig {
 
-  static CALLBACK_URL           = 'Callback URL';
-  static PROVIDER_ID            = 'Provider Identifier';
-  static PROVIDER_SECRET        = 'Provider Secret';
-  static PROVIDER_DISCOVERY_URL = 'Provider Discovery URL';
-  static USE_NONCE              = 'Use Nonce';
-  static PREF_JWS_ALGO          = 'Preferred JWS Algorithm';
-  static MAX_CLOCK_SKEW         = 'Maximum Clock Skew';
-  static COOKIE_DOMAIN_SUFFIX   = 'Cookie Domain Suffix';
-
-
-  private static displayPropertyNames = [ OIDCProviderConfig.CALLBACK_URL,
-                                          OIDCProviderConfig.PROVIDER_ID,
-                                          OIDCProviderConfig.PROVIDER_SECRET,
-                                          OIDCProviderConfig.PROVIDER_DISCOVERY_URL,
-                                          OIDCProviderConfig.USE_NONCE,
-                                          OIDCProviderConfig.PREF_JWS_ALGO,
-                                          OIDCProviderConfig.MAX_CLOCK_SKEW,
-                                          OIDCProviderConfig.COOKIE_DOMAIN_SUFFIX
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                                      new Map([
-                                        [OIDCProviderConfig.CALLBACK_URL,           'pac4j.callbackUrl'],
-                                        [OIDCProviderConfig.COOKIE_DOMAIN_SUFFIX,   'pac4j.cookie.domain.suffix'],
-                                        [OIDCProviderConfig.PROVIDER_ID,            'oidc.id'],
-                                        [OIDCProviderConfig.PROVIDER_SECRET,        'oidc.secret'],
-                                        [OIDCProviderConfig.PROVIDER_DISCOVERY_URL, 'oidc.discoveryUri'],
-                                        [OIDCProviderConfig.USE_NONCE,              'oidc.useNonce'],
-                                        [OIDCProviderConfig.PREF_JWS_ALGO,          'oidc.preferredJwsAlgorithm'],
-                                        [OIDCProviderConfig.MAX_CLOCK_SKEW,         'oidc.maxClockSkew'],
-                                      ]);
-
-
-  constructor() {
-    super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return OIDCProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    return OIDCProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  isPasswordParam(name: string): boolean {
-    return (name === OIDCProviderConfig.PROVIDER_SECRET);
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
-
-    switch (paramName) {
-      case OIDCProviderConfig.CALLBACK_URL:
-      case OIDCProviderConfig.PROVIDER_DISCOVERY_URL:
-        isValid = this.isValidURL(paramName);
-        break;
-      case OIDCProviderConfig.USE_NONCE:
-        isValid = this.isValidUseNonce();
-        break;
-      case OIDCProviderConfig.MAX_CLOCK_SKEW:
-        isValid = this.isValidClockSkew();
-        break;
-      default:
-        isValid = true;
+    static CALLBACK_URL = 'Callback URL';
+    static PROVIDER_ID = 'Provider Identifier';
+    static PROVIDER_SECRET = 'Provider Secret';
+    static PROVIDER_DISCOVERY_URL = 'Provider Discovery URL';
+    static USE_NONCE = 'Use Nonce';
+    static PREF_JWS_ALGO = 'Preferred JWS Algorithm';
+    static MAX_CLOCK_SKEW = 'Maximum Clock Skew';
+    static COOKIE_DOMAIN_SUFFIX = 'Cookie Domain Suffix';
+
+
+    private static displayPropertyNames = [OIDCProviderConfig.CALLBACK_URL,
+        OIDCProviderConfig.PROVIDER_ID,
+        OIDCProviderConfig.PROVIDER_SECRET,
+        OIDCProviderConfig.PROVIDER_DISCOVERY_URL,
+        OIDCProviderConfig.USE_NONCE,
+        OIDCProviderConfig.PREF_JWS_ALGO,
+        OIDCProviderConfig.MAX_CLOCK_SKEW,
+        OIDCProviderConfig.COOKIE_DOMAIN_SUFFIX
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [OIDCProviderConfig.CALLBACK_URL, 'pac4j.callbackUrl'],
+            [OIDCProviderConfig.COOKIE_DOMAIN_SUFFIX, 'pac4j.cookie.domain.suffix'],
+            [OIDCProviderConfig.PROVIDER_ID, 'oidc.id'],
+            [OIDCProviderConfig.PROVIDER_SECRET, 'oidc.secret'],
+            [OIDCProviderConfig.PROVIDER_DISCOVERY_URL, 'oidc.discoveryUri'],
+            [OIDCProviderConfig.USE_NONCE, 'oidc.useNonce'],
+            [OIDCProviderConfig.PREF_JWS_ALGO, 'oidc.preferredJwsAlgorithm'],
+            [OIDCProviderConfig.MAX_CLOCK_SKEW, 'oidc.maxClockSkew'],
+        ]);
+
+
+    constructor() {
+        super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
     }
 
-    return isValid;
-  }
+    getDisplayPropertyNames(): string[] {
+        return OIDCProviderConfig.displayPropertyNames;
+    }
 
-  private isValidURL(param: string): boolean {
-    let isValid: boolean = true;
+    getDisplayNamePropertyBinding(name: string) {
+        return OIDCProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-    let url = this.getParam(this.getDisplayNamePropertyBinding(param));
-    if (url) {
-      isValid = ValidationUtils.isValidHttpURL(url);
-      if (!isValid) {
-        console.debug(param + ' value is not a valid URL.');
-      }
+    isPasswordParam(name: string): boolean {
+        return (name === OIDCProviderConfig.PROVIDER_SECRET);
     }
 
-    return isValid;
-  }
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
+
+        switch (paramName) {
+            case OIDCProviderConfig.CALLBACK_URL:
+            case OIDCProviderConfig.PROVIDER_DISCOVERY_URL:
+                isValid = this.isValidURL(paramName);
+                break;
+            case OIDCProviderConfig.USE_NONCE:
+                isValid = this.isValidUseNonce();
+                break;
+            case OIDCProviderConfig.MAX_CLOCK_SKEW:
+                isValid = this.isValidClockSkew();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
+    }
 
+    private isValidURL(param: string): boolean {
+        let isValid = true;
 
-  private isValidUseNonce(): boolean {
-    let isValid: boolean = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(param));
+        if (url) {
+            isValid = ValidationUtils.isValidHttpURL(url);
+            if (!isValid) {
+                console.debug(param + ' value is not a valid URL.');
+            }
+        }
 
-    let useNonce = this.getParam(this.getDisplayNamePropertyBinding(OIDCProviderConfig.USE_NONCE));
-    if (useNonce) {
-      isValid = ValidationUtils.isValidBoolean(useNonce);
-      if (!isValid) {
-        console.debug(OIDCProviderConfig.USE_NONCE + ' value is not a valid boolean.');
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
 
-  private isValidClockSkew(): boolean {
-    let isValid: boolean = true;
+    private isValidUseNonce(): boolean {
+        let isValid = true;
 
-    let clockSkew = this.getParam(this.getDisplayNamePropertyBinding(OIDCProviderConfig.MAX_CLOCK_SKEW));
-    if (clockSkew) {
-      isValid = ValidationUtils.isValidNumber(clockSkew);
-      if (!isValid) {
-        console.debug(OIDCProviderConfig.MAX_CLOCK_SKEW + ' value is not a valid number');
-      }
+        let useNonce = this.getParam(this.getDisplayNamePropertyBinding(OIDCProviderConfig.USE_NONCE));
+        if (useNonce) {
+            isValid = ValidationUtils.isValidBoolean(useNonce);
+            if (!isValid) {
+                console.debug(OIDCProviderConfig.USE_NONCE + ' value is not a valid boolean.');
+            }
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidClockSkew(): boolean {
+        let isValid = true;
+
+        let clockSkew = this.getParam(this.getDisplayNamePropertyBinding(OIDCProviderConfig.MAX_CLOCK_SKEW));
+        if (clockSkew) {
+            isValid = ValidationUtils.isValidNumber(clockSkew);
+            if (!isValid) {
+                console.debug(OIDCProviderConfig.MAX_CLOCK_SKEW + ' value is not a valid number');
+            }
+        }
 
-}
\ No newline at end of file
+        return isValid;
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ordered-param-container.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ordered-param-container.ts
index e6123f0..2d293c5 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/ordered-param-container.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/ordered-param-container.ts
@@ -18,10 +18,10 @@
 // ProviderConfig implementations, for which parameter order is important, should implement this interface
 export interface OrderedParamContainer {
 
-  // Get the param names in the correct order
-  getOrderedParamNames(): string[];
+    // Get the param names in the correct order
+    getOrderedParamNames(): string[];
 
-  // Ensure the specified set of params is ordered correctly
-  orderParams(params: Map<string, string>): Map<string, string>;
+    // Ensure the specified set of params is ordered correctly
+    orderParams(params: Map<string, string>): Map<string, string>;
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/pam-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/pam-provider-config.ts
index a7c5cd7..e31b4ed 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/pam-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/pam-provider-config.ts
@@ -15,91 +15,91 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {OrderedParamContainer} from "./ordered-param-container";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {OrderedParamContainer} from './ordered-param-container';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class PAMProviderConfig extends AuthenticationProviderConfig implements OrderedParamContainer {
 
-  static SESSION_TIMEOUT  = 'Session Timeout';
-  static REALM            = 'Realm';
-  static SERVICE          = 'Service';
-  static AUTH_CHAIN       = 'Authentication Chain';
-
-  private static displayPropertyNames = [ PAMProviderConfig.SESSION_TIMEOUT,
-                                          PAMProviderConfig.SERVICE ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                            new Map([
-                              [PAMProviderConfig.SESSION_TIMEOUT, 'sessionTimeout'],
-                              [PAMProviderConfig.REALM,           'main.pamRealm'],
-                              [PAMProviderConfig.SERVICE,         'main.pamRealm.service'],
-                              [PAMProviderConfig.AUTH_CHAIN,      'urls./**']
-                            ]);
-
-  private static paramsOrder: string[] =
-                            [ PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.SESSION_TIMEOUT),
-                              PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.REALM),
-                              PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.SERVICE),
-                              PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.AUTH_CHAIN)
-                            ];
-
-  constructor() {
-    super('ShiroProvider');
-    this.setParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.REALM),
-                  'org.apache.knox.gateway.shirorealm.KnoxPamRealm');
-    this.setParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.SERVICE), 'login');
-    this.setParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.AUTH_CHAIN), 'authcBasic');
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return PAMProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    return PAMProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  getOrderedParamNames(): string[] {
-    return PAMProviderConfig.paramsOrder;
-  }
-
-  orderParams(params: Map<string, string>): Map<string, string> {
-    let result = new Map<string, string>();
-
-    for (let name of this.getOrderedParamNames()) {
-      let value = params[name];
-      if (value) {
-        result[name] = value;
-      }
+    static SESSION_TIMEOUT = 'Session Timeout';
+    static REALM = 'Realm';
+    static SERVICE = 'Service';
+    static AUTH_CHAIN = 'Authentication Chain';
+
+    private static displayPropertyNames = [PAMProviderConfig.SESSION_TIMEOUT,
+        PAMProviderConfig.SERVICE];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [PAMProviderConfig.SESSION_TIMEOUT, 'sessionTimeout'],
+            [PAMProviderConfig.REALM, 'main.pamRealm'],
+            [PAMProviderConfig.SERVICE, 'main.pamRealm.service'],
+            [PAMProviderConfig.AUTH_CHAIN, 'urls./**']
+        ]);
+
+    private static paramsOrder: string[] =
+        [PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.SESSION_TIMEOUT),
+            PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.REALM),
+            PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.SERVICE),
+            PAMProviderConfig.displayPropertyNameBindings.get(PAMProviderConfig.AUTH_CHAIN)
+        ];
+
+    constructor() {
+        super('ShiroProvider');
+        this.setParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.REALM),
+            'org.apache.knox.gateway.shirorealm.KnoxPamRealm');
+        this.setParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.SERVICE), 'login');
+        this.setParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.AUTH_CHAIN), 'authcBasic');
     }
 
-    return result;
-  }
+    getDisplayPropertyNames(): string[] {
+        return PAMProviderConfig.displayPropertyNames;
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+    getDisplayNamePropertyBinding(name: string) {
+        return PAMProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-    switch (paramName) {
-      case PAMProviderConfig.SESSION_TIMEOUT:
-        isValid = this.isValidTimeout();
-        break;
-      default:
-        isValid = true;
+    getOrderedParamNames(): string[] {
+        return PAMProviderConfig.paramsOrder;
     }
 
-    return isValid;
-  }
+    orderParams(params: Map<string, string>): Map<string, string> {
+        let result = new Map<string, string>();
 
-  private isValidTimeout(): boolean {
-    let isValid: boolean = true;
+        for (let name of this.getOrderedParamNames()) {
+            let value = params[name];
+            if (value) {
+                result[name] = value;
+            }
+        }
 
-    let timeout = this.getParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.SESSION_TIMEOUT));
-    if (timeout) {
-      isValid = ValidationUtils.isValidNumber(timeout);
+        return result;
     }
 
-    return isValid;
-  }
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
+
+        switch (paramName) {
+            case PAMProviderConfig.SESSION_TIMEOUT:
+                isValid = this.isValidTimeout();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
+    }
+
+    private isValidTimeout(): boolean {
+        let isValid = true;
+
+        let timeout = this.getParam(this.getDisplayNamePropertyBinding(PAMProviderConfig.SESSION_TIMEOUT));
+        if (timeout) {
+            isValid = ValidationUtils.isValidNumber(timeout);
+        }
+
+        return isValid;
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/preauth-sso-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/preauth-sso-provider-config.ts
index d7e8d3d..493ac50 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/preauth-sso-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/preauth-sso-provider-config.ts
@@ -15,41 +15,41 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
 
 export class PreAuthSSOProviderConfig extends AuthenticationProviderConfig {
 
-  static VALIDATION_METHOD  = 'Validation Method';
-  static IP_ADDRESSES       = 'Addresses';
-  static CUSTOM_HEADER      = 'Custom Header';
-  static CUSTOM_GRP_HEADER  = 'Custom Group Header';
+    static VALIDATION_METHOD = 'Validation Method';
+    static IP_ADDRESSES = 'Addresses';
+    static CUSTOM_HEADER = 'Custom Header';
+    static CUSTOM_GRP_HEADER = 'Custom Group Header';
 
-  private static displayPropertyNames = [ PreAuthSSOProviderConfig.VALIDATION_METHOD,
-                                          PreAuthSSOProviderConfig.IP_ADDRESSES,
-                                          PreAuthSSOProviderConfig.CUSTOM_HEADER,
-                                          PreAuthSSOProviderConfig.CUSTOM_GRP_HEADER
-                                        ];
+    private static displayPropertyNames = [PreAuthSSOProviderConfig.VALIDATION_METHOD,
+        PreAuthSSOProviderConfig.IP_ADDRESSES,
+        PreAuthSSOProviderConfig.CUSTOM_HEADER,
+        PreAuthSSOProviderConfig.CUSTOM_GRP_HEADER
+    ];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-                                        new Map([
-                                          [PreAuthSSOProviderConfig.VALIDATION_METHOD, 'preauth.validation.method'],
-                                          [PreAuthSSOProviderConfig.IP_ADDRESSES,      'preauth.ip.addresses'],
-                                          [PreAuthSSOProviderConfig.CUSTOM_HEADER,     'preauth.custom.header'],
-                                          [PreAuthSSOProviderConfig.CUSTOM_GRP_HEADER, 'preauth.custom.group.header']
-                                        ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [PreAuthSSOProviderConfig.VALIDATION_METHOD, 'preauth.validation.method'],
+            [PreAuthSSOProviderConfig.IP_ADDRESSES, 'preauth.ip.addresses'],
+            [PreAuthSSOProviderConfig.CUSTOM_HEADER, 'preauth.custom.header'],
+            [PreAuthSSOProviderConfig.CUSTOM_GRP_HEADER, 'preauth.custom.group.header']
+        ]);
 
 
-  constructor() {
-    console.debug('new PreAuthSSOProviderConfig()');
-    super('HeaderPreAuth', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
+    constructor() {
+        console.debug('new PreAuthSSOProviderConfig()');
+        super('HeaderPreAuth', AuthenticationProviderConfig.FEDERATION_ROLE);
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return PreAuthSSOProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return PreAuthSSOProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return PreAuthSSOProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return PreAuthSSOProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.html b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.html
index 97377e2..875cf27 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.html
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.html
@@ -1,87 +1,89 @@
 <bs-modal (onClose)="onClose()" #newProviderConfigModal xmlns="http://www.w3.org/1999/html">
-  <bs-modal-header [showDismiss]="true">
-    <label class="modal-title">Create a New Provider Configuration</label>
-  </bs-modal-header>
-  <bs-modal-body>
+    <bs-modal-header [showDismiss]="true">
+        <label class="modal-title">Create a New Provider Configuration</label>
+    </bs-modal-header>
+    <bs-modal-body>
 
-    <div *ngIf="isRootStep()">
-      <!-- Provider Configuration Name -->
-      <div>
-        <table>
-          <tr>
-            <td><strong>Name</strong></td>
-            <td><input type="textbox"
-                       name="name"
-                       #field="ngModel"
-                       [required]="true"
-                       size="60"
-                       [(ngModel)]="name">
-              <span *ngIf="field.errors?.required" style="color: red">
+        <div *ngIf="isRootStep()">
+            <!-- Provider Configuration Name -->
+            <div>
+                <table>
+                    <tr>
+                        <td><strong>Name</strong></td>
+                        <td><input type="textbox"
+                                   name="name"
+                                   #field="ngModel"
+                                   [required]="true"
+                                   size="60"
+                                   [(ngModel)]="name">
+                            <span *ngIf="field.errors?.required" style="color: red">
                 &nbsp;required
               </span>
-              <span *ngIf="!field.errors?.required && !isValidProviderConfigName()" style="color: red">
+                            <span *ngIf="!field.errors?.required && !isValidProviderConfigName()"
+                                  style="color: red">
                 &nbsp;invalid
               </span>
-            </td>
-          </tr>
-        </table>
-      </div> <!-- Provider Configuration Name -->
+                        </td>
+                    </tr>
+                </table>
+            </div> <!-- Provider Configuration Name -->
 
-      <br/>
+            <br/>
 
-      <!-- Display New Providers -->
-      <div>
-        <strong>Providers</strong><br/>
-        <div *ngFor="let pDisplay of getConfiguredProviderDisplayNames()">
-          {{ pDisplay }}
-        </div>
-      </div> <!-- Display New Providers -->
+            <!-- Display New Providers -->
+            <div>
+                <strong>Providers</strong><br/>
+                <div *ngFor="let pDisplay of getConfiguredProviderDisplayNames()">
+                    {{ pDisplay }}
+                </div>
+            </div> <!-- Display New Providers -->
 
-      <br/>
+            <br/>
 
-      <!-- Root Step -->
-      <div>
-        <button type="button"
-                class="btn btn-default btn-sm"
-                data-dismiss="newProviderConfigModal"
-                (click)="onNextStep()">Add Provider</button>
-      </div> <!-- Root Step -->
-    </div>
+            <!-- Root Step -->
+            <div>
+                <button type="button"
+                        class="btn btn-default btn-sm"
+                        data-dismiss="newProviderConfigModal"
+                        (click)="onNextStep()">Add Provider
+                </button>
+            </div> <!-- Root Step -->
+        </div>
 
-    <!-- Provider Category Selection Step -->
-    <div *ngIf="isProviderCategoryStep()">
-      <strong>Choose a Provider Category</strong><br/><br/>
-      <div *ngFor="let pc of getProviderCategories()">
-        <label>
-          <input type="radio"
-                 [name]="pc"
-                 [(ngModel)]="selectedCategory"
-                 [value]="pc">&nbsp;{{pc}}
-        </label>
-      </div>
-    </div> <!-- Provider Category Selection Step -->
+        <!-- Provider Category Selection Step -->
+        <div *ngIf="isProviderCategoryStep()">
+            <strong>Choose a Provider Category</strong><br/><br/>
+            <div *ngFor="let pc of getProviderCategories()">
+                <label>
+                    <input type="radio"
+                           [name]="pc"
+                           [(ngModel)]="selectedCategory"
+                           [value]="pc">&nbsp;{{pc}}
+                </label>
+            </div>
+        </div> <!-- Provider Category Selection Step -->
 
-    <!-- Provider Type Selection Step -->
-    <div *ngIf="isProviderTypeStep()">
-      <strong>Choose a {{ selectedCategory }} Provider Type</strong><br/><br/>
-      <div *ngFor="let pt of getProviderTypes()">
-        <label>
-          <input type="radio"
-                 [name]="pt"
-                 (change)="getCategoryWizard().onChange()"
-                 [(ngModel)]="getCategoryWizard().selectedType"
-                 [value]="pt">&nbsp;{{pt}}
-        </label>
-      </div>
-    </div> <!-- Provider Type Selection Step -->
+        <!-- Provider Type Selection Step -->
+        <div *ngIf="isProviderTypeStep()">
+            <strong>Choose a {{ selectedCategory }} Provider Type</strong><br/><br/>
+            <div *ngFor="let pt of getProviderTypes()">
+                <label>
+                    <input type="radio"
+                           [name]="pt"
+                           (change)="getCategoryWizard().onChange()"
+                           [(ngModel)]="getCategoryWizard().selectedType"
+                           [value]="pt">&nbsp;{{pt}}
+                </label>
+            </div>
+        </div> <!-- Provider Type Selection Step -->
 
-    <!-- Provider Type Params Step -->
-    <div *ngIf="isProviderParamsStep()">
-      <strong>Specify {{ getCategoryWizard().getSelectedType() }} Provider Parameters</strong><br/><br/>
-      <table>
-        <tr *ngFor="let pt of getProviderParams()">
-          <td><strong>{{pt}}</strong></td>
-          <td>
+        <!-- Provider Type Params Step -->
+        <div *ngIf="isProviderParamsStep()">
+            <strong>Specify {{ getCategoryWizard().getSelectedType() }} Provider Parameters</strong><br/><br/>
+            <table>
+                <tr *ngFor="let pt of getProviderParams()">
+                    <td><strong>{{pt}}</strong></td>
+                    <td>
             <span>
               <input [type]="!isPasswordParam(pt) || this['show'+pt] ? 'textbox' : 'password'"
                      size="60"
@@ -89,37 +91,41 @@
                      (change)="setProviderParamBinding(pt, paramInput.value)"
                      [value]="getProviderParamBinding(pt)">
             </span>
-            <span *ngIf="isPasswordParam(pt)">
+                        <span *ngIf="isPasswordParam(pt)">
               <input type="checkbox"
                      class="clickable"
                      [checked]="getPasswordDisplay(pt)"
                      (click)="togglePasswordDisplay(pt)">show
             </span>
-            <span *ngIf="!isValidParamValue(pt)" style="color: red">invalid</span>
-          </td>
-        </tr>
-      </table>
-    </div> <!-- Provider Type Params Step -->
+                        <span *ngIf="!isValidParamValue(pt)" style="color: red">invalid</span>
+                    </td>
+                </tr>
+            </table>
+        </div> <!-- Provider Type Params Step -->
 
 
-  </bs-modal-body>
-  <bs-modal-footer>
-    <button type="button"
-            class="btn btn-default btn-sm pull-left"
-            data-dismiss="newProviderConfigModal"
-            (click)="newProviderConfigModal.dismiss()">Cancel</button>
-    <button type="button"
-            *ngIf="!isRootStep()"
-            class="btn btn-primary btn-sm"
-            (click)="onPreviousStep()">Back</button>
-    <button type="button"
-            *ngIf="isRootStep() || !hasMoreSteps()"
-            class="btn btn-primary btn-sm"
-            [disabled]="(isRootStep() && !name)"
-            (click)="isRootStep() ? newProviderConfigModal.close() : onFinishAdd()">Ok</button>
-    <button type="button"
-            *ngIf="!isRootStep() && hasMoreSteps()"
-            class="btn btn-primary btn-sm"
-            (click)="onNextStep()">Next</button>
-  </bs-modal-footer>
-</bs-modal>
\ No newline at end of file
+    </bs-modal-body>
+    <bs-modal-footer>
+        <button type="button"
+                class="btn btn-default btn-sm pull-left"
+                data-dismiss="newProviderConfigModal"
+                (click)="newProviderConfigModal.dismiss()">Cancel
+        </button>
+        <button type="button"
+                *ngIf="!isRootStep()"
+                class="btn btn-primary btn-sm"
+                (click)="onPreviousStep()">Back
+        </button>
+        <button type="button"
+                *ngIf="isRootStep() || !hasMoreSteps()"
+                class="btn btn-primary btn-sm"
+                [disabled]="(isRootStep() && !name)"
+                (click)="isRootStep() ? newProviderConfigModal.close() : onFinishAdd()">Ok
+        </button>
+        <button type="button"
+                *ngIf="!isRootStep() && hasMoreSteps()"
+                class="btn btn-primary btn-sm"
+                (click)="onNextStep()">Next
+        </button>
+    </bs-modal-footer>
+</bs-modal>
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.spec.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.spec.ts
index 7c4dd21..77f2daf 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.spec.ts
@@ -1,25 +1,25 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { ProviderConfigWizardComponent } from './provider-config-wizard.component';
+import {ProviderConfigWizardComponent} from './provider-config-wizard.component';
 
 describe('ProviderConfigWizardComponent', () => {
-  let component: ProviderConfigWizardComponent;
-  let fixture: ComponentFixture<ProviderConfigWizardComponent>;
+    let component: ProviderConfigWizardComponent;
+    let fixture: ComponentFixture<ProviderConfigWizardComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ ProviderConfigWizardComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [ProviderConfigWizardComponent]
+        })
+            .compileComponents();
+    }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(ProviderConfigWizardComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(ProviderConfigWizardComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.ts
index 945f5ab..70f3fa0 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-config-wizard.component.ts
@@ -16,386 +16,380 @@
  */
 
 import {Component, OnInit, ViewChild} from '@angular/core';
-import {ResourceTypesService} from "../resourcetypes/resourcetypes.service";
-import {ResourceService} from "../resource/resource.service";
-import {BsModalComponent} from "ng2-bs3-modal";
-import {ProviderConfig} from "../resource-detail/provider-config";
-import {AuthenticationWizard} from "./authentication-wizard";
-import {CategoryWizard} from "./category-wizard";
-import {AuthorizationWizard} from "./authorization-wizard";
-import {IdentityAssertionWizard} from "./identity-assertion-wizard";
-import {HaWizard} from "./ha-wizard";
-import {Resource} from "../resource/resource";
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
-import {OrderedParamContainer} from "./ordered-param-container";
-import {HostMapProviderWizard} from "./hostmap-provider-wizard";
-import {ProviderContributorWizard} from "./provider-contributor-wizard";
-import {WebAppSecurityWizard} from "./webappsec-wizard";
-import {ValidationUtils} from "../utils/validation-utils";
-
+import {ResourceTypesService} from '../resourcetypes/resourcetypes.service';
+import {ResourceService} from '../resource/resource.service';
+import {BsModalComponent} from 'ng2-bs3-modal';
+import {ProviderConfig} from '../resource-detail/provider-config';
+import {AuthenticationWizard} from './authentication-wizard';
+import {CategoryWizard} from './category-wizard';
+import {AuthorizationWizard} from './authorization-wizard';
+import {IdentityAssertionWizard} from './identity-assertion-wizard';
+import {HaWizard} from './ha-wizard';
+import {Resource} from '../resource/resource';
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
+import {OrderedParamContainer} from './ordered-param-container';
+import {HostMapProviderWizard} from './hostmap-provider-wizard';
+import {ProviderContributorWizard} from './provider-contributor-wizard';
+import {WebAppSecurityWizard} from './webappsec-wizard';
+import {ValidationUtils} from '../utils/validation-utils';
 
 @Component({
-  selector: 'app-provider-config-wizard',
-  templateUrl: './provider-config-wizard.component.html',
-  styleUrls: ['./provider-config-wizard.component.css']
+    selector: 'app-provider-config-wizard',
+    templateUrl: './provider-config-wizard.component.html',
+    styleUrls: ['./provider-config-wizard.component.css']
 })
 export class ProviderConfigWizardComponent implements OnInit {
-
-  private static CATEGORY_STEP = 1;
-  private static TYPE_STEP     = 2;
-  private static PARAMS_STEP   = 3;
-
-  // Provider Categories
-  private static CATEGORY_AUTHENTICATION: string  = 'Authentication';
-  private static CATEGORY_AUTHORIZATION: string   = 'Authorization';
-  private static CATEGORY_ID_ASSERTION: string    = 'Identity Assertion';
-  private static CATEGORY_HA: string              = 'HA';
-  private static CATEGORY_WEBAPPSEC: string       = 'Web Application Security';
-  private static CATEGORY_HOSTMAP: string         = 'Host Mapping';
-  private static providerCategories: string[] = [ ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION,
-                                                  ProviderConfigWizardComponent.CATEGORY_AUTHORIZATION,
-                                                  ProviderConfigWizardComponent.CATEGORY_ID_ASSERTION,
-                                                  ProviderConfigWizardComponent.CATEGORY_WEBAPPSEC,
-                                                  ProviderConfigWizardComponent.CATEGORY_HA,
-                                                  ProviderConfigWizardComponent.CATEGORY_HOSTMAP
-                                                ];
-
-  private static CATEGORY_TYPES: Map<string, CategoryWizard> =
-            new Map([
-              [ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION, new AuthenticationWizard() as CategoryWizard],
-              [ProviderConfigWizardComponent.CATEGORY_AUTHORIZATION,  new AuthorizationWizard() as CategoryWizard],
-              [ProviderConfigWizardComponent.CATEGORY_ID_ASSERTION,   new IdentityAssertionWizard() as CategoryWizard],
-              [ProviderConfigWizardComponent.CATEGORY_HA,             new HaWizard() as CategoryWizard],
-              [ProviderConfigWizardComponent.CATEGORY_WEBAPPSEC,      new WebAppSecurityWizard() as CategoryWizard],
-              [ProviderConfigWizardComponent.CATEGORY_HOSTMAP,        new HostMapProviderWizard() as CategoryWizard]
-            ]);
-
-  @ViewChild('newProviderConfigModal')
-  childModal: BsModalComponent;
-
-  private step: number = 0;
-
-  name: string = '';
-
-  providers: Array<ProviderConfig> = [];
-
-  selectedCategory: string;
-
-  constructor(private resourceTypesService: ResourceTypesService, private resourceService: ResourceService) { }
-
-  ngOnInit() {
-    this.selectedCategory = ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION; // Default to authentication
-  }
-
-  open(size?: string) {
-    this.reset();
-    this.childModal.open(size ? size : 'lg');
-  }
-
-  reset() {
-    this.getCategoryWizard(this.selectedCategory).reset();
-    this.step = 0;
-    this.name = '';
-    this.providers = [];
-    this.selectedCategory = ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION;
-  }
-
-
-  // Type Guard for identifying OrderedParamContainer implementations
-  static isOrderedParamContainer = (x: any): x is OrderedParamContainer => x.orderParams;
-
-  onFinishAdd() {
-    console.debug('ProviderConfigWizard --> Selected provider category: ' + this.selectedCategory);
-
-    let catWizard = this.getCategoryWizard(this.selectedCategory);
-    let type = catWizard ? catWizard.getSelectedType() : 'undefined';
-    console.debug('ProviderConfigWizard --> Selected provider type: ' + type);
-
-    if (catWizard) {
-      let pc: ProviderConfig;
-
-      let isContributed: boolean = false;
-
-      let isContributingWizard: boolean = false;
-
-      if (this.isProviderContributorWizard(catWizard)) {
-        isContributingWizard = true;
-        let contribWiz = catWizard as ProviderContributorWizard;
-        let role = contribWiz.getProviderRole();
-        console.debug('Wizard is ProviderContributorWizard for role ' + role);
-        for (let provider of this.providers) {
-          if (role === provider.role) {
-            console.debug('Found existing provider config for ' + role);
-            pc = provider;
-            break;
-          }
+    private static CATEGORY_STEP = 1;
+    private static TYPE_STEP = 2;
+    private static PARAMS_STEP = 3;
+
+    // Provider Categories
+    private static CATEGORY_AUTHENTICATION = 'Authentication';
+    private static CATEGORY_AUTHORIZATION = 'Authorization';
+    private static CATEGORY_ID_ASSERTION = 'Identity Assertion';
+    private static CATEGORY_HA = 'HA';
+    private static CATEGORY_WEBAPPSEC = 'Web Application Security';
+    private static CATEGORY_HOSTMAP = 'Host Mapping';
+    private static providerCategories: string[] = [ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION,
+        ProviderConfigWizardComponent.CATEGORY_AUTHORIZATION,
+        ProviderConfigWizardComponent.CATEGORY_ID_ASSERTION,
+        ProviderConfigWizardComponent.CATEGORY_WEBAPPSEC,
+        ProviderConfigWizardComponent.CATEGORY_HA,
+        ProviderConfigWizardComponent.CATEGORY_HOSTMAP
+    ];
+
+    private static CATEGORY_TYPES: Map<string, CategoryWizard> =
+        new Map([
+            [ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION, new AuthenticationWizard() as CategoryWizard],
+            [ProviderConfigWizardComponent.CATEGORY_AUTHORIZATION, new AuthorizationWizard() as CategoryWizard],
+            [ProviderConfigWizardComponent.CATEGORY_ID_ASSERTION, new IdentityAssertionWizard() as CategoryWizard],
+            [ProviderConfigWizardComponent.CATEGORY_HA, new HaWizard() as CategoryWizard],
+            [ProviderConfigWizardComponent.CATEGORY_WEBAPPSEC, new WebAppSecurityWizard() as CategoryWizard],
+            [ProviderConfigWizardComponent.CATEGORY_HOSTMAP, new HostMapProviderWizard() as CategoryWizard]
+        ]);
+
+    @ViewChild('newProviderConfigModal')
+    childModal: BsModalComponent;
+
+    private step = 0;
+
+    name = '';
+
+    providers: Array<ProviderConfig> = [];
+
+    selectedCategory: string;
+
+    static isProviderConfigValid(pc: ProviderConfig): boolean {
+        let isValid = true;
+        if (pc instanceof DisplayBindingProviderConfig) {
+            isValid = (pc as DisplayBindingProviderConfig).isValid();
         }
+        return isValid;
+    }
 
-        if (!pc) {
-          console.debug('No existing provider config found for ' + role + ", so creating one...");
-          pc = contribWiz.createNewProviderConfig();
-          this.providers.push(pc);
-        }
+    // Type guard function to determine if a CategoryWizard is a ProviderContributorWizard
+    static isProviderContributorWizard(wizard: any): wizard is ProviderContributorWizard {
+        return (<ProviderContributorWizard>wizard).getProviderRole !== undefined;
+    }
 
-        // If there is an existing provider config of the current type
-        if (pc) {
-          if (this.isProviderConfigValid(catWizard.getProviderConfig())) {
-            contribWiz.contribute(pc);
-            isContributed = true;
-          } else {
-            console.debug('CategoryWizard ProviderConfig is not valid.');
-          }
-        }
-      }
+    // Type Guard for identifying OrderedParamContainer implementations
+    static isOrderedParamContainer = (x: any): x is OrderedParamContainer => x.orderParams;
+
+    constructor(private resourceTypesService: ResourceTypesService, private resourceService: ResourceService) {
+    }
 
-      if (!pc && !isContributingWizard) { // If not a contributing wizard, just use the category wizard's provider config
-        pc = catWizard.getProviderConfig();
-      }
+    ngOnInit() {
+        this.selectedCategory = ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION; // Default to authentication
+    }
+
+    open(size?: string) {
+        this.reset();
+        this.childModal.open(size ? size : 'lg');
+    }
 
-      if (pc && (isContributed || (!isContributingWizard && this.isProviderConfigValid(pc)))) {
-        if (!isContributed) {
-          this.providers.push(pc);
+    reset() {
+        this.getCategoryWizard(this.selectedCategory).reset();
+        this.step = 0;
+        this.name = '';
+        this.providers = [];
+        this.selectedCategory = ProviderConfigWizardComponent.CATEGORY_AUTHENTICATION;
+    }
+
+    onFinishAdd() {
+        console.debug('ProviderConfigWizard --> Selected provider category: ' + this.selectedCategory);
+
+        let catWizard = this.getCategoryWizard(this.selectedCategory);
+        let type = catWizard ? catWizard.getSelectedType() : 'undefined';
+        console.debug('ProviderConfigWizard --> Selected provider type: ' + type);
+
+        if (catWizard) {
+            let pc: ProviderConfig;
+
+            let isContributed = false;
+
+            let isContributingWizard = false;
+
+            if (ProviderConfigWizardComponent.isProviderContributorWizard(catWizard)) {
+                isContributingWizard = true;
+                let contribWiz = catWizard as ProviderContributorWizard;
+                let role = contribWiz.getProviderRole();
+                console.debug('Wizard is ProviderContributorWizard for role ' + role);
+                for (let provider of this.providers) {
+                    if (role === provider.role) {
+                        console.debug('Found existing provider config for ' + role);
+                        pc = provider;
+                        break;
+                    }
+                }
+
+                if (!pc) {
+                    console.debug('No existing provider config found for ' + role + ', so creating one...');
+                    pc = contribWiz.createNewProviderConfig();
+                    this.providers.push(pc);
+                }
+
+                // If there is an existing provider config of the current type
+                if (pc) {
+                    if (ProviderConfigWizardComponent.isProviderConfigValid(catWizard.getProviderConfig())) {
+                        contribWiz.contribute(pc);
+                        isContributed = true;
+                    } else {
+                        console.debug('CategoryWizard ProviderConfig is not valid.');
+                    }
+                }
+            }
+
+            if (!pc && !isContributingWizard) { // If not a contributing wizard, just use the category wizard's provider config
+                pc = catWizard.getProviderConfig();
+            }
+
+            if (pc && (isContributed || (!isContributingWizard && ProviderConfigWizardComponent.isProviderConfigValid(pc)))) {
+                if (!isContributed) {
+                    this.providers.push(pc);
+                }
+                console.debug('ProviderConfigWizard --> Provider: name=' + pc.name + ', role=' + pc.role + ', enabled=' + pc.enabled);
+                if (pc.params) {
+                    // If the provider is managing its own param order, allow it to re-order the params now
+                    if (ProviderConfigWizardComponent.isOrderedParamContainer(pc)) {
+                        pc.params = (pc as OrderedParamContainer).orderParams(pc.params);
+                    }
+
+                    for (let name of Object.getOwnPropertyNames(pc.params)) {
+                        console.debug('\tParam: ' + name + ' = ' + pc.params[name]);
+                    }
+                }
+
+                this.step = 0; // Return to the beginning
+
+                // Clear the wizard state
+                this.getCategoryWizard(this.selectedCategory).reset();
+            } else {
+                console.debug('ProviderConfig is missing or invalid.');
+            }
         }
-        console.debug('ProviderConfigWizard --> Provider: name=' + pc.name + ', role=' + pc.role + ', enabled=' + pc.enabled);
-        if (pc.params) {
-          // If the provider is managing its own param order, allow it to re-order the params now
-          if (ProviderConfigWizardComponent.isOrderedParamContainer(pc)) {
-            pc.params = (pc as OrderedParamContainer).orderParams(pc.params);
-          }
-
-          for (let name of Object.getOwnPropertyNames(pc.params)) {
-            console.debug('\tParam: ' + name + ' = ' + pc.params[name]);
-          }
+    }
+
+    onClose() {
+        // Identify the new resource
+        let newResource = new Resource();
+        newResource.name = this.name + '.json';
+
+        // Make constrained copies of ProviderConfig objects to avoid persisting unwanted object properties
+        let tmp = new Array<ProviderConfig>();
+        for (let p of this.providers) {
+            let pp = new ProviderConfig();
+            pp.role = p.role;
+            pp.name = p.name;
+            pp.enabled = p.enabled;
+            pp.params = p.params;
+            tmp.push(pp);
         }
 
-        this.step = 0; // Return to the beginning
+        // Persist the new provider configuration
+        this.resourceService.createResource('Provider Configurations',
+            newResource,
+            this.resourceService.serializeProviderConfiguration(tmp, 'json'))
+            .then(() => {
+                // Reload the resource list presentation
+                this.resourceTypesService.selectResourceType('Provider Configurations');
+
+                // Set the new descriptor as the selected resource
+                this.resourceService.getProviderConfigResources().then(resources => {
+                    for (let res of resources) {
+                        if (res.name === newResource.name) {
+                            this.resourceService.selectedResource(res);
+                            break;
+                        }
+                    }
+                });
+            });
+    }
 
-        // Clear the wizard state
-        this.getCategoryWizard(this.selectedCategory).reset();
-      } else {
-        console.debug('ProviderConfig is missing or invalid.');
-      }
+    onNextStep() {
+        ++this.step;
     }
-  }
-
-  onClose() {
-    // Identify the new resource
-    let newResource = new Resource();
-    newResource.name = this.name + '.json';
-
-    // Make constrained copies of ProviderConfig objects to avoid persisting unwanted object properties
-    let tmp = new Array<ProviderConfig>();
-    for (let p of this.providers) {
-      let pp = new ProviderConfig();
-      pp.role = p.role;
-      pp.name = p.name;
-      pp.enabled = p.enabled;
-      pp.params = p.params;
-      tmp.push(pp);
+
+    onPreviousStep() {
+        --this.step;
     }
 
-    // Persist the new provider configuration
-    this.resourceService.createResource('Provider Configurations',
-                                        newResource,
-                                        this.resourceService.serializeProviderConfiguration(tmp, 'json'))
-                        .then(() => {
-                            // Reload the resource list presentation
-                            this.resourceTypesService.selectResourceType('Provider Configurations');
-
-                            // Set the new descriptor as the selected resource
-                            this.resourceService.getProviderConfigResources().then(resources => {
-                              for (let res of resources) {
-                                if (res.name === newResource.name) {
-                                  this.resourceService.selectedResource(res);
-                                  break;
-                                }
-                              }
-                            });
-                        });
-  }
-
-  getStep(): number {
-    return this.step;
-  }
-
-  onNextStep() {
-    ++this.step;
-  }
-
-  onPreviousStep() {
-    --this.step;
-  }
-
-  hasMoreSteps(): boolean {
-    let result = false;
-    let catWizard = this.getCategoryWizard(this.selectedCategory);
-    if (catWizard) {
-      result = (this.step < (catWizard.getSteps() - 1));
-      if (result) {
-        if (this.isProviderTypeStep()) { // Next step would be params
-          // Check for the need to display the params step
-          let pc = catWizard.getProviderConfig();
-          if (pc && pc instanceof DisplayBindingProviderConfig) {
-            let propNames: string[] = (pc as DisplayBindingProviderConfig).getDisplayPropertyNames();
-            result = propNames.length > 0;
-          }
+    hasMoreSteps(): boolean {
+        let result = false;
+        let catWizard = this.getCategoryWizard(this.selectedCategory);
+        if (catWizard) {
+            result = (this.step < (catWizard.getSteps() - 1));
+            if (result) {
+                if (this.isProviderTypeStep()) { // Next step would be params
+                    // Check for the need to display the params step
+                    let pc = catWizard.getProviderConfig();
+                    if (pc && pc instanceof DisplayBindingProviderConfig) {
+                        let propNames: string[] = (pc as DisplayBindingProviderConfig).getDisplayPropertyNames();
+                        result = propNames.length > 0;
+                    }
+                }
+            }
         }
-      }
+        return result;
+    }
+
+    isRootStep(): boolean {
+        return (this.step === 0);
     }
-    return result;
-  }
-
-  isRootStep(): boolean {
-    return (this.step === 0);
-  }
-
-  isProviderCategoryStep(): boolean {
-    return (this.step === ProviderConfigWizardComponent.CATEGORY_STEP);
-  }
-
-  isProviderTypeStep(): boolean {
-    return (this.step === ProviderConfigWizardComponent.TYPE_STEP);
-  }
-
-  isProviderParamsStep(): boolean {
-    return (this.step === ProviderConfigWizardComponent.PARAMS_STEP);
-  }
-
-  getProviderCategories() : string[] {
-    return ProviderConfigWizardComponent.providerCategories;
-  }
-
-  getCategoryWizard(category?: string): CategoryWizard {
-    return ProviderConfigWizardComponent.CATEGORY_TYPES.get(category ? category : this.selectedCategory);
-  }
-
-  // Type guard function to determine if a CategoryWizard is a ProviderContributorWizard
-  isProviderContributorWizard(wizard: any): wizard is ProviderContributorWizard {
-    return (<ProviderContributorWizard>wizard).getProviderRole !== undefined;
-  }
-
-  getProviderTypes(category?: string) : string[] {
-    let catWizard = this.getCategoryWizard(category);
-    if (catWizard) {
-      return catWizard.getTypes();
-    } else {
-      console.debug('ProviderConfigWizard --> Unresolved category wizard for ' + (category ? category : this.selectedCategory));
+
+    isProviderCategoryStep(): boolean {
+        return (this.step === ProviderConfigWizardComponent.CATEGORY_STEP);
     }
-    return [];
-  }
-
-  getProviderParams(): string[] {
-    let catWizard = this.getCategoryWizard();
-    if (catWizard) {
-      let pc = catWizard.getProviderConfig();
-      if (pc) {
-        if (pc instanceof DisplayBindingProviderConfig) {
-          let dispPC = pc as DisplayBindingProviderConfig;
-          return dispPC.getDisplayPropertyNames();
+
+    isProviderTypeStep(): boolean {
+        return (this.step === ProviderConfigWizardComponent.TYPE_STEP);
+    }
+
+    isProviderParamsStep(): boolean {
+        return (this.step === ProviderConfigWizardComponent.PARAMS_STEP);
+    }
+
+    getProviderCategories(): string[] {
+        return ProviderConfigWizardComponent.providerCategories;
+    }
+
+    getCategoryWizard(category?: string): CategoryWizard {
+        return ProviderConfigWizardComponent.CATEGORY_TYPES.get(category ? category : this.selectedCategory);
+    }
+
+    getProviderTypes(category?: string): string[] {
+        let catWizard = this.getCategoryWizard(category);
+        if (catWizard) {
+            return catWizard.getTypes();
         } else {
-          return [];
+            console.debug('ProviderConfigWizard --> Unresolved category wizard for ' + (category ? category : this.selectedCategory));
         }
-      } else {
-        console.log('ProviderConfigWizard --> No provider config from category wizard ' + typeof(catWizard));
-      }
-    } else {
-      console.debug('ProviderConfigWizard --> Unresolved category wizard for ' + this.selectedCategory);
+        return [];
     }
-    return [];
-  }
-
-  setProviderParamBinding(name: string, value: string) {
-    let catWizard = this.getCategoryWizard();
-    if (catWizard) {
-      let pc = catWizard.getProviderConfig();
-      if (pc) {
-        if (pc instanceof DisplayBindingProviderConfig) {
-          let property = (pc as DisplayBindingProviderConfig).getDisplayNamePropertyBinding(name);
-          if (property) {
-            pc.setParam(property, value);
-            console.debug('ProviderConfigWizard --> Set ProviderConfig param value: ' + property + '=' + value);
-          } else {
-            console.debug('ProviderConfigWizard --> No provider property configured for ' + name);
-          }
+
+    getProviderParams(): string[] {
+        let catWizard = this.getCategoryWizard();
+        if (catWizard) {
+            let pc = catWizard.getProviderConfig();
+            if (pc) {
+                if (pc instanceof DisplayBindingProviderConfig) {
+                    let dispPC = pc as DisplayBindingProviderConfig;
+                    return dispPC.getDisplayPropertyNames();
+                } else {
+                    return [];
+                }
+            } else {
+                console.log('ProviderConfigWizard --> No provider config from category wizard ' + typeof (catWizard));
+            }
+        } else {
+            console.debug('ProviderConfigWizard --> Unresolved category wizard for ' + this.selectedCategory);
         }
-      }
+        return [];
     }
-  }
 
-  getProviderParamBinding(name: string): string {
-    let catWizard = this.getCategoryWizard();
-    if (catWizard) {
-      let pc = catWizard.getProviderConfig();
-      if (pc) {
-        if (pc instanceof DisplayBindingProviderConfig) {
-          let dispPC = pc as DisplayBindingProviderConfig;
-          let value = pc.getParam(dispPC.getDisplayNamePropertyBinding(name));
-          return (value ? value : '');
+    setProviderParamBinding(name: string, value: string) {
+        let catWizard = this.getCategoryWizard();
+        if (catWizard) {
+            let pc = catWizard.getProviderConfig();
+            if (pc) {
+                if (pc instanceof DisplayBindingProviderConfig) {
+                    let property = (pc as DisplayBindingProviderConfig).getDisplayNamePropertyBinding(name);
+                    if (property) {
+                        pc.setParam(property, value);
+                        console.debug('ProviderConfigWizard --> Set ProviderConfig param value: ' + property + '=' + value);
+                    } else {
+                        console.debug('ProviderConfigWizard --> No provider property configured for ' + name);
+                    }
+                }
+            }
         }
-      }
-    }
-    return '';
-  }
-
-  getConfiguredProviderDisplayNames(): string[] {
-    let result: string[] = [];
-
-    for (let p of this.providers) {
-      let pName: string;
-      let pRole: string;
-      if (p instanceof DisplayBindingProviderConfig) {
-        pName = (p as DisplayBindingProviderConfig).getType();
-        pRole = p.getRole();
-      } else {
-        pName = p.name;
-        pRole = p.role;
-      }
-      result.push(pName + ' (' + pRole + ')');
     }
 
-    return result;
-  }
+    getProviderParamBinding(name: string): string {
+        let catWizard = this.getCategoryWizard();
+        if (catWizard) {
+            let pc = catWizard.getProviderConfig();
+            if (pc) {
+                if (pc instanceof DisplayBindingProviderConfig) {
+                    let dispPC = pc as DisplayBindingProviderConfig;
+                    let value = pc.getParam(dispPC.getDisplayNamePropertyBinding(name));
+                    return (value ? value : '');
+                }
+            }
+        }
+        return '';
+    }
 
-  isValidProviderConfigName(): boolean {
-    return ValidationUtils.isValidResourceName(this.name);
-  }
+    getConfiguredProviderDisplayNames(): string[] {
+        let result: string[] = [];
+
+        for (let p of this.providers) {
+            let pName: string;
+            let pRole: string;
+            if (p instanceof DisplayBindingProviderConfig) {
+                pName = (p as DisplayBindingProviderConfig).getType();
+                pRole = p.getRole();
+            } else {
+                pName = p.name;
+                pRole = p.role;
+            }
+            result.push(pName + ' (' + pRole + ')');
+        }
 
-  isPasswordParam(name: string) {
-    let result: boolean = false;
+        return result;
+    }
 
-    let p = this.getCategoryWizard().getProviderConfig();
-    if (p && p instanceof DisplayBindingProviderConfig) {
-      result = (p as DisplayBindingProviderConfig).isPasswordParam(name);
+    isValidProviderConfigName(): boolean {
+        return ValidationUtils.isValidResourceName(this.name);
     }
 
-    return result;
-  }
+    isPasswordParam(name: string) {
+        let result = false;
 
-  isValidParamValue(paramName: string) {
-    let isValid: boolean = true;
-    let pc: ProviderConfig = this.getCategoryWizard().getProviderConfig();
-    if (pc) {
-      if (pc instanceof DisplayBindingProviderConfig) {
-        isValid = (pc as DisplayBindingProviderConfig).isValidParamValue(paramName);
-      }
+        let p = this.getCategoryWizard().getProviderConfig();
+        if (p && p instanceof DisplayBindingProviderConfig) {
+            result = (p as DisplayBindingProviderConfig).isPasswordParam(name);
+        }
+
+        return result;
     }
-    return isValid;
-  }
 
-  isProviderConfigValid(pc: ProviderConfig): boolean {
-    let isValid: boolean = true;
-    if (pc instanceof DisplayBindingProviderConfig) {
-      isValid = (pc as DisplayBindingProviderConfig).isValid();
+    isValidParamValue(paramName: string) {
+        let isValid = true;
+        let pc: ProviderConfig = this.getCategoryWizard().getProviderConfig();
+        if (pc) {
+            if (pc instanceof DisplayBindingProviderConfig) {
+                isValid = (pc as DisplayBindingProviderConfig).isValidParamValue(paramName);
+            }
+        }
+        return isValid;
     }
-    return isValid;
-  }
 
-  togglePasswordDisplay(propertyName: string) {
-    this['show' + propertyName] = !this['show' + propertyName];
-  }
+    togglePasswordDisplay(propertyName: string) {
+        this['show' + propertyName] = !this['show' + propertyName];
+    }
 
-  getPasswordDisplay(propertName: string): boolean {
-    return this['show' + propertName];
-  }
+    getPasswordDisplay(propertName: string): boolean {
+        return this['show' + propertName];
+    }
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-contributor-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-contributor-wizard.ts
index 957d8c4..59062bd 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-contributor-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/provider-contributor-wizard.ts
@@ -16,17 +16,17 @@
  */
 
 
-import {ProviderConfig} from "../resource-detail/provider-config";
+import {ProviderConfig} from '../resource-detail/provider-config';
 
 export interface ProviderContributorWizard {
 
-  // Returns the type of provider to which the implementation contributes
-  getProviderRole() : string;
+    // Returns the type of provider to which the implementation contributes
+    getProviderRole(): string;
 
-  // Contribute the wizard state to the specified provider
-  contribute(providerConfig: ProviderConfig);
+    // Contribute the wizard state to the specified provider
+    contribute(providerConfig: ProviderConfig);
 
-  // Create a new ProviderConfig of the type to which the implementation can contribute
-  createNewProviderConfig(): ProviderConfig;
+    // Create a new ProviderConfig of the type to which the implementation can contribute
+    createNewProviderConfig(): ProviderConfig;
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/regex-idassertion-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/regex-idassertion-provider-config.ts
index cdf6685..a1fd387 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/regex-idassertion-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/regex-idassertion-provider-config.ts
@@ -15,68 +15,66 @@
  * limitations under the License.
  */
 
-import {IdentityAssertionProviderConfig} from "./identity-assertion-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class RegexAssertionProviderConfig extends IdentityAssertionProviderConfig {
+    private static INPUT = 'Input';
+    private static OUTPUT = 'Output';
+    private static LOOKUP = 'Lookup';
+    private static ORIG_ON_FAIL = 'Use Original Lookup on Failure';
 
-  private static INPUT        = 'Input';
-  private static OUTPUT       = 'Output';
-  private static LOOKUP       = "Lookup";
-  private static ORIG_ON_FAIL = "Use Original Lookup on Failure";
+    private static displayPropertyNames = [RegexAssertionProviderConfig.INPUT,
+        RegexAssertionProviderConfig.OUTPUT,
+        RegexAssertionProviderConfig.LOOKUP,
+        RegexAssertionProviderConfig.ORIG_ON_FAIL
+    ];
 
-  private static displayPropertyNames = [ RegexAssertionProviderConfig.INPUT,
-                                          RegexAssertionProviderConfig.OUTPUT,
-                                          RegexAssertionProviderConfig.LOOKUP,
-                                          RegexAssertionProviderConfig.ORIG_ON_FAIL
-                                        ];
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [RegexAssertionProviderConfig.INPUT, 'input'],
+            [RegexAssertionProviderConfig.OUTPUT, 'output'],
+            [RegexAssertionProviderConfig.LOOKUP, 'lookup'],
+            [RegexAssertionProviderConfig.ORIG_ON_FAIL, 'use.original.on.lookup.failure']
+        ]);
 
-  private static displayPropertyNameBindings: Map<string, string> =
-                                        new Map([
-                                          [RegexAssertionProviderConfig.INPUT,        'input'],
-                                          [RegexAssertionProviderConfig.OUTPUT,       'output'],
-                                          [RegexAssertionProviderConfig.LOOKUP,       'lookup'],
-                                          [RegexAssertionProviderConfig.ORIG_ON_FAIL, 'use.original.on.lookup.failure']
-                                        ]);
+    constructor() {
+        super('Regex');
+    }
 
-  constructor() {
-    super('Regex');
-  }
+    getDisplayPropertyNames(): string[] {
+        return RegexAssertionProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return RegexAssertionProviderConfig.displayPropertyNames;
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return RegexAssertionProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return RegexAssertionProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+        switch (paramName) {
+            case RegexAssertionProviderConfig.ORIG_ON_FAIL:
+                isValid = this.isValidUseOriginal();
+                break;
+            default:
+                isValid = true;
+        }
 
-    switch (paramName) {
-      case RegexAssertionProviderConfig.ORIG_ON_FAIL:
-        isValid = this.isValidUseOriginal();
-        break;
-      default:
-        isValid = true;
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidUseOriginal(): boolean {
+        let isValid = true;
 
-  private isValidUseOriginal(): boolean {
-    let isValid: boolean = true;
+        let useOrig = this.getParam(this.getDisplayNamePropertyBinding(RegexAssertionProviderConfig.ORIG_ON_FAIL));
+        if (useOrig) {
+            isValid = ValidationUtils.isValidBoolean(useOrig);
+            if (!isValid) {
+                console.debug(RegexAssertionProviderConfig.ORIG_ON_FAIL + ' value is not a valid boolean.');
+            }
+        }
 
-    let useOrig = this.getParam(this.getDisplayNamePropertyBinding(RegexAssertionProviderConfig.ORIG_ON_FAIL));
-    if (useOrig) {
-      isValid = ValidationUtils.isValidBoolean(useOrig);
-      if (!isValid) {
-        console.debug(RegexAssertionProviderConfig.ORIG_ON_FAIL + ' value is not a valid boolean.')
-      }
+        return isValid;
     }
-
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/saml-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/saml-provider-config.ts
index 78f7d8f..e73dbbc 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/saml-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/saml-provider-config.ts
@@ -15,108 +15,108 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class SAMLProviderConfig extends AuthenticationProviderConfig {
 
-  static CALLBACK_URL          = 'Callback URL';
-  static KEYSTORE_PATH         = 'Keystore Path';
-  static KEYSTORE_PASS         = 'Keystore Password';
-  static PK_PASS               = 'Private Key Password';
-  static ID_PROVIDER_META      = 'Identity Provider Metadata Path';
-  static MAX_AUTH_LIFETIME     = 'Maximum Authentication Lifetime';
-  static SERVICE_PROVIDER_ID   = 'Service Provider Identity';
-  static SERVICE_PROVIDER_META = 'Service Provider Metadata Path';
-  static COOKIE_DOMAIN_SUFFIX = 'Cookie Domain Suffix';
-
-
-  private static displayPropertyNames = [ SAMLProviderConfig.CALLBACK_URL,
-                                          SAMLProviderConfig.KEYSTORE_PATH,
-                                          SAMLProviderConfig.KEYSTORE_PASS,
-                                          SAMLProviderConfig.PK_PASS,
-                                          SAMLProviderConfig.ID_PROVIDER_META,
-                                          SAMLProviderConfig.MAX_AUTH_LIFETIME,
-                                          SAMLProviderConfig.SERVICE_PROVIDER_ID,
-                                          SAMLProviderConfig.SERVICE_PROVIDER_META,
-                                          SAMLProviderConfig.COOKIE_DOMAIN_SUFFIX
-                                        ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                                    new Map([
-                                      [SAMLProviderConfig.CALLBACK_URL,          'pac4j.callbackUrl'],
-                                      [SAMLProviderConfig.COOKIE_DOMAIN_SUFFIX,  'pac4j.cookie.domain.suffix'],
-                                      [SAMLProviderConfig.KEYSTORE_PATH,         'saml.keystorePath'],
-                                      [SAMLProviderConfig.KEYSTORE_PASS,         'saml.keystorePassword'],
-                                      [SAMLProviderConfig.PK_PASS,               'saml.privateKeyPassword'],
-                                      [SAMLProviderConfig.ID_PROVIDER_META,      'saml.identityProviderMetadataPath'],
-                                      [SAMLProviderConfig.MAX_AUTH_LIFETIME,     'saml.maximumAuthenticationLifetime'],
-                                      [SAMLProviderConfig.SERVICE_PROVIDER_ID,   'saml.serviceProviderEntityId'],
-                                      [SAMLProviderConfig.SERVICE_PROVIDER_META, 'saml.serviceProviderMetadataPath']
-                                    ]);
-
-
-  private static SECRET_PROPERTIES: string[] = [ SAMLProviderConfig.KEYSTORE_PASS, SAMLProviderConfig.PK_PASS ];
-
-  constructor() {
-    super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return SAMLProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string) {
-    return SAMLProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  isPasswordParam(name: string): boolean {
-    return (name && SAMLProviderConfig.SECRET_PROPERTIES.indexOf(name) > -1);
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
-
-    switch (paramName) {
-      case SAMLProviderConfig.CALLBACK_URL:
-        isValid = this.isValidCallbackURL();
-        break;
-      case SAMLProviderConfig.MAX_AUTH_LIFETIME:
-        isValid = this.isValidMaxAuthLifetime();
-        break;
-      default:
-        isValid = true;
+    static CALLBACK_URL = 'Callback URL';
+    static KEYSTORE_PATH = 'Keystore Path';
+    static KEYSTORE_PASS = 'Keystore Password';
+    static PK_PASS = 'Private Key Password';
+    static ID_PROVIDER_META = 'Identity Provider Metadata Path';
+    static MAX_AUTH_LIFETIME = 'Maximum Authentication Lifetime';
+    static SERVICE_PROVIDER_ID = 'Service Provider Identity';
+    static SERVICE_PROVIDER_META = 'Service Provider Metadata Path';
+    static COOKIE_DOMAIN_SUFFIX = 'Cookie Domain Suffix';
+
+
+    private static displayPropertyNames = [SAMLProviderConfig.CALLBACK_URL,
+        SAMLProviderConfig.KEYSTORE_PATH,
+        SAMLProviderConfig.KEYSTORE_PASS,
+        SAMLProviderConfig.PK_PASS,
+        SAMLProviderConfig.ID_PROVIDER_META,
+        SAMLProviderConfig.MAX_AUTH_LIFETIME,
+        SAMLProviderConfig.SERVICE_PROVIDER_ID,
+        SAMLProviderConfig.SERVICE_PROVIDER_META,
+        SAMLProviderConfig.COOKIE_DOMAIN_SUFFIX
+    ];
+
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [SAMLProviderConfig.CALLBACK_URL, 'pac4j.callbackUrl'],
+            [SAMLProviderConfig.COOKIE_DOMAIN_SUFFIX, 'pac4j.cookie.domain.suffix'],
+            [SAMLProviderConfig.KEYSTORE_PATH, 'saml.keystorePath'],
+            [SAMLProviderConfig.KEYSTORE_PASS, 'saml.keystorePassword'],
+            [SAMLProviderConfig.PK_PASS, 'saml.privateKeyPassword'],
+            [SAMLProviderConfig.ID_PROVIDER_META, 'saml.identityProviderMetadataPath'],
+            [SAMLProviderConfig.MAX_AUTH_LIFETIME, 'saml.maximumAuthenticationLifetime'],
+            [SAMLProviderConfig.SERVICE_PROVIDER_ID, 'saml.serviceProviderEntityId'],
+            [SAMLProviderConfig.SERVICE_PROVIDER_META, 'saml.serviceProviderMetadataPath']
+        ]);
+
+
+    private static SECRET_PROPERTIES: string[] = [SAMLProviderConfig.KEYSTORE_PASS, SAMLProviderConfig.PK_PASS];
+
+    constructor() {
+        super('pac4j', AuthenticationProviderConfig.FEDERATION_ROLE);
     }
 
-    return isValid;
-  }
+    getDisplayPropertyNames(): string[] {
+        return SAMLProviderConfig.displayPropertyNames;
+    }
+
+    getDisplayNamePropertyBinding(name: string) {
+        return SAMLProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  private isValidCallbackURL(): boolean {
-    let isValid: boolean = true;
+    isPasswordParam(name: string): boolean {
+        return (name && SAMLProviderConfig.SECRET_PROPERTIES.indexOf(name) > -1);
+    }
 
-    let url = this.getParam(this.getDisplayNamePropertyBinding(SAMLProviderConfig.CALLBACK_URL));
-    if (url) {
-      isValid = ValidationUtils.isValidHttpURL(url);
-      if (!isValid) {
-        console.debug(SAMLProviderConfig.CALLBACK_URL + ' value is not a valid URL.');
-      }
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
+
+        switch (paramName) {
+            case SAMLProviderConfig.CALLBACK_URL:
+                isValid = this.isValidCallbackURL();
+                break;
+            case SAMLProviderConfig.MAX_AUTH_LIFETIME:
+                isValid = this.isValidMaxAuthLifetime();
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidCallbackURL(): boolean {
+        let isValid = true;
 
-  private isValidMaxAuthLifetime(): boolean {
-    let isValid: boolean = true;
+        let url = this.getParam(this.getDisplayNamePropertyBinding(SAMLProviderConfig.CALLBACK_URL));
+        if (url) {
+            isValid = ValidationUtils.isValidHttpURL(url);
+            if (!isValid) {
+                console.debug(SAMLProviderConfig.CALLBACK_URL + ' value is not a valid URL.');
+            }
+        }
 
-    let malt = this.getParam(this.getDisplayNamePropertyBinding(SAMLProviderConfig.MAX_AUTH_LIFETIME));
-    if (malt) {
-      isValid = ValidationUtils.isValidNumber(malt);
-      if (!isValid) {
-        console.debug(SAMLProviderConfig.MAX_AUTH_LIFETIME + ' value is not a valid number.');
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidMaxAuthLifetime(): boolean {
+        let isValid = true;
+
+        let malt = this.getParam(this.getDisplayNamePropertyBinding(SAMLProviderConfig.MAX_AUTH_LIFETIME));
+        if (malt) {
+            isValid = ValidationUtils.isValidNumber(malt);
+            if (!isValid) {
+                console.debug(SAMLProviderConfig.MAX_AUTH_LIFETIME + ' value is not a valid number.');
+            }
+        }
+
+        return isValid;
+    }
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/sso-cookie-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/sso-cookie-provider-config.ts
index 3ec308b..9ce9d14 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/sso-cookie-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/sso-cookie-provider-config.ts
@@ -15,57 +15,54 @@
  * limitations under the License.
  */
 
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {ValidationUtils} from "../utils/validation-utils";
+import {AuthenticationProviderConfig} from './authentication-provider-config';
+import {ValidationUtils} from '../utils/validation-utils';
 
 export class SSOCookieProviderConfig extends AuthenticationProviderConfig {
+    static PROVIDER_URL = 'Provider URL';
 
-  static PROVIDER_URL  = 'Provider URL';
+    private static displayPropertyNames = [SSOCookieProviderConfig.PROVIDER_URL];
 
-  private static displayPropertyNames = [ SSOCookieProviderConfig.PROVIDER_URL ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-                    new Map([ [SSOCookieProviderConfig.PROVIDER_URL, 'sso.authentication.provider.url'] ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([[SSOCookieProviderConfig.PROVIDER_URL, 'sso.authentication.provider.url']]);
 
+    constructor() {
+        console.debug('new SSOCookieProviderConfig()');
+        super('SSOCookieProvider', AuthenticationProviderConfig.FEDERATION_ROLE);
+    }
 
-  constructor() {
-    console.debug('new SSOCookieProviderConfig()');
-    super('SSOCookieProvider', AuthenticationProviderConfig.FEDERATION_ROLE);
-  }
+    getDisplayPropertyNames(): string[] {
+        return SSOCookieProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return SSOCookieProviderConfig.displayPropertyNames;
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return SSOCookieProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return SSOCookieProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+        switch (paramName) {
+            case SSOCookieProviderConfig.PROVIDER_URL:
+                isValid = this.isValidProviderURL();
+                break;
+            default:
+                isValid = true;
+        }
 
-    switch (paramName) {
-      case SSOCookieProviderConfig.PROVIDER_URL:
-        isValid = this.isValidProviderURL();
-        break;
-      default:
-        isValid = true;
+        return isValid;
     }
 
-    return isValid;
-  }
-
-  private isValidProviderURL(): boolean {
-    let isValid: boolean = true;
+    private isValidProviderURL(): boolean {
+        let isValid = true;
 
-    let url = this.getParam(this.getDisplayNamePropertyBinding(SSOCookieProviderConfig.PROVIDER_URL));
-    if (url) {
-      isValid = ValidationUtils.isValidHttpURL(url);
-      if (!isValid) {
-        console.debug(SSOCookieProviderConfig.PROVIDER_URL + ' value is not a valid URL.');
-      }
+        let url = this.getParam(this.getDisplayNamePropertyBinding(SSOCookieProviderConfig.PROVIDER_URL));
+        if (url) {
+            isValid = ValidationUtils.isValidHttpURL(url);
+            if (!isValid) {
+                console.debug(SSOCookieProviderConfig.PROVIDER_URL + ' value is not a valid URL.');
+            }
+        }
+        return isValid;
     }
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/sts-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/sts-provider-config.ts
index e52db77..ffe673b 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/sts-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/sts-provider-config.ts
@@ -15,50 +15,46 @@
  * limitations under the License.
  */
 
-import {ValidationUtils} from "../utils/validation-utils";
-import {WebAppSecurityContributor} from "./webappsec-contributor";
+import {ValidationUtils} from '../utils/validation-utils';
+import {WebAppSecurityContributor} from './webappsec-contributor';
 
 export class STSProviderConfig extends WebAppSecurityContributor {
+    public static STS = 'Strict-Transport-Security Header';
 
-  public static TYPE: string = 'cors';
+    private static displayPropertyNames = [STSProviderConfig.STS];
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([[STSProviderConfig.STS, 'strict.transport']] as [string, string][]);
 
-  public static STS: string = 'Strict-Transport-Security Header';
-
-  private static displayPropertyNames = [ STSProviderConfig.STS ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([ [STSProviderConfig.STS, 'strict.transport'] ] as [string, string][]);
+    constructor() {
+        super();
+        // Set the default values
+        this.setParam('strict.transport.enabled', 'true');
+        this.setParam(STSProviderConfig.displayPropertyNameBindings.get(STSProviderConfig.STS), 'max-age=31536000');
+    }
 
-  constructor() {
-    super();
-    // Set the default values
-    this.setParam('strict.transport.enabled', 'true');
-    this.setParam(STSProviderConfig.displayPropertyNameBindings.get(STSProviderConfig.STS), 'max-age=31536000');
-  }
+    getDisplayPropertyNames(): string[] {
+        return STSProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return STSProviderConfig.displayPropertyNames;
-  }
+    getDisplayNamePropertyBinding(name: string): string {
+        return STSProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  getDisplayNamePropertyBinding(name: string): string {
-    return STSProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
+        let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
+        if (value) {
+            switch (paramName) {
+                case STSProviderConfig.STS:
+                    isValid = ValidationUtils.isValidString(value);
+                    break;
+                default:
+            }
+        }
 
-    let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
-    if (value) {
-      switch (paramName) {
-        case STSProviderConfig.STS:
-          isValid = ValidationUtils.isValidString(value);
-          break;
-        default:
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
-
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/switchcase-idassertion-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/switchcase-idassertion-provider-config.ts
index 65ac856..5f292ba 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/switchcase-idassertion-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/switchcase-idassertion-provider-config.ts
@@ -15,64 +15,64 @@
  * limitations under the License.
  */
 
-import {IdentityAssertionProviderConfig} from "./identity-assertion-provider-config";
+import {IdentityAssertionProviderConfig} from './identity-assertion-provider-config';
 
 export class SwitchCaseAssertionProviderConfig extends IdentityAssertionProviderConfig {
 
-  private static CASE_VALUES: string[] = [ 'upper', 'lower' ];
+    private static CASE_VALUES: string[] = ['upper', 'lower'];
 
-  private static PRINCIPAL_CASE       = 'Principal Case';
-  private static GROUP_PRINCIPAL_CASE = 'Group Principal Case';
+    private static PRINCIPAL_CASE = 'Principal Case';
+    private static GROUP_PRINCIPAL_CASE = 'Group Principal Case';
 
-  private static displayPropertyNames = [ SwitchCaseAssertionProviderConfig.PRINCIPAL_CASE,
-                                          SwitchCaseAssertionProviderConfig.GROUP_PRINCIPAL_CASE
-                                        ];
+    private static displayPropertyNames = [SwitchCaseAssertionProviderConfig.PRINCIPAL_CASE,
+        SwitchCaseAssertionProviderConfig.GROUP_PRINCIPAL_CASE
+    ];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-                                    new Map([
-                                      [SwitchCaseAssertionProviderConfig.PRINCIPAL_CASE,       'principal.case'],
-                                      [SwitchCaseAssertionProviderConfig.GROUP_PRINCIPAL_CASE, 'group.principal.case']
-                                    ]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([
+            [SwitchCaseAssertionProviderConfig.PRINCIPAL_CASE, 'principal.case'],
+            [SwitchCaseAssertionProviderConfig.GROUP_PRINCIPAL_CASE, 'group.principal.case']
+        ]);
 
-  constructor() {
-    super('SwitchCase');
-  }
+    constructor() {
+        super('SwitchCase');
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return SwitchCaseAssertionProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return SwitchCaseAssertionProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string) {
-    return SwitchCaseAssertionProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string) {
+        return SwitchCaseAssertionProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean;
+    isValidParamValue(paramName: string): boolean {
+        let isValid: boolean;
 
-    switch (paramName) {
-      case SwitchCaseAssertionProviderConfig.PRINCIPAL_CASE:
-      case SwitchCaseAssertionProviderConfig.GROUP_PRINCIPAL_CASE:
-        isValid = this.isValidCase(paramName);
-        break;
-      default:
-        isValid = true;
+        switch (paramName) {
+            case SwitchCaseAssertionProviderConfig.PRINCIPAL_CASE:
+            case SwitchCaseAssertionProviderConfig.GROUP_PRINCIPAL_CASE:
+                isValid = this.isValidCase(paramName);
+                break;
+            default:
+                isValid = true;
+        }
+
+        return isValid;
     }
 
-    return isValid;
-  }
+    private isValidCase(param: string): boolean {
+        let isValid = true;
 
-  private isValidCase(param: string): boolean {
-    let isValid: boolean = true;
+        let value = this.getParam(this.getDisplayNamePropertyBinding(param));
+        if (value) {
+            isValid = (SwitchCaseAssertionProviderConfig.CASE_VALUES.indexOf(value.toLowerCase()) > -1);
+            if (!isValid) {
+                console.debug(param + ' value is not a valid case: ' + SwitchCaseAssertionProviderConfig.CASE_VALUES.toString());
+            }
+        }
 
-    let value = this.getParam(this.getDisplayNamePropertyBinding(param));
-    if (value) {
-      isValid = (SwitchCaseAssertionProviderConfig.CASE_VALUES.indexOf(value.toLowerCase()) > -1);
-      if (!isValid) {
-        console.debug(param + ' value is not a valid case: ' + SwitchCaseAssertionProviderConfig.CASE_VALUES.toString());
-      }
+        return isValid;
     }
 
-    return isValid;
-  }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-contributor.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-contributor.ts
index 04233ba..4d1b3af 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-contributor.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-contributor.ts
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export abstract class WebAppSecurityContributor extends DisplayBindingProviderConfig {
 
-  constructor() {
-    super();
-    this.params = new Map<string, string>();
-  }
+    constructor() {
+        super();
+        this.params = new Map<string, string>();
+    }
 
 }
 
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-provider-config.ts
index 3b7cc6e..1825034 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-provider-config.ts
@@ -15,27 +15,25 @@
  * limitations under the License.
  */
 
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
 
 export class WebAppSecurityProviderConfig extends DisplayBindingProviderConfig {
+    public static TYPE = 'WebAppSec';
 
-  public static TYPE: string = 'WebAppSec';
+    constructor() {
+        super();
+        this.setType(WebAppSecurityProviderConfig.TYPE);
+        this.enabled = 'true';
+        this.name = WebAppSecurityProviderConfig.TYPE;
+        this.role = 'webappsec';
+        this.params = new Map<string, string>();
+    }
 
-  constructor() {
-    super();
-    this.setType(WebAppSecurityProviderConfig.TYPE);
-    this.enabled = 'true';
-    this.name = WebAppSecurityProviderConfig.TYPE;
-    this.role = 'webappsec';
-    this.params = new Map<string, string>();
-  }
+    getDisplayPropertyNames(): string[] {
+        return [];
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return [];
-  }
-
-  getDisplayNamePropertyBinding(name: string): string {
-    return null;
-  }
-
-}
\ No newline at end of file
+    getDisplayNamePropertyBinding(name: string): string {
+        return null;
+    }
+}
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-wizard.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-wizard.ts
index 8c6f496..f67196a 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-wizard.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/webappsec-wizard.ts
@@ -15,98 +15,81 @@
  * limitations under the License.
  */
 
-import {CategoryWizard} from "./category-wizard";
-import {ProviderConfig} from "../resource-detail/provider-config";
-import {ProviderContributorWizard} from "./provider-contributor-wizard";
-import {HaProviderConfig} from "./ha-provider-config";
-import {DisplayBindingProviderConfig} from "./display-binding-provider-config";
-import {HaWizard} from "./ha-wizard";
-import {WebAppSecurityProviderConfig} from "./webappsec-provider-config";
-import {OIDCProviderConfig} from "./oidc-provider-config";
-import {JWTProviderConfig} from "./jwt-provider-config";
-import {SAMLProviderConfig} from "./saml-provider-config";
-import {OAUTHProviderConfig} from "./oauth-provider-config";
-import {PreAuthSSOProviderConfig} from "./preauth-sso-provider-config";
-import {AuthenticationProviderConfig} from "./authentication-provider-config";
-import {AuthenticationWizard} from "./authentication-wizard";
-import {CASProviderConfig} from "./cas-provider-config";
-import {SSOCookieProviderConfig} from "./sso-cookie-provider-config";
-import {LDAPProviderConfig} from "./ldap-provider-config";
-import {PAMProviderConfig} from "./pam-provider-config";
-import {AnonymousProviderConfig} from "./AnonymousProviderConfig";
-import {KerberosProviderConfig} from "./kerberos-provider-config";
-import {CSRFProviderConfig} from "./csrf-provider-config";
-import {CORSProviderConfig} from "./cors-provider-config";
-import {WebAppSecurityContributor} from "./webappsec-contributor";
-import {STSProviderConfig} from "./sts-provider-config";
-import {XFrameOptionsProviderConfig} from "./xframeoptions-provider-config";
-import {XContentTypeOptionsProviderConfig} from "./xcontent-type-options-provider-config";
+import {CategoryWizard} from './category-wizard';
+import {ProviderConfig} from '../resource-detail/provider-config';
+import {ProviderContributorWizard} from './provider-contributor-wizard';
+import {DisplayBindingProviderConfig} from './display-binding-provider-config';
+import {WebAppSecurityProviderConfig} from './webappsec-provider-config';
+import {CSRFProviderConfig} from './csrf-provider-config';
+import {CORSProviderConfig} from './cors-provider-config';
+import {WebAppSecurityContributor} from './webappsec-contributor';
+import {STSProviderConfig} from './sts-provider-config';
+import {XFrameOptionsProviderConfig} from './xframeoptions-provider-config';
+import {XContentTypeOptionsProviderConfig} from './xcontent-type-options-provider-config';
 
 export class WebAppSecurityWizard extends CategoryWizard implements ProviderContributorWizard {
+    // WebAppSec provider types
+    private static CSRF = 'Cross-Site Request Forgery';
+    private static CORS = 'Cross-Origin Resource Sharing';
+    private static XFRAME = 'X-Frame-Options';
+    private static XCONTENT_TYPE = 'X-Content-Type-Options';
+    private static STS = 'Strict Transport Security';
 
-  private stepCount: number = 4;
+    private static webAppSecTypes: string[] = [WebAppSecurityWizard.CSRF,
+        WebAppSecurityWizard.CORS,
+        WebAppSecurityWizard.XFRAME,
+        WebAppSecurityWizard.XCONTENT_TYPE,
+        WebAppSecurityWizard.STS
+    ];
 
-  // WebAppSec provider types
-  private static CSRF: string          = 'Cross-Site Request Forgery';
-  private static CORS: string          = 'Cross-Origin Resource Sharing';
-  private static XFRAME: string        = 'X-Frame-Options';
-  private static XCONTENT_TYPE: string = 'X-Content-Type-Options';
-  private static STS: string           = 'Strict Transport Security';
+    private static typeConfigMap: Map<string, typeof WebAppSecurityContributor> =
+        new Map([
+            [WebAppSecurityWizard.CSRF, CSRFProviderConfig],
+            [WebAppSecurityWizard.CORS, CORSProviderConfig],
+            [WebAppSecurityWizard.XFRAME, XFrameOptionsProviderConfig],
+            [WebAppSecurityWizard.XCONTENT_TYPE, XContentTypeOptionsProviderConfig],
+            [WebAppSecurityWizard.STS, STSProviderConfig]
+        ] as [string, typeof WebAppSecurityContributor][]);
 
-  private static webAppSecTypes: string[] = [ WebAppSecurityWizard.CSRF,
-                                              WebAppSecurityWizard.CORS,
-                                              WebAppSecurityWizard.XFRAME,
-                                              WebAppSecurityWizard.XCONTENT_TYPE,
-                                              WebAppSecurityWizard.STS
-                                            ]
+    private stepCount = 4;
 
-  private static typeConfigMap: Map<string, typeof WebAppSecurityContributor> =
-                                            new Map([
-                                              [WebAppSecurityWizard.CSRF,          CSRFProviderConfig],
-                                              [WebAppSecurityWizard.CORS,          CORSProviderConfig],
-                                              [WebAppSecurityWizard.XFRAME,        XFrameOptionsProviderConfig],
-                                              [WebAppSecurityWizard.XCONTENT_TYPE, XContentTypeOptionsProviderConfig],
-                                              [WebAppSecurityWizard.STS,           STSProviderConfig]
-                                            ] as [string, typeof WebAppSecurityContributor][]);
-
-
-  getTypes(): string[] {
-    return WebAppSecurityWizard.webAppSecTypes;
-  }
+    getTypes(): string[] {
+        return WebAppSecurityWizard.webAppSecTypes;
+    }
 
-  getSteps(): number {
-    return this.stepCount;
-  }
+    getSteps(): number {
+        return this.stepCount;
+    }
 
-  onChange() {
-    let configType = WebAppSecurityWizard.typeConfigMap.get(this.selectedType);
-    if (configType) {
-      this.providerConfig = Object.create(configType.prototype) as WebAppSecurityContributor;
-      this.providerConfig.constructor.apply(this.providerConfig);
-      (this.providerConfig as WebAppSecurityContributor).setType(this.selectedType);
-    } else {
-      console.debug('WebAppSecurityWizard --> No provider configuration type mapped for ' + this.selectedType);
-      this.providerConfig = null;
+    onChange() {
+        let configType = WebAppSecurityWizard.typeConfigMap.get(this.selectedType);
+        if (configType) {
+            this.providerConfig = Object.create(configType.prototype) as WebAppSecurityContributor;
+            this.providerConfig.constructor.apply(this.providerConfig);
+            (this.providerConfig as WebAppSecurityContributor).setType(this.selectedType);
+        } else {
+            console.debug('WebAppSecurityWizard --> No provider configuration type mapped for ' + this.selectedType);
+            this.providerConfig = null;
+        }
     }
-  }
 
-  getProviderConfig(): ProviderConfig {
-    return (this.providerConfig as WebAppSecurityProviderConfig);
-  }
+    getProviderConfig(): ProviderConfig {
+        return (this.providerConfig as WebAppSecurityProviderConfig);
+    }
 
-  getProviderRole(): string {
-    return 'webappsec';
-  }
+    getProviderRole(): string {
+        return 'webappsec';
+    }
 
-  createNewProviderConfig(): ProviderConfig {
-    return new WebAppSecurityProviderConfig();
-  }
+    createNewProviderConfig(): ProviderConfig {
+        return new WebAppSecurityProviderConfig();
+    }
 
-  contribute(target: ProviderConfig) {
-    for (let paramName in this.providerConfig.params) {
-      (target as DisplayBindingProviderConfig).setParam(paramName,
-                                                        (this.providerConfig as DisplayBindingProviderConfig).getParam(paramName));
+    contribute(target: ProviderConfig) {
+        for (const paramName of Object.keys(this.providerConfig.params)) {
+            (target as DisplayBindingProviderConfig).setParam(paramName,
+                (this.providerConfig as DisplayBindingProviderConfig).getParam(paramName));
+        }
     }
-  }
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/xcontent-type-options-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/xcontent-type-options-provider-config.ts
index 4fb5096..661e9d9 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/xcontent-type-options-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/xcontent-type-options-provider-config.ts
@@ -15,50 +15,50 @@
  * limitations under the License.
  */
 
-import {WebAppSecurityContributor} from "./webappsec-contributor";
+import {WebAppSecurityContributor} from './webappsec-contributor';
 
 export class XContentTypeOptionsProviderConfig extends WebAppSecurityContributor {
 
-  public static VALUE: string = 'X-Content-Type-Options Header';
+    public static VALUE = 'X-Content-Type-Options Header';
 
-  private static SUPPORTED_VALUES: string[] = ['nosniff'];
+    private static SUPPORTED_VALUES: string[] = ['nosniff'];
 
-  private static displayPropertyNames = [ XContentTypeOptionsProviderConfig.VALUE ];
+    private static displayPropertyNames = [XContentTypeOptionsProviderConfig.VALUE];
 
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([ [XContentTypeOptionsProviderConfig.VALUE, 'xcontent-type.options'] ] as [string, string][]);
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([[XContentTypeOptionsProviderConfig.VALUE, 'xcontent-type.options']] as [string, string][]);
 
-  constructor() {
-    super();
-    // Set the default values
-    this.setParam('xcontent-type.options.enabled', 'true');
-    this.setParam(XContentTypeOptionsProviderConfig.displayPropertyNameBindings.get(XContentTypeOptionsProviderConfig.VALUE),
-                  'nosniff');
-  }
+    constructor() {
+        super();
+        // Set the default values
+        this.setParam('xcontent-type.options.enabled', 'true');
+        this.setParam(XContentTypeOptionsProviderConfig.displayPropertyNameBindings.get(XContentTypeOptionsProviderConfig.VALUE),
+            'nosniff');
+    }
 
-  getDisplayPropertyNames(): string[] {
-    return XContentTypeOptionsProviderConfig.displayPropertyNames;
-  }
+    getDisplayPropertyNames(): string[] {
+        return XContentTypeOptionsProviderConfig.displayPropertyNames;
+    }
 
-  getDisplayNamePropertyBinding(name: string): string {
-    return XContentTypeOptionsProviderConfig.displayPropertyNameBindings.get(name);
-  }
+    getDisplayNamePropertyBinding(name: string): string {
+        return XContentTypeOptionsProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
 
-    let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
-    if (value) {
-      switch (paramName) {
-        case XContentTypeOptionsProviderConfig.VALUE:
-          value = value.trim().toLowerCase();
-          isValid = XContentTypeOptionsProviderConfig.SUPPORTED_VALUES.includes(value);
-          break;
-        default:
-      }
-    }
+        let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
+        if (value) {
+            switch (paramName) {
+                case XContentTypeOptionsProviderConfig.VALUE:
+                    value = value.trim().toLowerCase();
+                    isValid = XContentTypeOptionsProviderConfig.SUPPORTED_VALUES.includes(value);
+                    break;
+                default:
+            }
+        }
 
-    return isValid;
-  }
+        return isValid;
+    }
 
 }
diff --git a/gateway-admin-ui/admin-ui/app/provider-config-wizard/xframeoptions-provider-config.ts b/gateway-admin-ui/admin-ui/app/provider-config-wizard/xframeoptions-provider-config.ts
index 7598e5c..85c6ecb 100644
--- a/gateway-admin-ui/admin-ui/app/provider-config-wizard/xframeoptions-provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/provider-config-wizard/xframeoptions-provider-config.ts
@@ -15,52 +15,48 @@
  * limitations under the License.
  */
 
-import {WebAppSecurityContributor} from "./webappsec-contributor";
+import {WebAppSecurityContributor} from './webappsec-contributor';
 
 export class XFrameOptionsProviderConfig extends WebAppSecurityContributor {
+    public static VALUE = 'X-Frame-Options Header'; // DENY, SAMEORIGIN, ALLOW-FROM
 
-  public static TYPE: string = 'cors';
+    private static SUPPORTED_VALUES: string[] = ['DENY', 'SAMEORIGIN', 'ALLOW-FROM'];
 
-  public static VALUE: string = 'X-Frame-Options Header'; // DENY, SAMEORIGIN, ALLOW-FROM
+    private static displayPropertyNames = [XFrameOptionsProviderConfig.VALUE];
 
-  private static SUPPORTED_VALUES: string[] = ['DENY', 'SAMEORIGIN', 'ALLOW-FROM'];
+    private static displayPropertyNameBindings: Map<string, string> =
+        new Map([[XFrameOptionsProviderConfig.VALUE, 'xframe.options']] as [string, string][]);
 
-  private static displayPropertyNames = [ XFrameOptionsProviderConfig.VALUE ];
-
-  private static displayPropertyNameBindings: Map<string, string> =
-    new Map([ [XFrameOptionsProviderConfig.VALUE, 'xframe.options'] ] as [string, string][]);
-
-  constructor() {
-    super();
-    // Set the default values
-    this.setParam('xframe.options.enabled', 'true');
-    this.setParam(XFrameOptionsProviderConfig.displayPropertyNameBindings.get(XFrameOptionsProviderConfig.VALUE), 'DENY');
-  }
-
-  getDisplayPropertyNames(): string[] {
-    return XFrameOptionsProviderConfig.displayPropertyNames;
-  }
-
-  getDisplayNamePropertyBinding(name: string): string {
-    return XFrameOptionsProviderConfig.displayPropertyNameBindings.get(name);
-  }
-
-  isValidParamValue(paramName: string): boolean {
-    let isValid: boolean = true;
+    constructor() {
+        super();
+        // Set the default values
+        this.setParam('xframe.options.enabled', 'true');
+        this.setParam(XFrameOptionsProviderConfig.displayPropertyNameBindings.get(XFrameOptionsProviderConfig.VALUE), 'DENY');
+    }
 
-    let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
-    if (value) {
-      switch (paramName) {
-        case XFrameOptionsProviderConfig.VALUE:
-            value = value.trim().toUpperCase();
-            isValid = XFrameOptionsProviderConfig.SUPPORTED_VALUES.includes(value);
-          break;
-        default:
-      }
+    getDisplayPropertyNames(): string[] {
+        return XFrameOptionsProviderConfig.displayPropertyNames;
     }
 
-    return isValid;
-  }
+    getDisplayNamePropertyBinding(name: string): string {
+        return XFrameOptionsProviderConfig.displayPropertyNameBindings.get(name);
+    }
 
+    isValidParamValue(paramName: string): boolean {
+        let isValid = true;
+
+        let value = this.getParam(this.getDisplayNamePropertyBinding(paramName));
+        if (value) {
+            switch (paramName) {
+                case XFrameOptionsProviderConfig.VALUE:
+                    value = value.trim().toUpperCase();
+                    isValid = XFrameOptionsProviderConfig.SUPPORTED_VALUES.includes(value);
+                    break;
+                default:
+            }
+        }
+
+        return isValid;
+    }
 }
 
diff --git a/gateway-admin-ui/admin-ui/app/resource-detail/descriptor.ts b/gateway-admin-ui/admin-ui/app/resource-detail/descriptor.ts
index 4c1f69a..3310f46 100644
--- a/gateway-admin-ui/admin-ui/app/resource-detail/descriptor.ts
+++ b/gateway-admin-ui/admin-ui/app/resource-detail/descriptor.ts
@@ -14,8 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Service} from "../resource/service";
-
+import {Service} from '../resource/service';
 
 export class Descriptor {
     discoveryAddress: string;
@@ -25,25 +24,24 @@ export class Descriptor {
     providerConfig: string;
     services: Service[];
 
-    private dirty: boolean = false;
+    private dirty = false;
 
-    getServiceParamNames(service: Service): string[] {
-      if (!service.params) {
-        service.params = {};
-      }
-      return Object.getOwnPropertyNames(service.params);
+    static getServiceParamNames(service: Service): string[] {
+        if (!service.params) {
+            service.params = {};
+        }
+        return Object.getOwnPropertyNames(service.params);
     }
 
-    getServiceParamValue(service: Service, name: string): string {
-       return service.params[name];
+    static getServiceParamValue(service: Service, name: string): string {
+        return service.params[name];
     }
 
     setProviderConfig(providerConfigRef: string) {
-      //console.debug('Descriptor --> setProviderConfig() --> ' + providerConfigRef);
-      if (providerConfigRef !== this.providerConfig) {
-        this.providerConfig = providerConfigRef;
-        this.setDirty();
-      }
+        if (providerConfigRef !== this.providerConfig) {
+            this.providerConfig = providerConfigRef;
+            this.setDirty();
+        }
     }
 
     addService(name: string) {
@@ -75,10 +73,10 @@ export class Descriptor {
     }
 
     onVersionChanged(service: Service) {
-      if (!service.version || service.version.length == 0) {
-        delete service.version;
-      }
-      this.setDirty();
+        if (!service.version || service.version.length === 0) {
+            delete service.version;
+        }
+        this.setDirty();
     }
 
     setDirty() {
@@ -88,5 +86,4 @@ export class Descriptor {
     public isDirty(): boolean {
         return this.dirty;
     }
-
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/resource-detail/provider-config.ts b/gateway-admin-ui/admin-ui/app/resource-detail/provider-config.ts
index 6be24f2..fa42e4e 100644
--- a/gateway-admin-ui/admin-ui/app/resource-detail/provider-config.ts
+++ b/gateway-admin-ui/admin-ui/app/resource-detail/provider-config.ts
@@ -20,4 +20,4 @@ export class ProviderConfig {
     role: string;
     enabled: string;
     params: Map<string, string>;
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.css b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.css
index 5ca3848..c1343e9 100644
--- a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.css
+++ b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.css
@@ -5,7 +5,7 @@
     margin: 0;
 }
 
-.inline-editable.editable-empty{
+.inline-editable.editable-empty {
     display: inline-block;
     width: 50px;
     line-height: 1;
@@ -14,6 +14,7 @@
 .inline-editable:hover {
     padding: 0px;
 }
+
 .inline-editable:hover:after {
     font-family: 'Glyphicons Halflings';
     content: "\270f";
@@ -63,4 +64,4 @@
 
 .inline-glyph {
     vertical-align: 2%;
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.html b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.html
index 4fd3ea8..8bb25e0 100644
--- a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.html
+++ b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.html
@@ -1,27 +1,34 @@
 <div *ngIf="resourceType && resourceType !== 'Topologies'" class="panel panel-default">
-  <div class="panel-heading">
-    <h4 class="panel-title">
-      {{ getTitleSubject() }} Detail <span *ngIf="hasSelectedResource()" class="pull-right">{{resourceService.getResourceDisplayName(resource)}}</span>
-    </h4>
-  </div>
-
-  <!-- Provider Configuration Details -->
-  <div class="panel-body" *ngIf="hasSelectedResource() && resourceType === 'Provider Configurations'">
-    <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">&times;</span>
-      </button>
-      Cannot remove <strong>{{resourceService.getResourceDisplayName(resource)}}</strong> because it is referenced by one or more descriptors
+    <div class="panel-heading">
+        <h4 class="panel-title">
+            {{ getTitleSubject() }} Detail <span *ngIf="hasSelectedResource()"
+                                                 class="pull-right">{{resourceService.getResourceDisplayName(resource)}}</span>
+        </h4>
     </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>
+
+    <!-- Provider Configuration Details -->
+    <div class="panel-body"
+         *ngIf="hasSelectedResource() && resourceType === 'Provider Configurations'">
+        <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">&times;</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)">
@@ -31,34 +38,37 @@
           <span class="glyphicon glyphicon-remove"></span>
         </button>
       </span>
-    </div>
-    <div class="panel panel-default" *ngFor="let provider of providers">
-      <div class="panel-heading">
-        <span>&nbsp;</span>
-        <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowProvider(provider) ? 'minus' : 'plus')"
-              (click)="toggleShowProvider(provider)"></span>
-        <span><strong>{{ provider.role }}</strong></span>
-        <span class="clickable inline-glyph glyphicon glyphicon-remove pull-right btn btn-xs"
-              [title]="'Remove ' + provider.role"
-              (click)="onRemoveProvider(provider.name)"
-              data-toggle="tooltip"></span>
-      </div>
-      <div class="panel-body" *ngIf="isShowProvider(provider)">
-        <strong>Name</strong> {{ provider.name }}<br>
-        <strong>Enabled</strong>&nbsp;<input type="checkbox"
-                                             [checked]="isProviderEnabled(provider)"
-                                             (click)="onProviderEnabled(provider)"><br>
-        <div>
+        </div>
+        <div class="panel panel-default" *ngFor="let provider of providers">
+            <div class="panel-heading">
+                <span>&nbsp;</span>
+                <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowProvider(provider) ? 'minus' : 'plus')"
+                      (click)="toggleShowProvider(provider)"></span>
+                <span><strong>{{ provider.role }}</strong></span>
+                <span class="clickable inline-glyph glyphicon glyphicon-remove pull-right btn btn-xs"
+                      [title]="'Remove ' + provider.role"
+                      (click)="onRemoveProvider(provider.name)"
+                      data-toggle="tooltip"></span>
+            </div>
+            <div class="panel-body" *ngIf="isShowProvider(provider)">
+                <strong>Name</strong> {{ provider.name }}<br>
+                <strong>Enabled</strong>&nbsp;<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>
+                    <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);
@@ -69,47 +79,50 @@
               <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>
+                    <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>
+                                </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">
+                                    <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)">
+                    <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 -->
+                                </td>
+                            </tr>
+                        </table>
+                    </div> <!-- Provider params -->
+                </div>
+            </div> <!-- Provider Details -->
+        </div> <!-- Provider panel -->
 
-    <div> <!-- Provider Configuration Modification Buttons -->
-      <button type="button"
-              title="Remove Provider Configuration"
-              class="btn btn-default btn-sm pull-left"
-              (click)="deleteConfirmModal.open('md')"
-              data-toggle="tooltip">
-        <span class="glyphicon glyphicon-trash"></span>
-      </button>
-      <span class="pull-right">
+        <div> <!-- Provider Configuration Modification Buttons -->
+            <button type="button"
+                    title="Remove Provider Configuration"
+                    class="btn btn-default btn-sm pull-left"
+                    (click)="deleteConfirmModal.open('md')"
+                    data-toggle="tooltip">
+                <span class="glyphicon glyphicon-trash"></span>
+            </button>
+            <span class="pull-right">
         <button type="button"
                 title="Discard Changes"
                 class="btn btn-default btn-sm"
@@ -128,16 +141,17 @@
           <span class="glyphicon glyphicon-floppy-disk"></span>
         </button>
       </span>
-    </div>
-  </div> <!-- Provider Configuration Details -->
+        </div>
+    </div> <!-- Provider Configuration Details -->
 
-  <!-- Descriptor Details -->
-  <div class="panel-body" *ngIf="hasSelectedResource() && resourceType === 'Descriptors'">
-    <div> <!-- Provider Config reference -->
-      <div class="panel panel-default col-md-12">
+    <!-- Descriptor Details -->
+    <div class="panel-body" *ngIf="hasSelectedResource() && resourceType === 'Descriptors'">
+        <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>&nbsp;</span>
-          <span class="col-md-sm inline-editable" (click)="editModePC=true" *ngIf="!editModePC">{{descriptor.providerConfig}}</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()">
@@ -158,23 +172,24 @@
             <span class="glyphicon glyphicon-edit"></span>
           </button>
         </span>
-      </div>
-      <app-provider-config-selector #choosePC></app-provider-config-selector>
-    </div> <!-- Provider Config reference -->
+            </div>
+            <app-provider-config-selector #choosePC></app-provider-config-selector>
+        </div> <!-- Provider Config reference -->
 
-    <br><br>
+        <br><br>
 
-    <div class="panel panel-default">
-      <div class="panel-heading">
+        <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 *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>
+                <span><strong>Services</strong></span>
+                <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);
@@ -185,22 +200,25 @@
               <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>
+            </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 [class]="!getServiceVersionEditFlag(service) && !service.version ? 'inline-editable' : ''"
                       (click)="setServiceVersionEditFlag(service, true)"
                       title="Set version"
                       data-toggle="tooltip"><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">
+                                <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)">
+                  <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)">
@@ -208,23 +226,26 @@
                   </button>
                 </span>
 
-                <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 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 inline-glyph glyhpicon glyphicon-' + (isShowServiceParams(service) ? 'minus' : 'plus')"
                       (click)="toggleShowServiceParams(service)"></span>
-                <span>Params</span><span>&nbsp;</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>
+                                <span>Params</span><span>&nbsp;</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);
@@ -235,44 +256,50 @@
                       <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%">
+                            </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 inline-glyph glyphicon glyphicon-remove btn btn-xs"
                             title="Remove Param"
                             (click)="onRemoveDescriptorServiceParam(service.name, paramKey)"
                             data-toggle="tooltip"></span>
-                    </td>
-                    <td width="30%"><strong>{{ paramKey }}</strong></td>
-                    <td width="65%" align="left">
+                                        </td>
+                                        <td width="30%"><strong>{{ paramKey }}</strong></td>
+                                        <td width="65%" align="left">
                       <span class="inline-editable"
                             (click)="setServiceParamEditFlag(service, paramKey, true)"
                             *ngIf="!getServiceParamEditFlag(service, paramKey)">{{descriptor.getServiceParamValue(service, paramKey)}}</span>
-                      <span *ngIf="getServiceParamEditFlag(service, paramKey)" class="inline-editor inlineEditForm">
+                                            <span *ngIf="getServiceParamEditFlag(service, paramKey)"
+                                                  class="inline-editor inlineEditForm">
                       <input type="text" size="40" [(ngModel)]="service.params[paramKey]">
-                      <button class="btn btn-xs" (click)="setServiceParamEditFlag(service, paramKey, false);descriptor.setDirty()">
+                      <button class="btn btn-xs"
+                              (click)="setServiceParamEditFlag(service, paramKey, false);descriptor.setDirty()">
                         <span class="glyphicon glyphicon-ok"></span>
                       </button>
-                      <button class="btn btn-xs" (click)="setServiceParamEditFlag(service, paramKey, false)">
+                      <button class="btn btn-xs"
+                              (click)="setServiceParamEditFlag(service, paramKey, false)">
                         <span class="glyphicon glyphicon-remove"></span>
                       </button>
                     </span>
-                    </td>
-                  </tr>
-                </table>
-              </div>
-              <div>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </div>
+                            <div>
                 <span [class]="'clickable inline-glyph glyhpicon glyphicon-' + (isShowServiceURLs(service) ? 'minus' : 'plus')"
                       (click)="toggleShowServiceURLs(service)"></span>
-                <span>URLs</span><span>&nbsp;</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>
+                                <span>URLs</span><span>&nbsp;</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);
@@ -283,60 +310,64 @@
                       <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%">
+                            </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 inline-glyph glyphicon glyphicon-remove btn btn-xs"
                             title="Remove URL"
                             (click)="onRemoveDescriptorServiceURL(service.name, url)"
                             data-toggle="tooltip"></span>
-                    </td>
-                    <td width="95%">
+                                        </td>
+                                        <td width="95%">
                       <span class="inline-editable"
-                              (click)="setServiceURLEditFlag(service, i, true)"
-                              *ngIf="!getServiceURLEditFlag(service, i)">{{url}}</span>
-                      <span *ngIf="getServiceURLEditFlag(service, i)" class="inline-editor inlineEditForm">
+                            (click)="setServiceURLEditFlag(service, i, true)"
+                            *ngIf="!getServiceURLEditFlag(service, i)">{{url}}</span>
+                                            <span *ngIf="getServiceURLEditFlag(service, i)"
+                                                  class="inline-editor inlineEditForm">
                         <input type="text" size="50" [(ngModel)]="service.urls[i]">
-                        <button class="btn btn-xs" (click)="setServiceURLEditFlag(service, i, false);descriptor.setDirty()">
+                        <button class="btn btn-xs"
+                                (click)="setServiceURLEditFlag(service, i, false);descriptor.setDirty()">
                           <span class="glyphicon glyphicon-ok"></span>
                         </button>
-                        <button class="btn btn-xs" (click)="setServiceURLEditFlag(service, i, false)">
+                        <button class="btn btn-xs"
+                                (click)="setServiceURLEditFlag(service, i, false)">
                           <span class="glyphicon glyphicon-remove"></span>
                         </button>
                       </span>
-                    </td>
-                  </tr>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </div>
+                        </td>
+                    </tr>
                 </table>
-              </div>
-            </td>
-          </tr>
-        </table>
-      </div> <!-- Services table -->
-    </div> <!-- Services panel -->
+            </div> <!-- Services table -->
+        </div> <!-- Services panel -->
 
-    <div class="panel panel-default"> <!-- Discovery panel -->
-      <div class="panel-heading">
+        <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>
-      <div class="panel-body" *ngIf="isShowServiceDiscovery()">
-        <table class="table table-sm">
-          <tr>
-            <td width="20%">
+                <span><strong>Discovery Details</strong></span>
+            </div>
+            <div class="panel-body" *ngIf="isShowServiceDiscovery()">
+                <table class="table table-sm">
+                    <tr>
+                        <td width="20%">
               <span [class]="!editModeAddress && !descriptor.discoveryAddress ? 'inline-editable' : ''"
                     (click)="editModeAddress=true">
                 <strong>Address</strong>
               </span>
-              <span *ngIf="!editModeAddress && !descriptor.discoveryAddress">&nbsp;&nbsp;</span>
-            </td>
-            <td>
+                            <span *ngIf="!editModeAddress && !descriptor.discoveryAddress">&nbsp;&nbsp;</span>
+                        </td>
+                        <td>
               <span class="inline-editable"
                     (click)="editModeAddress=true"
                     *ngIf="!editModeAddress">{{ descriptor.discoveryAddress }}</span>
-              <span *ngIf="editModeAddress" class="inline-editor inlineEditForm">
+                            <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>
@@ -345,21 +376,21 @@
                   <span class="glyphicon glyphicon-remove"></span>
                 </button>
               </span>
-            </td>
-          </tr>
-          <tr>
-            <td width="20%">
+                        </td>
+                    </tr>
+                    <tr>
+                        <td width="20%">
               <span [class]="!editModeCluster && !descriptor.discoveryCluster ? 'inline-editable' : ''"
                     (click)="editModeCluster=true">
                 <strong>Cluster</strong>
               </span>
-              <span *ngIf="!editModeCluster && !descriptor.discoveryCluster">&nbsp;&nbsp;</span>
-            </td>
-            <td>
+                            <span *ngIf="!editModeCluster && !descriptor.discoveryCluster">&nbsp;&nbsp;</span>
+                        </td>
+                        <td>
               <span class="inline-editable"
                     (click)="editModeCluster=true"
                     *ngIf="!editModeCluster">{{ descriptor.discoveryCluster}}</span>
-              <span *ngIf="editModeCluster" class="inline-editor inlineEditForm">
+                            <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>
@@ -368,21 +399,21 @@
                   <span class="glyphicon glyphicon-remove"></span>
                 </button>
               </span>
-            </td>
-          </tr>
-          <tr>
-            <td width="20%">
+                        </td>
+                    </tr>
+                    <tr>
+                        <td width="20%">
               <span [class]="!editModeUser && !descriptor.discoveryUser ? 'inline-editable' : ''"
                     (click)="editModeUser=true">
                   <strong>Username</strong>
               </span>
-              <span *ngIf="!editModeUser && !descriptor.discoveryUser">&nbsp;&nbsp;</span>
-            </td>
-            <td>
+                            <span *ngIf="!editModeUser && !descriptor.discoveryUser">&nbsp;&nbsp;</span>
+                        </td>
+                        <td>
               <span class="inline-editable"
                     (click)="editModeUser=true"
                     *ngIf="!editModeUser">{{ descriptor.discoveryUser }}</span>
-              <span *ngIf="editModeUser" class="inline-editor inlineEditForm">
+                            <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>
@@ -391,21 +422,21 @@
                   <span class="glyphicon glyphicon-remove"></span>
                 </button>
               </span>
-            </td>
-          </tr>
-          <tr>
-            <td width="20%">
+                        </td>
+                    </tr>
+                    <tr>
+                        <td width="20%">
               <span [class]="!editModeAlias && !descriptor.discoveryPassAlias ? 'inline-editable' : ''"
                     (click)="editModeAlias=true">
                   <strong>Password Alias</strong>
               </span>
-              <span *ngIf="!editModeAlias && !descriptor.discoveryPassAlias">&nbsp;&nbsp;</span>
-            </td>
-            <td>
+                            <span *ngIf="!editModeAlias && !descriptor.discoveryPassAlias">&nbsp;&nbsp;</span>
+                        </td>
+                        <td>
               <span class="inline-editable"
                     (click)="editModeAlias=true"
                     *ngIf="!editModeAlias">{{ descriptor.discoveryPassAlias }}</span>
-              <span *ngIf="editModeAlias" class="inline-editor inlineEditForm">
+                            <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>
@@ -414,21 +445,21 @@
                   <span class="glyphicon glyphicon-remove"></span>
                 </button>
               </span>
-            </td>
-          </tr>
-        </table>
-      </div><!-- Discovery details -->
-    </div><!-- Discovery panel -->
+                        </td>
+                    </tr>
+                </table>
+            </div><!-- Discovery details -->
+        </div><!-- Discovery panel -->
 
-    <div> <!-- Descriptor Modification Buttons -->
-      <button type="button"
-              title="Remove Descriptor"
-              class="btn btn-default btn-sm pull-left"
-              (click)="deleteConfirmModal.open('md')"
-              data-toggle="tooltip">
-        <span class="glyphicon glyphicon-trash"></span>
-      </button>
-      <span class="pull-right">
+        <div> <!-- Descriptor Modification Buttons -->
+            <button type="button"
+                    title="Remove Descriptor"
+                    class="btn btn-default btn-sm pull-left"
+                    (click)="deleteConfirmModal.open('md')"
+                    data-toggle="tooltip">
+                <span class="glyphicon glyphicon-trash"></span>
+            </button>
+            <span class="pull-right">
         <button type="button"
                 title="Discard Changes"
                 class="btn btn-default btn-sm"
@@ -447,45 +478,53 @@
           <span class="glyphicon glyphicon-floppy-disk"></span>
         </button>
       </span>
-    </div>
-  </div> <!-- Descriptor Details -->
+        </div>
+    </div> <!-- Descriptor Details -->
 
-  <div> <!-- Confirmation Modal Dialogs -->
-    <bs-modal (onClose)="deleteResource()" #deleteConfirmModal>
-      <bs-modal-header [showDismiss]="true">
-        <h4 class="modal-title">Deleting {{getTitleSubject()}}</h4>
-      </bs-modal-header>
-      <bs-modal-body>Are you sure you want to delete <strong>{{resourceService.getResourceDisplayName(resource)}}</strong>?</bs-modal-body>
-      <bs-modal-footer>
-        <button type="button"
-                class="btn btn-default btn-sm"
-                data-dismiss="deleteConfirmModal"
-                (click)="deleteConfirmModal.dismiss()">Cancel</button>
-        <button type="button"
-                class="btn btn-primary btn-sm"
-                (click)="deleteConfirmModal.close()">Ok</button>
-      </bs-modal-footer>
-    </bs-modal>
+    <div> <!-- Confirmation Modal Dialogs -->
+        <bs-modal (onClose)="deleteResource()" #deleteConfirmModal>
+            <bs-modal-header [showDismiss]="true">
+                <h4 class="modal-title">Deleting {{getTitleSubject()}}</h4>
+            </bs-modal-header>
+            <bs-modal-body>Are you sure you want to delete
+                <strong>{{resourceService.getResourceDisplayName(resource)}}</strong>?
+            </bs-modal-body>
+            <bs-modal-footer>
+                <button type="button"
+                        class="btn btn-default btn-sm"
+                        data-dismiss="deleteConfirmModal"
+                        (click)="deleteConfirmModal.dismiss()">Cancel
+                </button>
+                <button type="button"
+                        class="btn btn-primary btn-sm"
+                        (click)="deleteConfirmModal.close()">Ok
+                </button>
+            </bs-modal-footer>
+        </bs-modal>
 
-    <bs-modal (onClose)="discardChanges()" #discardConfirmModal>
-      <bs-modal-header [showDismiss]="true">
-        <h4 class="modal-title">Discard {{getTitleSubject()}} Changes</h4>
-      </bs-modal-header>
-      <bs-modal-body>Are you sure you want to discard <strong>{{resourceService.getResourceDisplayName(resource)}}</strong> changes?</bs-modal-body>
-      <bs-modal-footer>
-        <button type="button"
-                class="btn btn-default btn-sm"
-                data-dismiss="revertConfirmModal"
-                (click)="discardConfirmModal.dismiss()">Cancel</button>
-        <button type="button"
-                class="btn btn-primary btn-sm"
-                (click)="discardConfirmModal.close()">Ok</button>
-      </bs-modal-footer>
-    </bs-modal>
-  </div>
+        <bs-modal (onClose)="discardChanges()" #discardConfirmModal>
+            <bs-modal-header [showDismiss]="true">
+                <h4 class="modal-title">Discard {{getTitleSubject()}} Changes</h4>
+            </bs-modal-header>
+            <bs-modal-body>Are you sure you want to discard
+                <strong>{{resourceService.getResourceDisplayName(resource)}}</strong> changes?
+            </bs-modal-body>
+            <bs-modal-footer>
+                <button type="button"
+                        class="btn btn-default btn-sm"
+                        data-dismiss="revertConfirmModal"
+                        (click)="discardConfirmModal.dismiss()">Cancel
+                </button>
+                <button type="button"
+                        class="btn btn-primary btn-sm"
+                        (click)="discardConfirmModal.close()">Ok
+                </button>
+            </bs-modal-footer>
+        </bs-modal>
+    </div>
 </div>
 
 <!-- Topology Details -->
 <div *ngIf="resourceType === 'Topologies'">
-  <topology-detail></topology-detail>
+    <app-topology-detail></app-topology-detail>
 </div>
diff --git a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.spec.ts b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.spec.ts
index 9503223..a081aee 100644
--- a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.spec.ts
@@ -14,28 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { ResourceDetailComponent } from './resource-detail.component';
+import {ResourceDetailComponent} from './resource-detail.component';
 
 describe('ResourceDetailComponent', () => {
-  let component: ResourceDetailComponent;
-  let fixture: ComponentFixture<ResourceDetailComponent>;
+    let component: ResourceDetailComponent;
+    let fixture: ComponentFixture<ResourceDetailComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ ResourceDetailComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [ResourceDetailComponent]
+        })
+            .compileComponents();
+    }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(ResourceDetailComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(ResourceDetailComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.ts b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.ts
index 38c39d4..2e9a7e0 100644
--- a/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.ts
+++ b/gateway-admin-ui/admin-ui/app/resource-detail/resource-detail.component.ts
@@ -14,561 +14,546 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { ResourceService } from '../resource/resource.service';
-import { Resource } from '../resource/resource';
-import { ProviderConfig } from './provider-config';
-import { Descriptor } from "./descriptor";
-import { Service } from "../resource/service";
-import { parseString } from 'xml2js';
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {ResourceService} from '../resource/resource.service';
+import {Resource} from '../resource/resource';
+import {ProviderConfig} from './provider-config';
+import {Descriptor} from './descriptor';
+import {Service} from '../resource/service';
+import {parseString} from 'xml2js';
 
 import 'brace/theme/monokai';
 import 'brace/mode/xml';
 
-import { ProviderConfigSelectorComponent } from "../provider-config-selector/provider-config-selector.component";
-import { ResourceTypesService } from "../resourcetypes/resourcetypes.service";
-import {HttpErrorResponse} from "@angular/common/http";
-
+import {ProviderConfigSelectorComponent} from '../provider-config-selector/provider-config-selector.component';
+import {ResourceTypesService} from '../resourcetypes/resourcetypes.service';
+import {HttpErrorResponse} from '@angular/common/http';
 
 @Component({
-  selector: 'app-resource-detail',
-  templateUrl: './resource-detail.component.html',
-  styleUrls: ['./resource-detail.component.css']
+    selector: 'app-resource-detail',
+    templateUrl: './resource-detail.component.html',
+    styleUrls: ['./resource-detail.component.css']
 })
 export class ResourceDetailComponent implements OnInit {
 
-  // Static "empty" Resource used for clearing the display between resource selections
-  private static emptyResource: Resource = new Resource();
+    // Static "empty" Resource used for clearing the display between resource selections
+    private static emptyResource: Resource = new Resource();
 
-  private static emptyDescriptor: Descriptor = new Descriptor();
+    private static emptyDescriptor: Descriptor = new Descriptor();
 
-  title: string;
+    title: string;
 
-  resourceType: string;
-  resource: Resource;
-  resourceContent: string;
+    resourceType: string;
+    resource: Resource;
+    resourceContent: string;
 
-  providers: Array<ProviderConfig>;
-  changedProviders: Array<ProviderConfig>;
+    providers: Array<ProviderConfig>;
+    changedProviders: Array<ProviderConfig>;
 
-  descriptor: Descriptor;
+    descriptor: Descriptor;
 
-  @ViewChild('choosePC')
-  chooseProviderConfigModal: ProviderConfigSelectorComponent;
+    @ViewChild('choosePC')
+    chooseProviderConfigModal: ProviderConfigSelectorComponent;
 
-  referencedProviderConfigError: boolean = false;
+    referencedProviderConfigError = false;
 
+    constructor(private resourceService: ResourceService, private resourceTypesService: ResourceTypesService) {
+    }
 
-  constructor(private resourceService: ResourceService, private resourceTypesService: ResourceTypesService) {
-  }
+    ngOnInit() {
+        this.resourceService.selectedResourceType$.subscribe(type => this.setResourceType(type));
+        this.resourceService.selectedResource$.subscribe(value => this.setResource(value));
+    }
 
-  ngOnInit() {
-      this.resourceService.selectedResourceType$.subscribe(type => this.setResourceType(type));
-      this.resourceService.selectedResource$.subscribe(value => this.setResource(value));
-  }
+    setResourceType(resType: string) {
+        // Clear the current resource details
+        if (this.resource) {
+            this.resource.name = '';
+        } // This clears the details title when the type context changes
+        this.resource = ResourceDetailComponent.emptyResource;
+        this.providers = null;
+        this.descriptor = ResourceDetailComponent.emptyDescriptor;
+        this.resourceContent = ''; // Clear the content area
+        this.resourceType = resType;
+    }
 
-  setResourceType(resType: string) {
-    // Clear the current resource details
-    if (this.resource) {this.resource.name = '';} // This clears the details title when the type context changes
-    this.resource = ResourceDetailComponent.emptyResource;
-    this.providers = null;
-    this.descriptor = ResourceDetailComponent.emptyDescriptor;
-    this.resourceContent = ''; // Clear the content area
-    this.resourceType = resType;
-  }
+    setResource(res: Resource) {
+        this.referencedProviderConfigError = false;
+        this.resource = res;
+        this.providers = [];
+        this.changedProviders = null;
+        this.descriptor = ResourceDetailComponent.emptyDescriptor;
+        if (res) {
+            this.resourceService.getResource(this.resourceType, res)
+                .then(content => this.setResourceContent(res, content))
+                .catch((error: HttpErrorResponse) => {
+                    console.debug('Error accessing content for ' + res.name + ' : ' + error);
+                });
+        }
+    }
 
-  setResource(res: Resource) {
-      //console.debug('ResourceDetailComponent --> setResource() --> ' + ((res) ? res.name : 'null'));
-      this.referencedProviderConfigError = false;
-      this.resource = res;
-      this.providers = [];
-      this.changedProviders = null;
-      this.descriptor = ResourceDetailComponent.emptyDescriptor;
-      if (res) {
-        this.resourceService.getResource(this.resourceType, res)
-                            .then(content => this.setResourceContent(res, content))
-                            .catch((error: HttpErrorResponse) => {
-                                console.debug('Error accessing content for ' + res.name + ' : ' + error);
-                            });
-      }
-  }
-
-  setResourceContent(res: Resource, content: string) {
-      switch(this.resourceType) {
-          case 'Provider Configurations': {
-              this.setProviderConfigContent(res, content);
-              break;
-          }
-          case 'Descriptors': {
-              this.setDescriptorContent(res, content);
-              break;
-          }
-      }
-  }
-
-  setProviderConfigContent(res: Resource, content: string) {
-      this.resourceContent = content;
-      if (this.resourceContent) {
-          try {
-            let contentObj;
-            if (res.name.endsWith('json')) {
-                // Parse the JSON representation
-                contentObj = JSON.parse(this.resourceContent);
-                this.providers = contentObj['providers'];
-            } else if (res.name.endsWith('yaml') || res.name.endsWith('yml')) {
-                // Parse the YAML representation
-                let yaml = require('js-yaml');
-                contentObj = yaml.safeLoad(this.resourceContent);
-                this.providers = contentObj['providers'];
-            } else if (res.name.endsWith('xml')) {
-                // Parse the XML representation
-                parseString(this.resourceContent,
-                  (error, result) => {
-                    if (error) {
-                      console.log('Error parsing ' + res.name + ' error: ' + error);
-                    } else {
-                        // Parsing the XML is a bit less straight-forward
-                        let tempProviders = new Array<ProviderConfig>();
-                        result['gateway'].provider.forEach(entry => {
-                            let providerConfig: ProviderConfig = new ProviderConfig();
-                            providerConfig.role = entry.role[0];
-                            providerConfig.name = entry.name[0];
-                            providerConfig.enabled = entry.enabled[0];
-
-                            // There may not be params
-                            if (entry.param) {
-                                let params = new Map<string, string>();
-                                for (let i = 0; i < entry.param.length; i++) {
-                                    let param = entry.param[i];
-                                    params[param.name[0]] = param.value[0];
-                                }
-                                providerConfig.params = params;
+    setResourceContent(res: Resource, content: string) {
+        switch (this.resourceType) {
+            case 'Provider Configurations': {
+                this.setProviderConfigContent(res, content);
+                break;
+            }
+            case 'Descriptors': {
+                this.setDescriptorContent(res, content);
+                break;
+            }
+        }
+    }
+
+    setProviderConfigContent(res: Resource, content: string) {
+        this.resourceContent = content;
+        if (this.resourceContent) {
+            try {
+                let contentObj;
+                if (res.name.endsWith('json')) {
+                    // Parse the JSON representation
+                    contentObj = JSON.parse(this.resourceContent);
+                    this.providers = contentObj['providers'];
+                } else if (res.name.endsWith('yaml') || res.name.endsWith('yml')) {
+                    // Parse the YAML representation
+                    let yaml = require('js-yaml');
+                    contentObj = yaml.safeLoad(this.resourceContent);
+                    this.providers = contentObj['providers'];
+                } else if (res.name.endsWith('xml')) {
+                    // Parse the XML representation
+                    parseString(this.resourceContent,
+                        (error, result) => {
+                            if (error) {
+                                console.log('Error parsing ' + res.name + ' error: ' + error);
+                            } else {
+                                // Parsing the XML is a bit less straight-forward
+                                let tempProviders = new Array<ProviderConfig>();
+                                result['gateway'].provider.forEach(entry => {
+                                    let providerConfig: ProviderConfig = new ProviderConfig();
+                                    providerConfig.role = entry.role[0];
+                                    providerConfig.name = entry.name[0];
+                                    providerConfig.enabled = entry.enabled[0];
+
+                                    // There may not be params
+                                    if (entry.param) {
+                                        let params = new Map<string, string>();
+                                        for (let i = 0; i < entry.param.length; i++) {
+                                            let param = entry.param[i];
+                                            params[param.name[0]] = param.value[0];
+                                        }
+                                        providerConfig.params = params;
+                                    }
+                                    tempProviders.push(providerConfig);
+                                });
+                                this.providers = tempProviders;
                             }
-                            tempProviders.push(providerConfig);
                         });
-                        this.providers = tempProviders;
-                    }
-                });
+                }
+            } catch (e) {
+                console.error('ResourceDetailComponent --> setProviderConfigContent() --> Error parsing ' + res.name + ' content: ' + e);
+                this.providers = null; // Clear detail display
+            }
+        }
+    }
+
+    setDescriptorContent(res: Resource, content: string) {
+        this.resourceContent = content;
+        if (this.resourceContent) {
+            try {
+                let contentObj;
+                if (res.name.endsWith('json')) {
+                    contentObj = JSON.parse(this.resourceContent);
+                } else if (res.name.endsWith('yaml') || res.name.endsWith('yml')) {
+                    let yaml = require('js-yaml');
+                    contentObj = yaml.load(this.resourceContent);
+                }
+                let tempDesc = new Descriptor();
+                if (contentObj) {
+                    tempDesc.discoveryAddress = contentObj['discovery-address'];
+                    tempDesc.discoveryUser = contentObj['discovery-user'];
+                    tempDesc.discoveryPassAlias = contentObj['discovery-pwd-alias'];
+                    tempDesc.discoveryCluster = contentObj['cluster'];
+                    tempDesc.providerConfig = contentObj['provider-config-ref'];
+                    tempDesc.services = contentObj['services'];
+                }
+                this.descriptor = tempDesc;
+            } catch (e) {
+                console.error('ResourceDetailComponent.setDescriptorContent: Error parsing ' + res.name + ' content: ' + e);
             }
-          } catch (e) {
-            console.error('ResourceDetailComponent --> setProviderConfigContent() --> Error parsing ' + res.name + ' content: ' + e);
-            this.providers = null; // Clear detail display
-          }
-      }
-  }
-
-  setDescriptorContent(res: Resource, content: string) {
-    this.resourceContent = content;
-    if (this.resourceContent) {
-      try {
-        //console.debug('ResourceDetailComponent --> setDescriptorContent() --> Parsing descriptor ' + res.name);
-        let contentObj;
-        if (res.name.endsWith('json')) {
-          contentObj = JSON.parse(this.resourceContent);
-        } else if (res.name.endsWith('yaml') || res.name.endsWith('yml')) {
-          let yaml = require('js-yaml');
-          contentObj = yaml.load(this.resourceContent);
         }
-        let tempDesc = new Descriptor();
-        if (contentObj) {
-          tempDesc.discoveryAddress = contentObj['discovery-address'];
-          tempDesc.discoveryUser = contentObj['discovery-user'];
-          tempDesc.discoveryPassAlias = contentObj['discovery-pwd-alias'];
-          tempDesc.discoveryCluster = contentObj['cluster'];
-          tempDesc.providerConfig = contentObj['provider-config-ref'];
-          tempDesc.services = contentObj['services'];
+    }
+
+    persistChanges() {
+        switch (this.resourceType) {
+            case 'Provider Configurations' : {
+                this.persistProviderConfiguration();
+                break;
+            }
+            case 'Descriptors': {
+                this.persistDescriptor();
+            }
         }
-        this.descriptor = tempDesc;
-      } catch (e) {
-        console.error('ResourceDetailComponent.setDescriptorContent: Error parsing '+ res.name + ' content: ' + e);
-      }
-    }
-  }
-
-  persistChanges() {
-    switch(this.resourceType) {
-        case 'Provider Configurations' : {
-            this.persistProviderConfiguration();
-            break;
+    }
+
+    persistProviderConfiguration() {
+        let content;
+        let ext = this.resource.name.split('.').pop();
+        switch (ext) {
+            case 'json': {
+                content = this.resourceService.serializeProviderConfiguration(this.providers, 'json');
+                break;
+            }
+            case 'yaml':
+            case 'yml': {
+                content = this.resourceService.serializeProviderConfiguration(this.providers, 'yaml');
+                break;
+            }
+            case 'xml': {
+                // We're not going to bother serializing XML. Rather, delete the original XML resource, and replace it
+                // with JSON
+                console.debug('Replacing XML provider configuration ' + this.resource.name + ' with JSON...');
+
+                // Generate the JSON representation of the updated provider configuration
+                content = this.resourceService.serializeProviderConfiguration(this.providers, 'json');
+
+                let replacementResource = new Resource();
+                replacementResource.name = this.resource.name.slice(0, -4) + '.json';
+                replacementResource.href = this.resource.href;
+
+                // Delete the XML resource
+                this.resourceService.deleteResource(this.resource.href + '?force=true')
+                    .then(() => {
+                        // Save the updated content
+                        this.resourceService.saveResource(replacementResource, content).then(() => {
+                            // Update the list of provider configuration to ensure that the XML one is replaced with the JSON one
+                            this.resourceTypesService.selectResourceType(this.resourceType);
+                            // Update the detail view
+                            this.resourceService.selectedResource(replacementResource);
+                        })
+                            .catch(err => {
+                                console.error('Error persisting ' + replacementResource.name + ' : ' + err);
+                            });
+                    });
+                break;
+            }
         }
-        case 'Descriptors': {
-            this.persistDescriptor();
+
+        // For the non-XML provider configuration cases, simply save the changes
+        if (ext !== 'xml') {
+            // Save the updated content
+            this.resourceService.saveResource(this.resource, content)
+                .then(() => {
+                    // Refresh the presentation
+                    this.resourceService.selectedResource(this.resource);
+                })
+                .catch(err => {
+                    console.error('Error persisting ' + this.resource.name + ' : ' + err);
+                });
         }
     }
-  }
-
-  persistProviderConfiguration() {
-    let content;
-    let ext = this.resource.name.split('.').pop();
-    switch(ext) {
-      case 'json': {
-        content = this.resourceService.serializeProviderConfiguration(this.providers, 'json');
-        break;
-      }
-      case 'yaml':
-      case 'yml': {
-        content = this.resourceService.serializeProviderConfiguration(this.providers, 'yaml');
-        break;
-      }
-      case 'xml': {
-        // We're not going to bother serializing XML. Rather, delete the original XML resource, and replace it
-        // with JSON
-        console.debug('Replacing XML provider configuration ' + this.resource.name + ' with JSON...');
-
-        // Generate the JSON representation of the updated provider configuration
-        content = this.resourceService.serializeProviderConfiguration(this.providers, 'json');
-
-        let replacementResource = new Resource();
-        replacementResource.name = this.resource.name.slice(0, -4) + '.json';
-        replacementResource.href = this.resource.href;
-
-        // Delete the XML resource
-        this.resourceService.deleteResource(this.resource.href + '?force=true')
-          .then(() => {
-          // Save the updated content
-          this.resourceService.saveResource(replacementResource, content).then(() => {
-            // Update the list of provider configuration to ensure that the XML one is replaced with the JSON one
-            this.resourceTypesService.selectResourceType(this.resourceType);
-            // Update the detail view
-            this.resourceService.selectedResource(replacementResource);
-          })
-          .catch(err => {
-              console.error('Error persisting ' + replacementResource.name + ' : ' + err);
-          });
-        });
-        break;
-      }
-    }
-
-    // For the non-XML provider configuration cases, simply save the changes
-    if (ext !== 'xml') {
+
+    persistDescriptor() {
+        let content;
+        let ext = this.resource.name.split('.').pop();
+        switch (ext) {
+            case 'json': {
+                content = this.resourceService.serializeDescriptor(this.descriptor, 'json');
+                break;
+            }
+            case 'yaml':
+            case 'yml': {
+                content = this.resourceService.serializeDescriptor(this.descriptor, 'yaml');
+                break;
+            }
+        }
+
         // Save the updated content
         this.resourceService.saveResource(this.resource, content)
-          .then(() => {
-              // Refresh the presentation
-              this.resourceService.selectedResource(this.resource);
-          })
-          .catch(err => {
-              console.error('Error persisting ' + this.resource.name + ' : ' + err);
-          });
-    }
-  }
-
-
-  persistDescriptor() {
-    let content;
-    let ext = this.resource.name.split('.').pop();
-    switch(ext) {
-      case 'json': {
-        content = this.resourceService.serializeDescriptor(this.descriptor, 'json');
-        break;
-      }
-      case 'yaml':
-      case 'yml': {
-        content = this.resourceService.serializeDescriptor(this.descriptor, 'yaml');
-        break;
-      }
-    }
-
-    // Save the updated content
-    this.resourceService.saveResource(this.resource, content)
-      .then(() => {
-          // Refresh the presentation
-          this.resourceService.selectedResource(this.resource);
-      })
-      .catch(err => {
-          console.error('Error persisting ' + this.resource.name + ' : ' + err);
-      });
-  }
-
-
-  discardChanges() {
-    this.resourceService.selectedResource(this.resource);
-  }
-
-
-  deleteResource() {
-    let resourceName = this.resource.name;
-    this.resourceService.deleteResource(this.resource.href)
-                        .then(() => {
-                            console.debug('Deleted ' + resourceName);
-                            // This refreshes the list of resources
-                            this.resourceTypesService.selectResourceType(this.resourceType);
-                        })
-                        .catch((err: HttpErrorResponse) => {
-                            if (err.status === 304) { // Not Modified
-                                console.log(resourceName + ' cannot be deleted while there are descriptors actively referencing it.');
-                                this.referencedProviderConfigError = true;
-                            } else {
-                                console.error('Error deleting ' + resourceName + ' : ' + err.message)
-                            }
-                        });
-  }
+            .then(() => {
+                // Refresh the presentation
+                this.resourceService.selectedResource(this.resource);
+            })
+            .catch(err => {
+                console.error('Error persisting ' + this.resource.name + ' : ' + err);
+            });
+    }
+
+    discardChanges() {
+        this.resourceService.selectedResource(this.resource);
+    }
 
 
-  onRemoveProvider(name: string) {
-    //console.debug('ResourceDetailComponent --> onRemoveProvider() --> ' + name);
-    for(let i = 0; i < this.providers.length; i++) {
-      if(this.providers[i].name === name) {
-        this.providers.splice(i, 1);
-        break;
-      }
+    deleteResource() {
+        let resourceName = this.resource.name;
+        this.resourceService.deleteResource(this.resource.href)
+            .then(() => {
+                console.debug('Deleted ' + resourceName);
+                // This refreshes the list of resources
+                this.resourceTypesService.selectResourceType(this.resourceType);
+            })
+            .catch((err: HttpErrorResponse) => {
+                if (err.status === 304) { // Not Modified
+                    console.log(resourceName + ' cannot be deleted while there are descriptors actively referencing it.');
+                    this.referencedProviderConfigError = true;
+                } else {
+                    console.error('Error deleting ' + resourceName + ' : ' + err.message);
+                }
+            });
     }
-    this.changedProviders = this.providers;
-  }
 
-  onProviderEnabled(provider: ProviderConfig) {
-      provider.enabled = this.isProviderEnabled(provider) ? 'false' : 'true';
-      this.changedProviders = this.providers;
-  }
+    onRemoveProvider(name: string) {
+        for (let i = 0; i < this.providers.length; i++) {
+            if (this.providers[i].name === name) {
+                this.providers.splice(i, 1);
+                break;
+            }
+        }
+        this.changedProviders = this.providers;
+    }
 
-  onRemoveProviderParam(pc: ProviderConfig, paramName: string) {
-    //console.debug('ResourceDetailComponent --> onRemoveProviderParam() --> ' + pc.name + ' --> ' + paramName);
-    if(pc.params.hasOwnProperty(paramName)) {
-        delete pc.params[paramName];
+    onProviderEnabled(provider: ProviderConfig) {
+        provider.enabled = this.isProviderEnabled(provider) ? 'false' : 'true';
+        this.changedProviders = this.providers;
     }
-    this.changedProviders = this.providers;
-  }
 
+    onRemoveProviderParam(pc: ProviderConfig, paramName: string) {
+        if (pc.params.hasOwnProperty(paramName)) {
+            delete pc.params[paramName];
+        }
+        this.changedProviders = this.providers;
+    }
 
-  onRemoveDescriptorService(serviceName: string) {
-    //console.debug('ResourceDetailComponent --> onRemoveDescriptorService() --> ' + serviceName);
-    for(let i = 0; i < this.descriptor.services.length; i++) {
-      if(this.descriptor.services[i].name === serviceName) {
-        this.descriptor.services.splice(i, 1);
-        this.descriptor.setDirty();
-        break;
-      }
-    }
-  }
-
-
-  onRemoveDescriptorServiceParam(serviceName: string, paramName: string) {
-    //console.debug('ResourceDetailComponent --> onRemoveDescriptorServiceParam() --> ' + serviceName + ' : ' + paramName);
-    let done: boolean = false;
-    for(let i = 0; i < this.descriptor.services.length; i++) {
-      if(this.descriptor.services[i].name === serviceName) {
-        let service = this.descriptor.services[i];
-        if(service.params.hasOwnProperty(paramName)) {
-          delete service.params[paramName];
-          this.descriptor.setDirty();
-          done = true;
-          break;
+    onRemoveDescriptorService(serviceName: string) {
+        for (let i = 0; i < this.descriptor.services.length; i++) {
+            if (this.descriptor.services[i].name === serviceName) {
+                this.descriptor.services.splice(i, 1);
+                this.descriptor.setDirty();
+                break;
+            }
         }
-      }
-      if (done) { // Stop checking services if it has already been handled
-        break;
-      }
-    }
-  }
-
-
-  onRemoveDescriptorServiceURL(serviceName: string, serviceUrl: string) {
-    //console.debug('ResourceDetailComponent --> onRemoveDescriptorServiceParam() --> ' + serviceName + ' : ' + serviceUrl);
-    let done: boolean = false;
-    for(let i = 0; i < this.descriptor.services.length; i++) {
-      if(this.descriptor.services[i].name === serviceName) {
-        let service = this.descriptor.services[i];
-        for(let j = 0; j < service.urls.length; j++) {
-          if(service.urls[j] === serviceUrl) {
-            service.urls.splice(j, 1);
-            this.descriptor.setDirty();
-            done = true;
-            break;
-          }
+    }
+
+    onRemoveDescriptorServiceParam(serviceName: string, paramName: string) {
+        let done = false;
+        for (let i = 0; i < this.descriptor.services.length; i++) {
+            if (this.descriptor.services[i].name === serviceName) {
+                let service = this.descriptor.services[i];
+                if (service.params.hasOwnProperty(paramName)) {
+                    delete service.params[paramName];
+                    this.descriptor.setDirty();
+                    done = true;
+                    break;
+                }
+            }
+            if (done) { // Stop checking services if it has already been handled
+                break;
+            }
+        }
+    }
+
+    onRemoveDescriptorServiceURL(serviceName: string, serviceUrl: string) {
+        let done = false;
+        for (let i = 0; i < this.descriptor.services.length; i++) {
+            if (this.descriptor.services[i].name === serviceName) {
+                let service = this.descriptor.services[i];
+                for (let j = 0; j < service.urls.length; j++) {
+                    if (service.urls[j] === serviceUrl) {
+                        service.urls.splice(j, 1);
+                        this.descriptor.setDirty();
+                        done = true;
+                        break;
+                    }
+                }
+            }
+            if (done) { // Stop checking services if it has already been handled
+                break;
+            }
         }
-      }
-      if (done) { // Stop checking services if it has already been handled
-        break;
-      }
-    }
-  }
+    }
+
+    toggleShowProvider(provider: ProviderConfig) {
+        this[this.resource.name + provider.name + 'Show'] = !this.isShowProvider(provider);
+    }
+
+    isShowProvider(provider: ProviderConfig): boolean {
+        return this[this.resource.name + provider.name + 'Show'];
+    }
+
+    toggleShowProviderParams(provider: ProviderConfig) {
+        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'];
+    }
+
+    toggleShowServices() {
+        this[this.resource.name + 'ShowServices'] = !this.isShowServices();
+    }
+
+    showServices() {
+        this[this.resource.name + 'ShowServices'] = true;
+    }
+
+    isShowServices(): boolean {
+        return this[this.resource.name + 'ShowServices'];
+    }
+
+    toggleShowServiceDiscovery() {
+        this[this.resource.name + 'ShowDiscovery'] = !this.isShowServiceDiscovery();
+    }
+
+    isShowServiceDiscovery(): boolean {
+        return this[this.resource.name + 'ShowDiscovery'];
+    }
+
+    toggleShowServiceParams(service: Service) {
+        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'];
+    }
+
+    toggleShowServiceURLs(service: Service) {
+        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'];
+    }
+
+    setProviderParamEditFlag(provider: ProviderConfig, paramName: string, value: boolean) {
+        this[provider.name + paramName + 'EditMode'] = value;
+        this.changedProviders = this.providers;
+    }
+
+    getProviderParamEditFlag(provider: ProviderConfig, paramName: string): boolean {
+        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();
+    }
+
+    getServiceParamEditFlag(service: Service, paramName: string): boolean {
+        return this[service.name + paramName + 'EditMode'];
+    }
+
+    setServiceURLEditFlag(service: Service, index: number, value: boolean) {
+        this[service.name + index + 'EditMode'] = value;
+        this.descriptor.setDirty();
+    }
+
+    getServiceURLEditFlag(service: Service, index: number): boolean {
+        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];
+    }
 
-  toggleShowProvider(provider: ProviderConfig) {
-      this[this.resource.name + provider.name + 'Show'] = !this.isShowProvider(provider);
-  }
+    setAddingProviderParam(provider: ProviderConfig, value: boolean) {
+        this['addParam' + provider.name] = value;
+    }
 
-  isShowProvider(provider: ProviderConfig): boolean {
-      return this[this.resource.name + provider.name + 'Show'];
-  }
+    addProvider(name: string, role: string) {
+        let p = new ProviderConfig();
+        p.name = name;
+        p.role = role;
+        this.providers.push(p);
+        this.changedProviders = this.providers;
+    }
 
-  toggleShowProviderParams(provider: ProviderConfig) {
-      this[this.resource.name + provider.name + 'ShowParams'] = !this.isShowProviderParams(provider);
-  }
+    addProviderParam(provider: ProviderConfig, name: string, value: string) {
+        if (!provider.params) {
+            provider.params = new Map<string, string>();
+        }
+        provider.params[name] = value;
+        this.changedProviders = this.providers;
+    }
 
-  showProviderParams(provider: ProviderConfig) {
-    this[this.resource.name + provider.name + 'ShowParams'] = true;
-  }
+    getProviderParamNames(provider: ProviderConfig): string[] {
+        if (!provider.params) {
+            provider.params = new Map<string, string>();
+        }
+        return Object.keys(provider.params);
+    }
+
+    isProviderEnabled(pc: ProviderConfig): boolean {
+        let result = false;
+
+        if (pc) {
+            if (typeof (pc.enabled) === 'string') {
+                let lowered = pc.enabled.toLowerCase().trim();
+                result = (lowered === 'true');
+            } else if (typeof (pc.enabled) === 'boolean') {
+                result = pc.enabled;
+            }
+        }
 
-  isShowProviderParams(provider: ProviderConfig): boolean {
-      return this[this.resource.name + provider.name + 'ShowParams'];
-  }
+        return result;
+    }
 
-  toggleShowServices() {
-      this[this.resource.name + 'ShowServices'] = !this.isShowServices();
-  }
+    // This method is required to maintain focus on descriptor service URLs when they're being edited.
+    trackByServiceURLIndex(index: any, item: any) {
+        return index;
+    }
 
-  showServices() {
-    this[this.resource.name + 'ShowServices'] = true;
-  }
-
-  isShowServices(): boolean {
-      return this[this.resource.name + 'ShowServices'];
-  }
-
-  toggleShowServiceDiscovery() {
-      this[this.resource.name + 'ShowDiscovery'] = !this.isShowServiceDiscovery();
-  }
-
-  isShowServiceDiscovery(): boolean {
-      return this[this.resource.name + 'ShowDiscovery'];
-  }
-
-  toggleShowServiceParams(service: Service) {
-      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'];
-  }
-
-  toggleShowServiceURLs(service: Service) {
-      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'];
-  }
-
-  setProviderParamEditFlag(provider: ProviderConfig, paramName: string, value: boolean) {
-      this[provider.name+paramName+'EditMode'] = value;
-      this.changedProviders = this.providers;
-  }
-
-  getProviderParamEditFlag(provider: ProviderConfig, paramName: string): boolean {
-      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();
-  }
-
-  getServiceParamEditFlag(service: Service, paramName: string): boolean {
-      return this[service.name + paramName + 'EditMode'];
-  }
-
-  setServiceURLEditFlag(service: Service, index: number, value: boolean) {
-      this[service.name + index + 'EditMode'] = value;
-      this.descriptor.setDirty();
-  }
-
-  getServiceURLEditFlag(service: Service, index: number): boolean {
-      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 = new Map<string, string>();
-      }
-      provider.params[name] = value;
-      this.changedProviders = this.providers;
-  }
-
-  getProviderParamNames(provider: ProviderConfig): string[] {
-      if (!provider.params) {
-          provider.params = new Map<string, string>();
-      }
-      return Object.keys(provider.params);
-  }
-
-  isProviderEnabled(pc: ProviderConfig): boolean {
-      let result: boolean = false;
-
-      if (pc) {
-          if (typeof(pc.enabled) === 'string') {
-              let lowered = pc.enabled.toLowerCase().trim();
-              result = (lowered === 'true');
-          } else if (typeof(pc.enabled) === 'boolean') {
-              result = pc.enabled;
-          }
-      }
-
-      return result;
-  }
-
-  // This method is required to maintain focus on descriptor service URLs when they're being edited.
-  trackByServiceURLIndex(index: any, item: any) {
-      return index;
-  }
-
-  hasSelectedResource(): boolean {
-    return Boolean(this.resource) && Boolean(this.resource.name);
-  }
-
-
-  getTitleSubject(): string {
-      switch(this.resourceType) {
-          case 'Topologies': {
-              return 'Topology';
-          }
-          case 'Provider Configurations':
-          case 'Descriptors': {
-              return this.resourceType.substring(0, this.resourceType.length - 1);
-          }
-          default: {
-              return 'Resource';
-          }
-      }
-  }
+    hasSelectedResource(): boolean {
+        return Boolean(this.resource) && Boolean(this.resource.name);
+    }
 
+    getTitleSubject(): string {
+        switch (this.resourceType) {
+            case 'Topologies': {
+                return 'Topology';
+            }
+            case 'Provider Configurations':
+            case 'Descriptors': {
+                return this.resourceType.substring(0, this.resourceType.length - 1);
+            }
+            default: {
+                return 'Resource';
+            }
+        }
+    }
 }
diff --git a/gateway-admin-ui/admin-ui/app/resource/resource.component.html b/gateway-admin-ui/admin-ui/app/resource/resource.component.html
index 25debbb..d106b87 100644
--- a/gateway-admin-ui/admin-ui/app/resource/resource.component.html
+++ b/gateway-admin-ui/admin-ui/app/resource/resource.component.html
@@ -1,41 +1,41 @@
 <div>
-  <div class="table-responsive" style="width:100%; overflow: auto; overflow-y: scroll">
-    <table class="table table-hover">
-      <thead>
-      <tr>
-        <th>
+    <div class="table-responsive" style="width:100%; overflow: auto; overflow-y: scroll">
+        <table class="table table-hover">
+            <thead>
+            <tr>
+                <th>
           <span>
           {{ getResourceTypeSingularDisplayName(resourceType) }}
           </span>
-          <span class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs pull-right"
-                *ngIf="resourceType === 'Provider Configurations'"
-                (click)="newProviderConfigModal.open()"
-                title="Create New Provider Configuration"
-                data-toggle="tooltip"></span>
-          <span class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs pull-right"
-                (click)="isAddingService=true"
-                *ngIf="resourceType === 'Descriptors'"
-                (click)="newDescriptorModal.open()"
-                title="Create New Descriptor"
-                data-toggle="tooltip"></span>
-        </th>
-        <th *ngIf="resourceType === 'Topologies'">Timestamp</th>
-      </tr>
-      </thead>
-      <tbody>
-      <tr *ngFor="let resource of resources"
-          [class.selected]="resource === selectedResource"
-          [class.active]="isSelectedResource(resource)"
-          (click)="onSelect(resource)"
-          class="clickable">
-        <td>{{resourceService.getResourceDisplayName(resource)}}</td>
-        <td *ngIf="resourceType === 'Topologies'">{{resource.timestamp | date:'medium'}}</td>
-      </tr>
-      </tbody>
-    </table>
-  </div>
-  <div>
-    <app-new-desc-wizard #newDescriptorModal></app-new-desc-wizard>
-    <app-provider-config-wizard #newProviderConfigModal></app-provider-config-wizard>
-  </div>
-</div>
\ No newline at end of file
+                    <span class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs pull-right"
+                          *ngIf="resourceType === 'Provider Configurations'"
+                          (click)="newProviderConfigModal.open()"
+                          title="Create New Provider Configuration"
+                          data-toggle="tooltip"></span>
+                    <span class="clickable inline-glyph glyphicon glyphicon-plus-sign btn btn-xs pull-right"
+                          (click)="isAddingService=true"
+                          *ngIf="resourceType === 'Descriptors'"
+                          (click)="newDescriptorModal.open()"
+                          title="Create New Descriptor"
+                          data-toggle="tooltip"></span>
+                </th>
+                <th *ngIf="resourceType === 'Topologies'">Timestamp</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr *ngFor="let resource of resources"
+                [class.selected]="resource === selectedResource"
+                [class.active]="isSelectedResource(resource)"
+                (click)="onSelect(resource)"
+                class="clickable">
+                <td>{{resourceService.getResourceDisplayName(resource)}}</td>
+                <td *ngIf="resourceType === 'Topologies'">{{resource.timestamp | date:'medium'}}</td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+    <div>
+        <app-new-desc-wizard #newDescriptorModal></app-new-desc-wizard>
+        <app-provider-config-wizard #newProviderConfigModal></app-provider-config-wizard>
+    </div>
+</div>
diff --git a/gateway-admin-ui/admin-ui/app/resource/resource.component.spec.ts b/gateway-admin-ui/admin-ui/app/resource/resource.component.spec.ts
index fa69cd0..f5f4bc5 100644
--- a/gateway-admin-ui/admin-ui/app/resource/resource.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/resource/resource.component.spec.ts
@@ -14,28 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { ResourceComponent } from './resource.component';
+import {ResourceComponent} from './resource.component';
 
 describe('ResourceComponent', () => {
-  let component: ResourceComponent;
-  let fixture: ComponentFixture<ResourceComponent>;
+    let component: ResourceComponent;
+    let fixture: ComponentFixture<ResourceComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ ResourceComponent ]
-    })
-    .compileComponents();
-  }));
+    beforeEach(async(() => {
+        TestBed.configureTestingModule({
+            declarations: [ResourceComponent]
+        })
+            .compileComponents();
+    }));
 
-  beforeEach(() => {
-    fixture = TestBed.createComponent(ResourceComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
+    beforeEach(() => {
+        fixture = TestBed.createComponent(ResourceComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
 });
diff --git a/gateway-admin-ui/admin-ui/app/resource/resource.component.ts b/gateway-admin-ui/admin-ui/app/resource/resource.component.ts
index 56025ca..803b76a 100644
--- a/gateway-admin-ui/admin-ui/app/resource/resource.component.ts
+++ b/gateway-admin-ui/admin-ui/app/resource/resource.component.ts
@@ -14,94 +14,87 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit } from '@angular/core';
-import { ResourceTypesService } from '../resourcetypes/resourcetypes.service';
-import { ResourceService } from './resource.service';
-import { Resource } from './resource';
-import {TopologyService} from "../topology.service";
-import {Topology} from "../topology";
-import {HttpErrorResponse} from "@angular/common/http";
-
+import {Component, OnInit} from '@angular/core';
+import {ResourceTypesService} from '../resourcetypes/resourcetypes.service';
+import {ResourceService} from './resource.service';
+import {Resource} from './resource';
+import {TopologyService} from '../topology.service';
+import {Topology} from '../topology';
+import {HttpErrorResponse} from '@angular/common/http';
 
 @Component({
-  selector: 'app-resource',
-  templateUrl: './resource.component.html',
-  styleUrls: ['./resource.component.css']
+    selector: 'app-resource',
+    templateUrl: './resource.component.html',
+    styleUrls: ['./resource.component.css']
 })
 export class ResourceComponent implements OnInit {
+    resourceType: string;
+    value: any;
+    resources: Resource[];
+    selectedResource: Resource;
+
+    constructor(private resourceTypesService: ResourceTypesService,
+                private resourceService: ResourceService,
+                private topologyService: TopologyService) {
+    }
 
-  resourceType: string;
-
-  value: any;
-  resources: Resource[];
-  selectedResource: Resource;
-
-  constructor(private resourceTypesService: ResourceTypesService,
-              private resourceService: ResourceService,
-              private topologyService: TopologyService) { }
-
-
-  ngOnInit() {
-    this.resourceTypesService.selectedResourceType$.subscribe(resourceType => this.setResourceType(resourceType));
-  }
-
-
-  setResourceType(resType: string) {
-    //console.debug('ResourceComponent--> setResourceType --> ' + resType);
-
-    // Clear the selected resource, so it can be removed from the list on refresh if necessary
-    this.selectedResource = null;
+    ngOnInit() {
+        this.resourceTypesService.selectedResourceType$.subscribe(resourceType => this.setResourceType(resourceType));
+    }
 
-    this.resourceType = resType;
-    this.resourceService.selectedResourceType(this.resourceType);
-    this.resources = []; // Clear the table before loading the new resources
-    this.resourceService.getResources(resType)
-      .then(resources => {
-        this.resources = resources;
+    setResourceType(resType: string) {
+        // Clear the selected resource, so it can be removed from the list on refresh if necessary
+        this.selectedResource = null;
+
+        this.resourceType = resType;
+        this.resourceService.selectedResourceType(this.resourceType);
+        this.resources = []; // Clear the table before loading the new resources
+        this.resourceService.getResources(resType)
+            .then(resources => {
+                this.resources = resources;
+
+                let debugMsg = 'ResourceComponent --> Found ' + resources.length + ' ' + resType + ' resources\n';
+                for (let res of resources) {
+                    debugMsg += '  ' + res.name + '\n';
+                }
+                console.debug(debugMsg);
+            })
+            .catch((err: HttpErrorResponse) => {
+                console.debug('Error accessing ' + resType + ' : ' + err.message);
+            });
+    }
 
-        let debugMsg = 'ResourceComponent --> Found ' + resources.length + ' ' + resType + ' resources\n';
-        for (let res of resources) {
-            debugMsg += '  ' + res.name + '\n';
+    onSelect(resource: Resource) {
+        this.selectedResource = resource;
+
+        // If it's a topology resource, notify the topology service
+        if (this.resourceType === 'Topologies') {
+            let topology = new Topology();
+            topology.name = resource.name;
+            topology.href = resource.href;
+            this.topologyService.selectedTopology(topology);
+        } else {
+            // Otherwise, notify the resource service
+            this.resourceService.selectedResource(resource);
         }
-        console.debug(debugMsg);
-      })
-      .catch((err: HttpErrorResponse) => {
-        console.debug('Error accessing ' + resType + ' : ' + err.message);
-      });
-  }
-
-  onSelect(resource: Resource) {
-    this.selectedResource = resource;
-
-    // If it's a topology resource, notify the topology service
-    if (this.resourceType === 'Topologies') {
-        let topology = new Topology();
-        topology.name = resource.name;
-        topology.href = resource.href;
-        this.topologyService.selectedTopology(topology);
-    } else {
-        // Otherwise, notify the resource service
-        this.resourceService.selectedResource(resource);
     }
-  }
 
-  isSelectedResource(res: Resource): boolean {
-      return (res && this.selectedResource) ? (res.name === this.selectedResource.name) : false;
-  }
-
-  getResourceTypeSingularDisplayName(resType: string): string {
-      switch(resType) {
-          case 'Topologies': {
-              return 'Topology';
-          }
-          case 'Provider Configurations':
-          case 'Descriptors': {
-              return resType.substring(0, resType.length - 1);
-          }
-          default: {
-              return 'Resource';
-          }
-      }
-  }
+    isSelectedResource(res: Resource): boolean {
+        return (res && this.selectedResource) ? (res.name === this.selectedResource.name) : false;
+    }
 
+    getResourceTypeSingularDisplayName(resType: string): string {
+        switch (resType) {
+            case 'Topologies': {
+                return 'Topology';
+            }
+            case 'Provider Configurations':
+            case 'Descriptors': {
+                return resType.substring(0, resType.length - 1);
+            }
+            default: {
+                return 'Resource';
+            }
+        }
+    }
 }
diff --git a/gateway-admin-ui/admin-ui/app/resource/resource.service.ts b/gateway-admin-ui/admin-ui/app/resource/resource.service.ts
index 9bbfea1..6095423 100644
--- a/gateway-admin-ui/admin-ui/app/resource/resource.service.ts
+++ b/gateway-admin-ui/admin-ui/app/resource/resource.service.ts
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Injectable } from '@angular/core';
-import { HttpHeaders, HttpClient, HttpErrorResponse } from '@angular/common/http';
+import {Injectable} from '@angular/core';
+import {HttpClient, HttpErrorResponse, HttpHeaders} from '@angular/common/http';
 import 'rxjs/add/operator/toPromise';
-import { Subject } from 'rxjs/Subject';
-import { Resource } from './resource';
-import {ProviderConfig} from "../resource-detail/provider-config";
-import {Descriptor} from "../resource-detail/descriptor";
+import {Subject} from 'rxjs/Subject';
+import {Resource} from './resource';
+import {ProviderConfig} from '../resource-detail/provider-config';
+import {Descriptor} from '../resource-detail/descriptor';
 
 
 @Injectable()
@@ -43,68 +43,69 @@ export class ResourceService {
     changedProviderConfigurationSource = new Subject<Array<ProviderConfig>>();
     changedProviderConfiguration$ = this.changedProviderConfigurationSource.asObservable();
 
-    constructor(private http: HttpClient) { }
+    constructor(private http: HttpClient) {
+    }
 
     getResources(resType: string): Promise<Resource[]> {
-        switch(resType) {
-          case 'Provider Configurations': {
-            return this.getProviderConfigResources();
-          }
-          case 'Descriptors': {
-            return this.getDescriptorResources();
-          }
-          case 'Topologies': {
-            return this.getTopologyResources();
-          }
+        switch (resType) {
+            case 'Provider Configurations': {
+                return this.getProviderConfigResources();
+            }
+            case 'Descriptors': {
+                return this.getDescriptorResources();
+            }
+            case 'Topologies': {
+                return this.getTopologyResources();
+            }
         }
     }
 
     getProviderConfigResources(): Promise<Resource[]> {
         let headers = this.addJsonHeaders(new HttpHeaders());
-        return this.http.get(this.providersUrl, { headers: headers })
-                        .toPromise()
-                        .then(response => response['items'] as Resource[])
+        return this.http.get(this.providersUrl, {headers: headers})
+            .toPromise()
+            .then(response => response['items'] as Resource[])
             .catch((err: HttpErrorResponse) => {
                 console.debug('ResourceService --> getProviderConfigResources() --> error: HTTP ' + err.status + ' ' + err.message);
                 if (err.status === 401) {
-                  window.location.assign(document.location.pathname);
+                    window.location.assign(document.location.pathname);
                 } else {
-                  return this.handleError(err);
+                    return this.handleError(err);
                 }
             });
     }
 
     getDescriptorResources(): Promise<Resource[]> {
         let headers = this.addJsonHeaders(new HttpHeaders());
-        return this.http.get(this.descriptorsUrl, { headers: headers })
-                        .toPromise()
-                        .then(response => response['items'] as Resource[])
+        return this.http.get(this.descriptorsUrl, {headers: headers})
+            .toPromise()
+            .then(response => response['items'] as Resource[])
             .catch((err: HttpErrorResponse) => {
                 console.debug('ResourceService --> getDescriptorResources() --> error: HTTP ' + err.status + ' ' + err.message);
                 if (err.status === 401) {
-                  window.location.assign(document.location.pathname);
+                    window.location.assign(document.location.pathname);
                 } else {
-                  return this.handleError(err);
+                    return this.handleError(err);
                 }
             });
     }
 
     getTopologyResources(): Promise<Resource[]> {
         let headers = this.addJsonHeaders(new HttpHeaders());
-        return this.http.get(this.topologiesUrl, { headers: headers })
-                        .toPromise()
-                        .then(response => response['topologies'].topology as Resource[])
+        return this.http.get(this.topologiesUrl, {headers: headers})
+            .toPromise()
+            .then(response => response['topologies'].topology as Resource[])
             .catch((err: HttpErrorResponse) => {
                 console.debug('ResourceService --> getTopologyResources() --> error: HTTP ' + err.status + ' ' + err.message);
                 if (err.status === 401) {
-                  window.location.assign(document.location.pathname);
+                    window.location.assign(document.location.pathname);
                 } else {
-                  return this.handleError(err);
+                    return this.handleError(err);
                 }
             });
     }
 
-    getResource(resType: string, res : Resource): Promise<string> {
+    getResource(resType: string, res: Resource): Promise<string> {
         if (res) {
             let headers = new HttpHeaders();
             headers = (resType === 'Topologies') ? this.addXmlHeaders(headers) : this.addHeaders(headers, res.name);
@@ -115,12 +116,12 @@ export class ResourceService {
                     return response;
                 })
                 .catch((err: HttpErrorResponse) => {
-                  console.debug('ResourceService --> getResource() ' + res.name + '\n  error: ' + err.status + ' ' + err.message);
-                  if (err.status === 401) {
-                    window.location.assign(document.location.pathname);
-                  } else {
-                    return this.handleError(err);
-                  }
+                    console.debug('ResourceService --> getResource() ' + res.name + '\n  error: ' + err.status + ' ' + err.message);
+                    if (err.status === 401) {
+                        window.location.assign(document.location.pathname);
+                    } else {
+                        return this.handleError(err);
+                    }
                 });
         } else {
             return Promise.resolve(null);
@@ -133,31 +134,31 @@ export class ResourceService {
         console.debug('ResourceService --> Persisting ' + resource.name + '\n' + content);
 
         return this.http.put(resource.href, content, {headers: headers})
-                        .toPromise()
-                        .then(() => content)
+            .toPromise()
+            .then(() => content)
             .catch((err: HttpErrorResponse) => {
                 console.debug('ResourceService --> saveResource() ' + resource.name + '\n  error: ' + err.message);
                 if (err.status === 401) {
-                  window.location.assign(document.location.pathname);
+                    window.location.assign(document.location.pathname);
                 } else {
-                  return this.handleError(err);
+                    return this.handleError(err);
                 }
             });
     }
 
-    createResource(resType: string, resource: Resource, content : string): Promise<string> {
+    createResource(resType: string, resource: Resource, content: string): Promise<string> {
         let headers = this.addHeaders(new HttpHeaders(), resource.name);
 
         let url = ((resType === 'Descriptors') ? this.descriptorsUrl : this.providersUrl) + '/' + resource.name;
         return this.http.put(url, content, {headers: headers})
-                        .toPromise()
-                        .then(() => content)
+            .toPromise()
+            .then(() => content)
             .catch((err: HttpErrorResponse) => {
                 console.debug('ResourceService --> createResource() --> ' + resource.name + '\n  error: ' + err.message);
                 if (err.status === 401) {
-                  window.location.assign(document.location.pathname);
+                    window.location.assign(document.location.pathname);
                 } else {
-                  return this.handleError(err);
+                    return this.handleError(err);
                 }
             });
     }
@@ -165,15 +166,15 @@ export class ResourceService {
     deleteResource(href: string): Promise<string> {
         let headers = this.addJsonHeaders(new HttpHeaders());
 
-        return this.http.delete(href, { headers: headers } )
-                        .toPromise()
-                        .then(response => response)
+        return this.http.delete(href, {headers: headers})
+            .toPromise()
+            .then(response => response)
             .catch((err: HttpErrorResponse) => {
                 console.debug('ResourceService --> deleteResource() --> ' + href + '\n  error: ' + err.message);
                 if (err.status === 401) {
-                  window.location.assign(document.location.pathname);
+                    window.location.assign(document.location.pathname);
                 } else {
-                  return this.handleError(err);
+                    return this.handleError(err);
                 }
             });
     }
@@ -198,13 +199,13 @@ export class ResourceService {
         tmp['provider-config-ref'] = desc.providerConfig;
         tmp['services'] = desc.services;
 
-        switch(format) {
+        switch (format) {
             case 'json': {
                 serialized =
                     JSON.stringify(tmp,
                         (key, value) => {
                             let result = value;
-                            switch(typeof value) {
+                            switch (typeof value) {
                                 case 'string': // Don't serialize empty string value properties
                                     result = (value.length > 0) ? value : undefined;
                                     break;
@@ -239,7 +240,7 @@ export class ResourceService {
         let tmp = {};
         tmp['providers'] = providers;
 
-        switch(format) {
+        switch (format) {
             case 'json': {
                 serialized = JSON.stringify(tmp, null, 2);
                 break;
@@ -257,37 +258,37 @@ export class ResourceService {
 
     addHeaders(headers: HttpHeaders, resName: string): HttpHeaders {
         let ext = resName.split('.').pop();
-        switch(ext) {
-          case 'xml': {
-              headers = this.addXmlHeaders(headers);
-              break;
-          }
-          case 'json': {
-              headers = this.addJsonHeaders(headers);
-              break;
-          }
-          case 'yaml':
-          case 'yml': {
-              headers = this.addTextPlainHeaders(headers);
-              break;
-          }
+        switch (ext) {
+            case 'xml': {
+                headers = this.addXmlHeaders(headers);
+                break;
+            }
+            case 'json': {
+                headers = this.addJsonHeaders(headers);
+                break;
+            }
+            case 'yaml':
+            case 'yml': {
+                headers = this.addTextPlainHeaders(headers);
+                break;
+            }
         }
         return headers;
     }
 
     addTextPlainHeaders(headers: HttpHeaders) {
         return this.addCsrfHeaders(headers.append('Accept', 'text/plain')
-                                          .append('Content-Type', 'text/plain'));
+            .append('Content-Type', 'text/plain'));
     }
 
     addJsonHeaders(headers: HttpHeaders): HttpHeaders {
         return this.addCsrfHeaders(headers.append('Accept', 'application/json')
-                                          .append('Content-Type', 'application/json'));
+            .append('Content-Type', 'application/json'));
     }
 
     addXmlHeaders(headers: HttpHeaders): HttpHeaders {
         return this.addCsrfHeaders(headers.append('Accept', 'application/xml')
-                                          .append('Content-Type', 'application/xml'));
+            .append('Content-Type', 'application/xml'));
     }
 
     addCsrfHeaders(headers: HttpHeaders): HttpHeaders {
@@ -295,16 +296,14 @@ export class ResourceService {
     }
 
     addXHRHeaders(headers: HttpHeaders): HttpHeaders {
-      return headers.append('X-Requested-With', 'XMLHttpRequest');
+        return headers.append('X-Requested-With', 'XMLHttpRequest');
     }
 
     selectedResourceType(value: string) {
-        //console.debug('ResourceService --> selectedResourceType(\'' + value +'\')')
         this.selectedResourceTypeSource.next(value);
     }
 
     selectedResource(value: Resource) {
-        //console.debug('ResourceService --> selectedResource() --> ' + value.name);
         this.selectedResourceSource.next(value);
     }
 
diff --git a/gateway-admin-ui/admin-ui/app/resource/service.ts b/gateway-admin-ui/admin-ui/app/resource/service.ts
index 4f27fe6..407f095 100644
--- a/gateway-admin-ui/admin-ui/app/resource/service.ts
+++ b/gateway-admin-ui/admin-ui/app/resource/service.ts
@@ -20,4 +20,4 @@ export class Service {
     version: string;
     params: Object;
     urls: string[];
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.html b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.html
index 8158e6e..e845392 100644
--- a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.html
+++ b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.html
@@ -1,14 +1,18 @@
 <div class="table-responsive" style="width:100%; overflow: auto;">
-  <table class="table table-hover">
-    <thead><tr><th>Resource Types</th></tr></thead>
-    <tbody>
-    <tr *ngFor="let type of resourceTypes"
-        [class.selected]="type === selectedResourceType"
-        [class.active]="type === selectedResourceType"
-        (click)="onSelect(type)"
-        class="clickable">
-        <td>{{type}}</td>
-    </tr>
-    </tbody>
-  </table>
+    <table class="table table-hover">
+        <thead>
+        <tr>
+            <th>Resource Types</th>
+        </tr>
+        </thead>
+        <tbody>
+        <tr *ngFor="let type of resourceTypes"
+            [class.selected]="type === selectedResourceType"
+            [class.active]="type === selectedResourceType"
+            (click)="onSelect(type)"
+            class="clickable">
+            <td>{{type}}</td>
+        </tr>
+        </tbody>
+    </table>
 </div>
diff --git a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.spec.ts b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.spec.ts
index 43bdf40..2790701 100644
--- a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.spec.ts
+++ b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.spec.ts
@@ -14,19 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
-import { ResourcetypesComponent } from './resourcetypes.component';
+import {ResourcetypesComponent} from './resourcetypes.component';
 
 describe('ResourcetypesComponent', () => {
     let component: ResourcetypesComponent;
     let fixture: ComponentFixture<ResourcetypesComponent>;
 
     beforeEach(async(() => {
-    TestBed.configureTestingModule({
-        declarations: [ ResourcetypesComponent ]
-    })
-    .compileComponents();
+        TestBed.configureTestingModule({
+            declarations: [ResourcetypesComponent]
+        })
+            .compileComponents();
     }));
 
     beforeEach(() => {
diff --git a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.ts b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.ts
index e5c83fd..bbcd7c3 100644
--- a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.ts
+++ b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.component.ts
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, Injectable, OnInit } from '@angular/core';
-import { ResourceTypesService } from './resourcetypes.service';
+import {Component, Injectable, OnInit} from '@angular/core';
+import {ResourceTypesService} from './resourcetypes.service';
 
 @Component({
     selector: 'app-resourcetypes',
diff --git a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.service.ts b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.service.ts
index 4eb5f26..71382c8 100644
--- a/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.service.ts
+++ b/gateway-admin-ui/admin-ui/app/resourcetypes/resourcetypes.service.ts
@@ -14,8 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Injectable, OnInit } from '@angular/core';
-import { Subject } from 'rxjs/Subject';
+import {Injectable} from '@angular/core';
+import {Subject} from 'rxjs/Subject';
 
 @Injectable()
 export class ResourceTypesService {
@@ -32,7 +32,6 @@ export class ResourceTypesService {
     }
 
     selectResourceType(resType: string) {
-      //console.debug('ResourceTypeService --> selectResourceType() --> ' + resType);
-      this.selectedResourceTypeSource.next(resType);
+        this.selectedResourceTypeSource.next(resType);
     }
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/topology-detail.component.ts b/gateway-admin-ui/admin-ui/app/topology-detail.component.ts
index ee854f4..12c51c6 100644
--- a/gateway-admin-ui/admin-ui/app/topology-detail.component.ts
+++ b/gateway-admin-ui/admin-ui/app/topology-detail.component.ts
@@ -14,87 +14,95 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit, ViewChild } from '@angular/core';
-import { Topology } from './topology';
-import { TopologyService } from "./topology.service";
-import { ResourceTypesService } from "./resourcetypes/resourcetypes.service";
-import { BsModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal';
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {Topology} from './topology';
+import {TopologyService} from './topology.service';
+import {ResourceTypesService} from './resourcetypes/resourcetypes.service';
+import {BsModalComponent} from 'ng2-bs3-modal/ng2-bs3-modal';
 
 import 'brace/theme/monokai';
 import 'brace/mode/xml';
-import {ValidationUtils} from "./utils/validation-utils";
+import {ValidationUtils} from './utils/validation-utils';
 
 @Component({
-    selector: 'topology-detail',
+    selector: 'app-topology-detail',
     template: `
-     <div class="panel panel-default">
-       <div class="panel-heading">
-         <h4 class="panel-title">{{title}} <span *ngIf="showEditOptions == false" style="padding-left: 15%;" class="text-danger text-center" > Ready Only (generated file) </span> <span class="pull-right">{{titleSuffix}}</span></h4>
-       </div>
-       <div *ngIf="topologyContent" class="panel-body">
-         <ace-editor
-            [(text)]="topologyContent" 
-            [mode]="'xml'" 
-            [options]="options" 
-            [theme]="theme"
-            [readOnly]="!showEditOptions"
-            style="min-height: 430px; width:100%; overflow: auto;" 
-            (textChanged)="onChange($event)">
-         </ace-editor>
-         <div class="panel-footer">
-           <button id="duplicateTopology" (click)="duplicateModal.open('sm')" class="btn btn-default btn-sm" type="submit" >
-             <span class="glyphicon glyphicon-duplicate" aria-hidden="true"></span>
-           </button>
-           <button id="deleteTopology" *ngIf="showEditOptions" (click)="deleteConfirmModal.open('sm')" class="btn btn-default btn-sm" type="submit" >
-             <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
-           </button>
-           <button id="saveTopology" *ngIf="showEditOptions" (click)="saveTopology()" class="btn btn-default btn-sm pull-right" [disabled]="!changedTopology" type="submit" >
-             <span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span>
-           </button>
-         </div>
-       </div>
-       <bs-modal (onClose)="createTopology()" #duplicateModal>
-         <bs-modal-header [showDismiss]="true">
-           <h4 class="modal-title">Create a copy</h4>
-         </bs-modal-header>
-         <bs-modal-body>
-           <div class="form-group">
-             <label for="textbox">Name the new topology</label>
-             <input autofocus type="text" class="form-control" required [(ngModel)]="newTopologyName" id="textbox">
-           </div> 
-         </bs-modal-body>
-         <bs-modal-footer>
-           <button type="button" class="btn btn-default btn-sm" data-dismiss="duplicateModal" (click)="duplicateModal.dismiss()">Cancel</button>
-           <button type="button" class="btn btn-primary btn-sm" [disabled]="!isValidNewTopologyName()" (click)="duplicateModal.close()">Ok</button>
-         </bs-modal-footer>
-       </bs-modal>
-       <bs-modal (onClose)="deleteTopology()" #deleteConfirmModal>
-         <bs-modal-header [showDismiss]="true">
-           <h4 class="modal-title">Deleting Topology {{titleSuffix}}</h4>
-         </bs-modal-header>
-         <bs-modal-body>
-           Are you sure you want to delete the topology?
-         </bs-modal-body>
-         <bs-modal-footer>
-           <button type="button" class="btn btn-default btn-sm" data-dismiss="deleteConfirmModal" (click)="deleteConfirmModal.dismiss()">Cancel</button>
-           <button type="button" class="btn btn-primary btn-sm" (click)="deleteConfirmModal.close()">Ok</button>
-         </bs-modal-footer>
-       </bs-modal>
-     </div>
-   `
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                <h4 class="panel-title">{{title}} <span *ngIf="showEditOptions == false" style="padding-left: 15%;"
+                                                        class="text-danger text-center"> Ready Only (generated file) </span> <span
+                        class="pull-right">{{titleSuffix}}</span></h4>
+            </div>
+            <div *ngIf="topologyContent" class="panel-body">
+                <ace-editor
+                        [(text)]="topologyContent"
+                        [mode]="'xml'"
+                        [options]="options"
+                        [theme]="theme"
+                        [readOnly]="!showEditOptions"
+                        style="min-height: 430px; width:100%; overflow: auto;"
+                        (textChanged)="onChange($event)">
+                </ace-editor>
+                <div class="panel-footer">
+                    <button id="duplicateTopology" (click)="duplicateModal.open('sm')" class="btn btn-default btn-sm" type="submit">
+                        <span class="glyphicon glyphicon-duplicate" aria-hidden="true"></span>
+                    </button>
+                    <button id="deleteTopology" *ngIf="showEditOptions" (click)="deleteConfirmModal.open('sm')"
+                            class="btn btn-default btn-sm" type="submit">
+                        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
+                    </button>
+                    <button id="saveTopology" *ngIf="showEditOptions" (click)="saveTopology()" class="btn btn-default btn-sm pull-right"
+                            [disabled]="!changedTopology" type="submit">
+                        <span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span>
+                    </button>
+                </div>
+            </div>
+            <bs-modal (onClose)="createTopology()" #duplicateModal>
+                <bs-modal-header [showDismiss]="true">
+                    <h4 class="modal-title">Create a copy</h4>
+                </bs-modal-header>
+                <bs-modal-body>
+                    <div class="form-group">
+                        <label for="textbox">Name the new topology</label>
+                        <input autofocus type="text" class="form-control" required [(ngModel)]="newTopologyName" id="textbox">
+                    </div>
+                </bs-modal-body>
+                <bs-modal-footer>
+                    <button type="button" class="btn btn-default btn-sm" data-dismiss="duplicateModal" (click)="duplicateModal.dismiss()">
+                        Cancel
+                    </button>
+                    <button type="button" class="btn btn-primary btn-sm" [disabled]="!isValidNewTopologyName()"
+                            (click)="duplicateModal.close()">Ok
+                    </button>
+                </bs-modal-footer>
+            </bs-modal>
+            <bs-modal (onClose)="deleteTopology()" #deleteConfirmModal>
+                <bs-modal-header [showDismiss]="true">
+                    <h4 class="modal-title">Deleting Topology {{titleSuffix}}</h4>
+                </bs-modal-header>
+                <bs-modal-body>
+                    Are you sure you want to delete the topology?
+                </bs-modal-body>
+                <bs-modal-footer>
+                    <button type="button" class="btn btn-default btn-sm" data-dismiss="deleteConfirmModal"
+                            (click)="deleteConfirmModal.dismiss()">Cancel
+                    </button>
+                    <button type="button" class="btn btn-primary btn-sm" (click)="deleteConfirmModal.close()">Ok</button>
+                </bs-modal-footer>
+            </bs-modal>
+        </div>
+    `
 })
 export class TopologyDetailComponent implements OnInit {
-
     title = 'Topology Detail';
     titleSuffix: string;
     topology: Topology;
     topologyContent: string;
     changedTopology: string;
     newTopologyName: string;
-    readOnly: boolean;
-    showEditOptions:boolean = true;
-    theme: String = "monokai";
-    options:any = {useWorker: false, printMargin: false};
+    showEditOptions = true;
+    theme: String = 'monokai';
+    options: any = {useWorker: false, printMargin: false};
 
     @ViewChild('duplicateModal')
     duplicateModal: BsModalComponent;
@@ -104,14 +112,14 @@ export class TopologyDetailComponent implements OnInit {
 
     @ViewChild('editor') editor;
 
-    constructor(private topologyService : TopologyService, private resourceTypesService: ResourceTypesService) {
+    constructor(private topologyService: TopologyService, private resourceTypesService: ResourceTypesService) {
     }
 
     ngOnInit(): void {
         this.topologyService.selectedTopology$.subscribe(value => this.populateContent(value));
     }
 
-    setTitle(value : string) {
+    setTitle(value: string) {
         this.titleSuffix = value;
     }
 
@@ -121,31 +129,31 @@ export class TopologyDetailComponent implements OnInit {
 
     saveTopology() {
         this.topologyService.saveTopology(this.topology.href, this.changedTopology)
-        .then(value => this.topologyService.changedTopology(this.topology.name));
+            .then(value => this.topologyService.changedTopology(this.topology.name));
     }
 
     createTopology() {
-      this.topologyService.createTopology(this.newTopologyName,
-                                          (this.changedTopology ? this.changedTopology : this.topologyContent))
-                          .then(() => {
-                              this.topologyService.changedTopology(this.newTopologyName)
-                              // This refreshes the list of topologies
-                              this.resourceTypesService.selectResourceType('Topologies');
-                          });
+        this.topologyService.createTopology(this.newTopologyName,
+            (this.changedTopology ? this.changedTopology : this.topologyContent))
+            .then(() => {
+                this.topologyService.changedTopology(this.newTopologyName);
+                // This refreshes the list of topologies
+                this.resourceTypesService.selectResourceType('Topologies');
+            });
     }
 
     deleteTopology() {
         this.topologyService.deleteTopology(this.topology.href)
-                            .then(() => {
-                                this.topologyService.changedTopology(this.topology.name);
-                                // This refreshes the list of topologies
-                                this.resourceTypesService.selectResourceType('Topologies');
-                                // This refreshes the topology content panel to the first one in the list
-                                this.topologyService.getTopologies()
-                                                    .then(topologies => {
-                                                        this.topologyService.selectedTopology(topologies[0]);
-                                                    })
-                            });
+            .then(() => {
+                this.topologyService.changedTopology(this.topology.name);
+                // This refreshes the list of topologies
+                this.resourceTypesService.selectResourceType('Topologies');
+                // This refreshes the topology content panel to the first one in the list
+                this.topologyService.getTopologies()
+                    .then(topologies => {
+                        this.topologyService.selectedTopology(topologies[0]);
+                    });
+            });
     }
 
     populateContent(topology: Topology) {
@@ -153,37 +161,37 @@ export class TopologyDetailComponent implements OnInit {
         this.setTitle(topology.name);
         if (this.topology) {
             if (this.topology.href) {
-              this.topologyService.getTopology(this.topology.href)
-                                  .then( content => this.topologyContent = content)
-                                  .then(() => this.makeReadOnly(this.topologyContent, 'generated') );
+                this.topologyService.getTopology(this.topology.href)
+                    .then(content => this.topologyContent = content)
+                    .then(() => this.makeReadOnly(this.topologyContent, 'generated'));
             }
         }
     }
 
     isValidNewTopologyName(): boolean {
-      return ValidationUtils.isValidResourceName(this.newTopologyName);
+        return ValidationUtils.isValidResourceName(this.newTopologyName);
     }
 
     /*
-    * Parse the XML and depending on the  
+    * Parse the XML and depending on the
     * provided tag value make the editor read only
     */
     makeReadOnly(text, tag) {
         let parser = new DOMParser();
-        let parsed = parser.parseFromString(text,"text/xml");
+        let parsed = parser.parseFromString(text, 'text/xml');
 
         let tagValue = parsed.getElementsByTagName(tag);
         let result = tagValue[0].childNodes[0].nodeValue;
 
-        if(result === 'true') {
+        if (result === 'true') {
             this.showEditOptions = false;
-            this.options = {readOnly: true, useWorker: false, printMargin: false, highlightActiveLine: false, highlightGutterLine: false}; 
+            this.options = {readOnly: true, useWorker: false, printMargin: false, highlightActiveLine: false, highlightGutterLine: false};
         } else {
             this.showEditOptions = true;
-            this.options = {readOnly: false, useWorker: false, printMargin: false}; 
+            this.options = {readOnly: false, useWorker: false, printMargin: false};
         }
 
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/gateway-admin-ui/admin-ui/app/topology.component.ts b/gateway-admin-ui/admin-ui/app/topology.component.ts
index 3d6b7a2..bb279df 100644
--- a/gateway-admin-ui/admin-ui/app/topology.component.ts
+++ b/gateway-admin-ui/admin-ui/app/topology.component.ts
@@ -14,43 +14,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Component, OnInit } from '@angular/core';
-import { Topology } from './topology';
-import { TopologyService } from './topology.service';
-import { Subscription }   from 'rxjs/Subscription';
+import {Component, OnInit} from '@angular/core';
+import {Topology} from './topology';
+import {TopologyService} from './topology.service';
 
 
 @Component({
-    selector: 'topology',
+    selector: 'app-topology',
     template: `
         <div class="table-responsive" style="max-height: 400px; width:100%; overflow: auto;">
             <table class="table table-striped table-hover">
-              <thead>
+                <thead>
                 <tr>
-                  <th>Topology Name</th>
-                  <th>Timestamp</th>
+                    <th>Topology Name</th>
+                    <th>Timestamp</th>
                 </tr>
-              </thead>
-         <tbody>
-         <tr *ngFor="let topology of topologies"
-          [class.selected]="topology === selectedTopology"
-        (click)="onSelect(topology)">
-         <td>{{topology.name}}</td> 
-         <td>{{topology.timestamp | date:'medium'}}</td> 
-         </tr>
-        </tbody>
-        </table>
+                </thead>
+                <tbody>
+                <tr *ngFor="let topology of topologies"
+                    [class.selected]="topology === selectedTopology"
+                    (click)="onSelect(topology)">
+                    <td>{{topology.name}}</td>
+                    <td>{{topology.timestamp | date:'medium'}}</td>
+                </tr>
+                </tbody>
+            </table>
         </div>
-       `
+    `
 })
 export class TopologyComponent implements OnInit {
 
-    value :any;
+    value: any;
     topologies: Topology[];
     selectedTopology: Topology;
 
 
-    constructor(private topologyService : TopologyService) {
+    constructor(private topologyService: TopologyService) {
     }
 
     getTopologies(): void {
diff --git a/gateway-admin-ui/admin-ui/app/topology.service.ts b/gateway-admin-ui/admin-ui/app/topology.service.ts
index 00bf345..3583f87 100644
--- a/gateway-admin-ui/admin-ui/app/topology.service.ts
+++ b/gateway-admin-ui/admin-ui/app/topology.service.ts
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { Injectable }    from '@angular/core';
-import {HttpHeaders, HttpClient, HttpErrorResponse} from '@angular/common/http';
+import {Injectable} from '@angular/core';
+import {HttpClient, HttpErrorResponse, HttpHeaders} from '@angular/common/http';
 
 import 'rxjs/add/operator/toPromise';
-import { Subject }    from 'rxjs/Subject';
-import { Topology } from './topology';
+import {Subject} from 'rxjs/Subject';
+import {Topology} from './topology';
 
 @Injectable()
 export class TopologyService {
@@ -31,75 +31,76 @@ export class TopologyService {
     changedTopologySource = new Subject<string>();
     changedTopology$ = this.changedTopologySource.asObservable();
 
-    constructor(private http: HttpClient) { }
+    constructor(private http: HttpClient) {
+    }
 
     getTopologies(): Promise<Topology[]> {
         let headers = new HttpHeaders();
         headers = this.addJsonHeaders(headers);
         return this.http.get(this.topologiesUrl, {
             headers: headers
-        } )
-        .toPromise()
-        .then(response => response['topologies'].topology as Topology[])
-        .catch((err: HttpErrorResponse) => {
-          console.debug('TopologyService --> getTopologies() --> ' + '\n  error: ' + err.message);
-          if (err.status === 401) {
-            window.location.assign(document.location.pathname);
-          } else {
-            return this.handleError(err);
-          }
-        });
+        })
+            .toPromise()
+            .then(response => response['topologies'].topology as Topology[])
+            .catch((err: HttpErrorResponse) => {
+                console.debug('TopologyService --> getTopologies() --> ' + '\n  error: ' + err.message);
+                if (err.status === 401) {
+                    window.location.assign(document.location.pathname);
+                } else {
+                    return this.handleError(err);
+                }
+            });
     }
 
-    getTopology(href : string): Promise<string> {
+    getTopology(href: string): Promise<string> {
         let headers = new HttpHeaders();
         headers = this.addXmlHeaders(headers);
         return this.http.get(href, {
             headers: headers, responseType: 'text'
-        } )
-        .toPromise()
-        .then(response => response)
-        .catch((err: HttpErrorResponse) => {
-          console.debug('TopologyService --> getTopology() --> ' + href + '\n  error: ' + err.message);
-          if (err.status === 401) {
-            window.location.assign(document.location.pathname);
-          } else {
-            return this.handleError(err);
-          }
-        });
+        })
+            .toPromise()
+            .then(response => response)
+            .catch((err: HttpErrorResponse) => {
+                console.debug('TopologyService --> getTopology() --> ' + href + '\n  error: ' + err.message);
+                if (err.status === 401) {
+                    window.location.assign(document.location.pathname);
+                } else {
+                    return this.handleError(err);
+                }
+            });
     }
 
-    saveTopology(url: string, xml : string): Promise<string> {
+    saveTopology(url: string, xml: string): Promise<string> {
         let xheaders = new HttpHeaders();
         xheaders = this.addXmlHeaders(xheaders);
-        return this.http.put(url, xml, { headers: xheaders, responseType: 'text' })
-                        .toPromise()
-                        .then(() => xml)
-                        .catch((err: HttpErrorResponse) => {
-                          console.debug('TopologyService --> getTopology() --> \n  error: ' + err.status + ' ' + err.message);
-                          if (err.status === 401) {
-                            window.location.assign(document.location.pathname);
-                          } else {
-                            return this.handleError(err);
-                          }
-                        });
+        return this.http.put(url, xml, {headers: xheaders, responseType: 'text'})
+            .toPromise()
+            .then(() => xml)
+            .catch((err: HttpErrorResponse) => {
+                console.debug('TopologyService --> getTopology() --> \n  error: ' + err.status + ' ' + err.message);
+                if (err.status === 401) {
+                    window.location.assign(document.location.pathname);
+                } else {
+                    return this.handleError(err);
+                }
+            });
     }
 
-    createTopology(name: string, xml : string): Promise<string> {
+    createTopology(name: string, xml: string): Promise<string> {
         let xheaders = new HttpHeaders();
         xheaders = this.addXmlHeaders(xheaders);
-        let url = this.topologiesUrl + "/" + name;
-        return this.http.put(url, xml, { headers: xheaders, responseType: 'text' })
-                        .toPromise()
-                        .then(() => xml)
-                        .catch((err: HttpErrorResponse) => {
-                          console.debug('TopologyService --> createTopology() --> \n  error: ' + err.status + ' ' + err.message);
-                          if (err.status === 401) {
-                            window.location.assign(document.location.pathname);
-                          } else {
-                            return this.handleError(err);
-                          }
-                        });
+        let url = this.topologiesUrl + '/' + name;
+        return this.http.put(url, xml, {headers: xheaders, responseType: 'text'})
+            .toPromise()
+            .then(() => xml)
+            .catch((err: HttpErrorResponse) => {
+                console.debug('TopologyService --> createTopology() --> \n  error: ' + err.status + ' ' + err.message);
+                if (err.status === 401) {
+                    window.location.assign(document.location.pathname);
+                } else {
+                    return this.handleError(err);
+                }
+            });
     }
 
     deleteTopology(href: string): Promise<string> {
@@ -107,35 +108,35 @@ export class TopologyService {
         headers = this.addJsonHeaders(headers);
         return this.http.delete(href, {
             headers: headers, responseType: 'text'
-        } )
-        .toPromise()
-        .then(response => response)
-        .catch((err: HttpErrorResponse) => {
-          console.debug('TopologyService --> getTopology() --> ' + href + '\n  error: ' + err.message);
-          if (err.status === 401) {
-            window.location.assign(document.location.pathname);
-          } else {
-            return this.handleError(err);
-          }
-        });
+        })
+            .toPromise()
+            .then(response => response)
+            .catch((err: HttpErrorResponse) => {
+                console.debug('TopologyService --> getTopology() --> ' + href + '\n  error: ' + err.message);
+                if (err.status === 401) {
+                    window.location.assign(document.location.pathname);
+                } else {
+                    return this.handleError(err);
+                }
+            });
     }
 
     addJsonHeaders(headers: HttpHeaders): HttpHeaders {
         return this.addCsrfHeaders(headers.append('Accept', 'application/json')
-                                          .append('Content-Type', 'application/json'));
+            .append('Content-Type', 'application/json'));
     }
 
... 1543 lines suppressed ...


Mime
View raw message