diff --git a/components/datalake-handler/admin/src/src/app/app.module.ts b/components/datalake-handler/admin/src/src/app/app.module.ts
index ddc0c10..e15876a 100644
--- a/components/datalake-handler/admin/src/src/app/app.module.ts
+++ b/components/datalake-handler/admin/src/src/app/app.module.ts
@@ -105,6 +105,7 @@
 import { MatTabsModule } from "@angular/material";
 import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
 import { TopicModalComponent } from "./views/topics/topic-list/topic-modal/topic-modal.component";
+import { KafkaModalComponent } from './views/kafka/kafka-list/kafka-modal/kafka-modal.component';
 
 @NgModule({
   declarations: [
@@ -151,7 +152,8 @@
     ModalToolsComponent,
     ToolAddModalComponent,
     IconComponent,
-    TopicModalComponent
+    TopicModalComponent,
+    KafkaModalComponent
   ],
   imports: [
     BrowserModule,
@@ -195,7 +197,8 @@
     EditKafkaModalComponent,
     ToolAddModalComponent,
     ModalToolsComponent,
-    TopicModalComponent
+    TopicModalComponent,
+    KafkaModalComponent
   ]
 })
 export class AppModule {}
diff --git a/components/datalake-handler/admin/src/src/app/core/models/kafka.model.ts b/components/datalake-handler/admin/src/src/app/core/models/kafka.model.ts
index 34f283f..2b1803f 100644
--- a/components/datalake-handler/admin/src/src/app/core/models/kafka.model.ts
+++ b/components/datalake-handler/admin/src/src/app/core/models/kafka.model.ts
@@ -15,20 +15,21 @@
 */
 
 export class Kafka {
-  id: number;
-  name: string;
-  enabled: boolean;
-  brokerList: string;
-  zooKeeper: string;
-  group: string;
-  secure: boolean;
-  login: string;
-  pass: string;
-  securityProtocol: string;
-  includedTopic: string;
-  excludedTopic: string;
-  consumerCount: number;
-  timeout: number;
+  public id: number;
+  public name: string;
+  public enabled: boolean;
+  public brokerList: string;
+  public zooKeeper: string;
+  public group: string;
+  public secure: boolean;
+  public login: string;
+  public pass: string;
+  public securityProtocol: string;
+  public includedTopic: string;
+  public excludedTopic: string;
+  public consumerCount: number;
+  public timeout: number;
   // for UI display
-  checkedToSave: boolean;
+  public checkedToSave: boolean;
+  public iconPath: string;
 }
diff --git a/components/datalake-handler/admin/src/src/app/core/services/admin.service.ts b/components/datalake-handler/admin/src/src/app/core/services/admin.service.ts
index 8e126a0..307f51e 100644
--- a/components/datalake-handler/admin/src/src/app/core/services/admin.service.ts
+++ b/components/datalake-handler/admin/src/src/app/core/services/admin.service.ts
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP : DataLake
  * ================================================================================
- * Copyright 2019 QCT
+ * Copyright 2019 - 2020 QCT
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -47,4 +47,11 @@
   onKeyPressNumber(data: any) {
     return (data.target.value = data.target.value.replace(/[^0-9.]/g, ""));
   }
+
+  onKeyPressSymbol(data: any) {
+    return (data.target.value = data.target.value.replace(
+      /[~`!#$%\^&*+=\-\[\]\\';,/{}()|\\":<>\?@.]/g,
+      ""
+    ));
+  }
 }
diff --git a/components/datalake-handler/admin/src/src/app/core/services/rest-api.service.ts b/components/datalake-handler/admin/src/src/app/core/services/rest-api.service.ts
index 98eef9a..83d814e 100644
--- a/components/datalake-handler/admin/src/src/app/core/services/rest-api.service.ts
+++ b/components/datalake-handler/admin/src/src/app/core/services/rest-api.service.ts
@@ -339,35 +339,27 @@
       .pipe(retry(1), catchError(this.handleError));
   }
 
-  getAllKafkaList(): Observable<any> {
-    return this.http
-      .get<any>(prefix + "kafkas")
-      .pipe(retry(1), catchError(this.handleError));
-  }
-
-  deleteKafka(id): Observable<any> {
-    return this.http.delete(prefix + "kafkas/" + id).pipe(
-      //online
-      retry(1),
-      map(this.extractData2),
-      catchError(this.handleError)
-    );
-  }
-
-  createNewKafka(k: Kafka): Observable<any> {
-    return this.http.post(prefix + "kafkas", k).pipe(
+  public updateKafka(k: Kafka): Observable<Kafka> {
+    return this.http.put<Kafka>(prefix + "kafkas/" + k.id, k).pipe(
       retry(1),
       tap(_ => this.extractData),
       catchError(this.handleError)
     );
   }
 
-  updateKafka(k: Kafka): Observable<any> {
-    let id = k.id;
-    return this.http.put(prefix + "kafkas/" + id, k).pipe(
+  public addKafka(k: Kafka): Observable<Kafka> {
+    return this.http.post<Kafka>(prefix + "kafkas", k).pipe(
       retry(1),
       tap(_ => this.extractData),
       catchError(this.handleError)
     );
   }
+
+  public deleteKafka(id: string | number): Observable<Kafka> {
+    return this.http.delete<Kafka>(prefix + "kafkas/" + id).pipe(
+      retry(1),
+      tap(_ => console.log(`deleted kafka id=${id}`)),
+      catchError(this.handleError)
+    );
+  }
 }
diff --git a/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.css b/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.css
index 4b76e13..7340ac8 100644
--- a/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.css
+++ b/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.css
@@ -2,7 +2,7 @@
 * ============LICENSE_START=======================================================
 * ONAP : DataLake
 * ================================================================================
-* Copyright 2019 QCT
+* Copyright 2019 - 2020 QCT
 *=================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -36,3 +36,7 @@
   font-weight: 600;
   font-size: 16px;
 }
+
+.card-panel .add-style {
+  cursor: pointer;
+}
diff --git a/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.html b/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.html
index 7b8d865..101b7fc 100644
--- a/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.html
+++ b/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.html
@@ -2,7 +2,7 @@
 ============LICENSE_START=======================================================
 ONAP : DataLake
 ================================================================================
-Copyright 2019 QCT
+Copyright 2019 - 2020 QCT
 =================================================================================
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -17,47 +17,51 @@
 limitations under the License.
 ============LICENSE_END=========================================================
 -->
-<div class="card-panel d-flex flex-column" (click)="cardClick()">
-  <div class="d-flex flex-row p-2">
+<div class="card-panel d-flex flex-column">
+  <div class="d-flex flex-row">
     <div class="dl-h4 title mr-auto ml-3 mt-2">{{ this.title }}</div>
 
-    <div *ngIf="this.modifiable" class="ml-auto dropdown action-icon-dropdown" data-boundary="window">
+    <div *ngIf="this.modifiable" class="ml-auto dropdown action-icon-dropdown mr-1 mt-1" data-boundary="window">
+
       <a class="badge badge-light action-icon-dropdown" data-toggle="dropdown" style="cursor: pointer">
-        <i class="fas fa-ellipsis-h fa-2x dl-icon-enable"></i>
+        <i class="m-2 fas fa-ellipsis-h fa-2x dl-icon-enable"></i>
       </a>
+
+
       <div class="dropdown-menu action-icon-btn">
-        <button class="dropdown-item" type="button" (click)="cardMoreAction('edit')">
-          {{ 'EDIT' | translate }}
+        <button class="dropdown-item" type="button" (click)="cardMoreClickAction('edit')">
+          {{ "EDIT" | translate }}
         </button>
-        <button class="dropdown-item" type="button" (click)="cardMoreAction('delete')">
-          {{ 'DELETE' | translate }}
+        <button class="dropdown-item" type="button" (click)="cardMoreClickAction('delete')">
+          {{ "DELETE" | translate }}
         </button>
       </div>
     </div>
   </div>
 
-  <div class="mt-auto align-self-center p-2">
+  <div class="mt-auto align-self-center">
     <!-- show icon -->
-    <div *ngIf="this.iconPath">
-      <span [ngSwitch]="this.iconSize">
-        <span *ngSwitchCase="'sm'">
-          <svg-icon [src]="this.iconPath" [svgStyle]="{ 'width.px':80 }"></svg-icon>
-        </span>
-        <span *ngSwitchCase="'lg'">
-          <svg-icon [src]="this.iconPath" [svgStyle]="{ 'width.px':180 }"></svg-icon>
-        </span>
-        <span *ngSwitchDefault>
-          <svg-icon [src]="this.iconPath" [svgStyle]="{ 'width.px':150 }"></svg-icon>
-        </span>
-      </span>
+    <div *ngIf="this.iconPath" class="add-style" (click)="cardClickAction()">
+      <div [ngSwitch]=" this.iconSize">
+        <div *ngSwitchCase="'sm'">
+          <img src="{{ this.iconPath }}" style="width: 60px; height:60px;">
+        </div>
+        <div *ngSwitchCase="'md'">
+          <img src="{{ this.iconPath }}" style="width: 100px; height:100px;">
+        </div>
+        <div *ngSwitchCase="'lg'">
+          <img src="{{ this.iconPath }}" style="width: 140px; height:140px;">
+        </div>
+      </div>
     </div>
+
     <!-- show string -->
     <div *ngIf="this.content" class="dl-h1">
       {{ this.content }}
     </div>
   </div>
 
-  <div class="infoname align-self-center mt-auto p-2">
+  <div class="infoname align-self-center mt-auto pb-2">
     {{ this.subcontent }}
   </div>
 </div>
diff --git a/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.ts b/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.ts
index 9be0b84..792aa8c 100644
--- a/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.ts
+++ b/components/datalake-handler/admin/src/src/app/shared/modules/card/card.component.ts
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP : DataLake
  * ================================================================================
- * Copyright 2019 QCT
+ * Copyright 2019 - 2020 QCT
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,7 +23,7 @@
  * @author Ekko Chang
  *
  */
-import { Component, OnInit, Input, Output, EventEmitter  } from "@angular/core";
+import { Component, OnInit, Input, Output, EventEmitter } from "@angular/core";
 
 @Component({
   selector: "app-card",
@@ -38,19 +38,18 @@
   @Input() modifiable: boolean;
   @Input() iconSize: string[] = ["sm", "md", "lg"];
 
-  @Output() cardAction = new EventEmitter<object>();
-  @Output() edit = new EventEmitter<object>();
+  @Output() cardClick = new EventEmitter<object>();
+  @Output() cardMoreActionClick = new EventEmitter<object>();
 
-  constructor() {}
+  constructor() { }
 
-  ngOnInit() {}
+  ngOnInit() { }
 
-  cardClick() {
-    this.cardAction.emit();
+  cardClickAction() {
+    this.cardClick.emit();
   }
 
-  cardMoreAction(type) {
-    this.edit.emit(type);
+  cardMoreClickAction(action: any) {
+    this.cardMoreActionClick.emit(action);
   }
-
 }
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.css b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.css
index 1c7a386..8b13789 100644
--- a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.css
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.css
@@ -1,42 +1 @@
-/*
-    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-            http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-.dashboard-kafka{
-  padding: 0;
-}
-.kafka-li{
-  float: left;
-  list-style: none;
-  padding: 0;
-  width: 23.5%;
-  hight: 23.5%;
-  margin-right: 2%;
-  margin-bottom: 2%;
-}
-li:nth-child(4n){
-  margin-right: 0;
-}
-.add-kafka{
-  cursor: pointer;
-}
-.kafka-list{
-  padding: 0;
-  width: 100%;
-  hight: 100%;
-}
-.add-style{
-
-}
 
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.html b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.html
index ec611cc..b0390d7 100644
--- a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.html
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.html
@@ -1,5 +1,5 @@
 <!--
-    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+    Copyright (C) 2019 - 2020 CMCC, Inc. and others. All rights reserved.
 
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
@@ -13,18 +13,17 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
-  <div class="col-md-12 dashboard-kafka">
-      <ul class="kafka-list clearfix">
-        <li class="add-style" *ngFor="let kafka of this.kafkas; let thisIndex=index;" class="col-md-3 kafka-li">
-          <app-card [iconPath]="cardIconPathList[thisIndex]" [iconSize]="'sm'" [subcontent]="kafka.name"
-                    [modifiable]="this.cardModifiable" (edit)="cardMoreAction($event, kafka.id)">
-          </app-card>
-        </li>
 
-
-        <li class="col-md-3 kafka-li add-kafka">
-          <app-card [iconPath]="this.cardAddicon" [iconSize]="'sm'" (click)="newKafkaModal()">
-          </app-card>
-        </li>
-      </ul>
+<div class="d-flex flex-row flex-nowrap">
+  <div class="col-md-3" *ngFor="let kafka of this.kafkas; let thisIndex = index">
+    <app-card [iconPath]="kafka.iconPath" [iconSize]="'md'" [subcontent]="kafka.name" [modifiable]="this.cardModifiable"
+      (cardClick)="openModal('edit', kafka)" (cardMoreActionClick)="cardMoreClickAction($event, kafka)">
+    </app-card>
   </div>
+
+  <div class="col-md-3">
+    <app-card [iconPath]="this.cardAddiconPath" [iconSize]="'sm'" (click)="openModal('new')">
+    </app-card>
+  </div>
+
+</div>
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.ts b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.ts
index b8dbb0e..46a46a0 100644
--- a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.ts
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-list.component.ts
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2019 CMCC, Inc. and others. All rights reserved.
+    Copyright (C) 2019 - 2020 CMCC, Inc. and others. All rights reserved.
 
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
@@ -16,238 +16,161 @@
 
 /**
  * @author Chunmeng Guo
+ * @contributor Ekko Chang
  */
 
-import { Component, OnInit, ElementRef } from '@angular/core';
+import { Component, OnInit } from "@angular/core";
 import { RestApiService } from "src/app/core/services/rest-api.service";
 import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
-import { Kafka } from "../../../core/models/kafka.model";
+import { Kafka } from "src/app/core/models/kafka.model";
 
 // Loading spinner
 import { NgxSpinnerService } from "ngx-spinner";
 
-// notify
+import { map, mergeMap } from "rxjs/operators";
+import { from, forkJoin } from "rxjs";
+
+// Notify
 import { ToastrNotificationService } from "src/app/shared/components/toastr-notification/toastr-notification.service";
-import {AlertComponent} from "../../../shared/components/alert/alert.component";
-import {NewKafkaModalComponent} from "./new-kafka-modal/new-kafka-modal.component";
-import {EditKafkaModalComponent} from "./edit-kafka-modal/edit-kafka-modal.component";
+import { AlertComponent } from "src/app/shared/components/alert/alert.component";
+import { ModalContentData } from "src/app/shared/modules/modal/modal.data";
+import { ModalComponent } from "src/app/shared/modules/modal/modal.component";
+import { KafkaModalComponent } from "src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component";
 
 @Component({
-  selector: 'app-kafka-list',
-  templateUrl: './kafka-list.component.html',
-  styleUrls: ['./kafka-list.component.css']
+  selector: "app-kafka-list",
+  templateUrl: "./kafka-list.component.html",
+  styleUrls: ["./kafka-list.component.css"]
 })
 export class KafkaListComponent implements OnInit {
+  kafkas: Array<Kafka> = [];
 
-  kafkaList: any = [];
-  kafkas: Kafka[] = [];
-  cardIconPath: string;
-  cardModifiable: boolean;
-  cardAddicon: string;
-  Kafka_New: Kafka;
-  Kafka_Newbody: Kafka;
-  cardIconPathList: any = [];
-  kafkaData: any = [];
+  // app-card parameters
+  cardModifiable: boolean = true;
+  cardAddiconPath: string = "assets/icons/add.svg";
 
   constructor(
-    private kafkaApiService: RestApiService,
+    private restApiService: RestApiService,
     private notificationService: ToastrNotificationService,
     private modalService: NgbModal,
     private spinner: NgxSpinnerService
-  ) {
-    this.initList();
-  }
+  ) {}
 
   ngOnInit() {
     this.spinner.show();
-    this.cardModifiable = true;
-    this.cardAddicon = "assets/icons/add.svg";
-  }
+    let t_kafkas: Array<Kafka> = [];
 
-  initList() {
-    this.initData().then(data => {
-      this.initKafkasList(this.kafkaList).then(data => {
-        this.kafkas = data;
-        if (this.kafkas.length > 0) {
-          let a = "assets/icons/kafka_able.svg";
-          let b = "assets/icons/kafka_disable.svg";
-          this.cardIconPathList.splice(0,this.cardIconPathList.length);
-          for (let i = 0; i < this.kafkas.length; i++) {
-            this.cardIconPath = (this.kafkas[i].enabled == true) ? a : b;
-            this.cardIconPathList.push(this.cardIconPath);
-          }
+    const get_kafkas = this.restApiService.getAllKafka().pipe(
+      mergeMap(ks => from(ks)),
+      map(k => {
+        if (k.enabled == true) {
+          k.iconPath = "assets/icons/kafka_able.svg";
+        } else {
+          k.iconPath = "assets/icons/kafka_disable.svg";
         }
-        console.log(this.cardIconPathList, "kafkas[]");
-      });
+        t_kafkas.push(k);
+      })
+    );
+
+    forkJoin(get_kafkas).subscribe(data => {
+      this.kafkas = t_kafkas;
+      setTimeout(() => {
+        this.spinner.hide();
+      }, 500);
     });
   }
 
-  async initData() {
-    this.kafkaList = [];
-    this.kafkaList = await this.getKafkaList();
-    setTimeout(() => {
-      this.spinner.hide();
-    }, 500);
-  }
-
-  getKafkaList() {
-    let data: any;
-    data = this.kafkaApiService.getAllKafkaList().toPromise();
-    return data;
-  }
-
-  async getKafkaDetailModal(id: number) {
-    this.kafkaData = [];
-    this.kafkaData = await this.getKafkaModal(id);
-    return this.kafkaData;
-  }
-
-  getKafkaModal(id: number) {
-    return this.kafkaApiService.getKafka(id).toPromise();
-  }
-
-  async initKafkasList(kafkaList: []) {
-    let k: Kafka[] = [];
-    if (kafkaList.length > 0) {
-      for (let i = 0; i < kafkaList.length; i++) {
-        let data = kafkaList[i];
-        let feed = {
-          id: data["id"],
-          name: data["name"],
-          enabled: data["enabled"],
-          brokerList: data["brokerList"],
-          zooKeeper: data["zooKeeper"],
-          group: data["group"],
-          secure: data["secure"],
-          login: data["login"],
-          pass: data["pass"],
-          securityProtocol: data["securityProtocol"],
-          includedTopic: data["includedTopic"],
-          excludedTopic: data["excludedTopic"],
-          consumerCount: data["consumerCount"],
-          timeout: data["timeout"]
-        };
-        k.push(feed);
-      }
-    }
-    return k;
-  }
-
-  deleteKafkaModel(id: number) {
-    const index = this.kafkaList.findIndex(t => t.id === id);
-    const modalRef = this.modalService.open(AlertComponent, {
-      size: "sm",
-      centered: true
-    });
-    modalRef.componentInstance.message = "ARE_YOU_SURE_DELETE";
-    modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
-      // Delete kafka
-      this.kafkaApiService.deleteKafka(id).subscribe(
-        res => {
-          console.log(res);
-          if (JSON.stringify(res).length <= 2) {
-            this.kafkaList.splice(index, 1);
-            this.kafkaList = [...this.kafkaList];
-            this.initList();
-            this.notificationService.success("SUCCESSFULLY_DELETED");
-
-          } else {
-            this.initList();
-            this.notificationService.error("FAILED_DELETED");
-          }
-
-          modalRef.close();
-        },
-        err => {
-          this.notificationService.error(err);
-          modalRef.close();
-        }
-      );
-    });
-
-  }
-
-  newKafkaModal() {
-    const modalRef = this.modalService.open(NewKafkaModalComponent, {
-      windowClass: "dl-md-modal kafkas",
-      centered: true
-    });
-
-    this.Kafka_New = new Kafka();
-    this.Kafka_Newbody = new Kafka();
-    modalRef.componentInstance.kafka = this.Kafka_Newbody;
-    modalRef.componentInstance.kafkaList_length = this.kafkaList.length;
-    modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
-      this.Kafka_Newbody = receivedEntry;
-      this.kafkaApiService
-        .createNewKafka(this.Kafka_Newbody)
-        .subscribe(
-          res => {
-            this.spinner.hide();
-            if (res.statusCode == 200) {
-              this.Kafka_New = res.returnBody;
-              this.kafkaList.push(this.Kafka_New);
-              this.kafkaList = [...this.kafkaList];
-              this.initList();
-              this.notificationService.success("SUCCESSFULLY_CREARED");
-            } else {
-              this.initList();
-              this.notificationService.error("FAILED_CREARED");
-            }
-            modalRef.close();
-          },
-          err => {
-            this.spinner.hide();
-            this.notificationService.error(err);
-            modalRef.close();
-          }
-        );
-    });
-  }
-
-  cardMoreAction($event, id) {
-
-    if($event == "edit"){
-      this.editKafkaModal(id);
-    }else {
-      console.log($event,id);
-      this.deleteKafkaModel(id);
-    }
-  }
-
-  editKafkaModal(id: number) {
-    this.getKafkaDetailModal(id).then(data => {
-      console.log("id", id);
-      const index = this.kafkaList.findIndex(t => t.id === id);
-      const modalRef = this.modalService.open(EditKafkaModalComponent, {
-        windowClass: "dl-md-modal kafkas",
-        centered: true
-      });
-      modalRef.componentInstance.editKafka = data;
-      modalRef.componentInstance.passEntry.subscribe(receivedEntry => {
-        this.Kafka_New = receivedEntry;
-        this.kafkaApiService
-          .updateKafka(this.Kafka_New)
-          .subscribe(
+  cardMoreClickAction(mode: string, k: Kafka) {
+    switch (mode) {
+      case "edit":
+        this.openModal("edit", k);
+        break;
+      case "delete":
+        const modalRef = this.modalService.open(AlertComponent, {
+          size: "sm",
+          centered: true,
+          backdrop: "static"
+        });
+        modalRef.componentInstance.message = "ARE_YOU_SURE_DELETE";
+        modalRef.componentInstance.passEntry.subscribe(recevicedEntry => {
+          this.restApiService.deleteKafka(k.id).subscribe(
             res => {
-              this.spinner.hide();
-              if (res.statusCode == 200) {
-                this.kafkaList[index] = this.Kafka_New;
-                this.kafkaList = [...this.kafkaList];
-                this.notificationService.success("SUCCESSFULLY_UPDATED");
-                this.initList();
-              } else {
-                this.notificationService.error("FAILED_UPDATED");
-              }
-              modalRef.close();
+              this.ngOnInit();
+              setTimeout(() => {
+                this.notificationService.success("SUCCESSFULLY_DELETED");
+              }, 500);
             },
             err => {
               this.notificationService.error(err);
-              modalRef.close();
             }
           );
-      });
+          modalRef.close();
+        });
+        break;
+    }
+  }
+
+  openModal(mode: string, k: Kafka) {
+    const modalRef = this.modalService.open(ModalComponent, {
+      size: "lg",
+      centered: true,
+      backdrop: "static"
     });
 
+    switch (mode) {
+      case "new":
+        let newKafka: Kafka;
+        let componentNew = new ModalContentData(KafkaModalComponent, newKafka);
+
+        modalRef.componentInstance.title = "NEW_KAFKA";
+        modalRef.componentInstance.notice = "";
+        modalRef.componentInstance.mode = "new";
+        modalRef.componentInstance.component = componentNew;
+
+        modalRef.componentInstance.passEntry.subscribe((data: Kafka) => {
+          newKafka = Object.assign({}, data);
+          this.restApiService.addKafka(newKafka).subscribe(
+            res => {
+              this.ngOnInit();
+              setTimeout(() => {
+                this.notificationService.success("SUCCESSFULLY_CREARED");
+              }, 500);
+            },
+            err => {
+              this.notificationService.error(err);
+            }
+          );
+          modalRef.close();
+        });
+        break;
+      case "edit":
+        let editKafka: Kafka = k;
+        let componentEdit = new ModalContentData(
+          KafkaModalComponent,
+          editKafka
+        );
+
+        modalRef.componentInstance.title = editKafka.name;
+        modalRef.componentInstance.notice = "";
+        modalRef.componentInstance.mode = "edit";
+        modalRef.componentInstance.component = componentEdit;
+
+        modalRef.componentInstance.passEntry.subscribe((data: Kafka) => {
+          editKafka = Object.assign({}, data);
+          this.restApiService.updateKafka(editKafka).subscribe(
+            res => {
+              this.ngOnInit();
+              setTimeout(() => {
+                this.notificationService.success("SUCCESSFULLY_UPDATED");
+              }, 500);
+            },
+            err => {
+              this.notificationService.error(err);
+            }
+          );
+          modalRef.close();
+        });
+        break;
+    }
   }
 }
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.css b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.css
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.html b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.html
new file mode 100644
index 0000000..a093095
--- /dev/null
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.html
@@ -0,0 +1,157 @@
+<!--
+============LICENSE_START=======================================================
+ONAP : DataLake
+================================================================================
+Copyright 2019 - 2020 QCT
+=================================================================================
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+============LICENSE_END=========================================================
+-->
+
+
+<div class="container p-4">
+
+  <div class="form-group">
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ "NAME" | translate }}</label>
+      </div>
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'STATUS' | translate }}</label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.name" class="form-control dl-input-text" type="text" />
+      </div>
+      <div class="col-md-6">
+        <label class="dl-switch">
+          <input id="switch" type="checkbox" [(ngModel)]="this.data.enabled" />
+          <span class="dl-slider round"></span>
+        </label>
+      </div>
+    </div>
+  </div>
+
+  <div class="form-group">
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'BROKER_LIST' | translate }}</label>
+      </div>
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'ZOOKEEPER' | translate }}</label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.brokerList" class="form-control dl-input-text" type="text" />
+      </div>
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.zooKeeper" class="form-control dl-input-text" type="text" />
+      </div>
+    </div>
+  </div>
+
+  <div class="form-group">
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'Username' | translate }}</label>
+      </div>
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'Password' | translate }}</label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.login" class="form-control dl-input-text" type="text" />
+      </div>
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.pass" class="form-control dl-input-text" type="text" />
+      </div>
+    </div>
+  </div>
+
+  <div class="form-group">
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'AUTHENTICATION' | translate }}</label>
+      </div>
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'SECURITY_PROTOCOL' | translate }}</label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-switch">
+          <input id="switch" type="checkbox" [(ngModel)]="this.data.secure" />
+          <span class="dl-slider round"></span>
+        </label>
+      </div>
+      <div class="col-md-6">
+        <select [(ngModel)]="this.data.securityProtocol" class="custom-select dl-input-text">
+          <option *ngFor="let item of securityProtocol" [selected]="item == this.data.securityProtocol">
+            {{ item }}
+          </option>
+        </select>
+      </div>
+    </div>
+  </div>
+
+  <div class="form-group">
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'GROUP' | translate }}</label>
+      </div>
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'TIME_OUT' | translate }}</label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.group" class="form-control dl-input-text" type="text" />
+      </div>
+      <div class="col-md-6">
+        <input [(ngModel)]="this.data.timeout" class="form-control dl-input-text" type="text"
+          (input)="this.adminService.onKeyPressNumber($event)" />
+      </div>
+    </div>
+  </div>
+
+  <div class="form-group">
+    <div class="row">
+      <div class="col-md-6">
+        <label class="dl-emphasis1">{{ 'EXCLUDED_TOPICS' | translate }}</label>
+      </div>
+    </div>
+    <div class="row">
+      <div class="col-md-9">
+        <div class="d-flex row align-items-center" *ngFor="let field of extenFields; let i = index">
+          <div class="col-md-8 order-1">
+            <input [(ngModel)]="field.item" class="form-control dl-input-text" placeholder="AAI-EVENT" type="text"
+              (change)="onChangeSaveIdField()" (input)="this.adminService.onKeyPressSymbol($event)" />
+          </div>
+          <div class="order-2">
+            <button type="button" class="btn dl-icon-enable p-2" (click)="onClickAddIdField(i)">
+              <i class="fa fa-plus fa-xs" aria-hidden="true"></i>
+            </button>
+          </div>
+          <div class="order-3">
+            <button type="button" class="btn dl-icon-enable p-2" (click)="onClickDelIdField(i)">
+              <i class="fa fa-trash fa-xs" aria-hidden="true"></i>
+            </button>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.spec.ts b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.spec.ts
new file mode 100644
index 0000000..c6da221
--- /dev/null
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.spec.ts
@@ -0,0 +1,45 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : DataLake
+ * ================================================================================
+ * Copyright 2019 - 2020 QCT
+ *=================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { KafkaModalComponent } from './kafka-modal.component';
+
+describe('KafkaModalComponent', () => {
+  let component: KafkaModalComponent;
+  let fixture: ComponentFixture<KafkaModalComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ KafkaModalComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(KafkaModalComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.ts b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.ts
new file mode 100644
index 0000000..0c747d9
--- /dev/null
+++ b/components/datalake-handler/admin/src/src/app/views/kafka/kafka-list/kafka-modal/kafka-modal.component.ts
@@ -0,0 +1,91 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : DataLake
+ * ================================================================================
+ * Copyright 2019 - 2020 QCT
+ *=================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ *
+ * @author Ekko Chang
+ *
+ */
+
+import { Component, OnInit, Input } from "@angular/core";
+
+import { NgbActiveModal } from "@ng-bootstrap/ng-bootstrap";
+import { AdminService } from "src/app/core/services/admin.service";
+import { Kafka } from "src/app/core/models/kafka.model";
+
+@Component({
+  selector: "app-kafka-modal",
+  templateUrl: "./kafka-modal.component.html",
+  styleUrls: ["./kafka-modal.component.css"]
+})
+export class KafkaModalComponent implements OnInit {
+  @Input() data: Kafka;
+  @Input() mode: string;
+
+  securityProtocol: Array<string> = ["None", "SASL_PLAINTEXT"];
+  extenFields: Array<any> = [];
+  newField: any = {};
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public adminService: AdminService
+  ) {}
+
+  ngOnInit() {
+    // Get excludedTopic field
+    this.extenFields = [];
+    if (this.data.excludedTopic != null) {
+      let feed = this.data.excludedTopic.split(",");
+      for (let i = 0; i < feed.length; i++) {
+        let data = { item: feed[i] };
+        this.extenFields.push(data);
+      }
+    } else {
+      this.extenFields.push([]);
+    }
+  }
+
+  onClickAddIdField() {
+    this.extenFields.push(this.newField);
+    this.newField = {};
+    this.onChangeSaveIdField();
+  }
+
+  onClickDelIdField(index: number) {
+    if (this.extenFields.length > 1) {
+      this.extenFields.splice(index, 1);
+      this.onChangeSaveIdField();
+    }
+  }
+
+  onChangeSaveIdField() {
+    this.data.excludedTopic = "";
+
+    for (let i = 0; i < this.extenFields.length; i++) {
+      if (this.extenFields[i].item) {
+        if (this.data.excludedTopic == "") {
+          this.data.excludedTopic = this.extenFields[i].item;
+        } else {
+          this.data.excludedTopic += "," + this.extenFields[i].item;
+        }
+      }
+    }
+  }
+}
diff --git a/components/datalake-handler/admin/src/src/app/views/test/test.component.html b/components/datalake-handler/admin/src/src/app/views/test/test.component.html
index 549fa54..75d0e1f 100644
--- a/components/datalake-handler/admin/src/src/app/views/test/test.component.html
+++ b/components/datalake-handler/admin/src/src/app/views/test/test.component.html
@@ -9,7 +9,7 @@
     <app-card [title]="this.cardTitle" [content]="this.cardContent">
     </app-card>
     <br>
-    <app-card [iconPath]="this.cardAddicon" [iconSize]="'sm'" (cardAction)="cardClick()">
+    <app-card [iconPath]="assets/icons/add.svg" [iconSize]="'sm'" (cardAction)="cardClick()">
     </app-card>
     <br>
   </div>
diff --git a/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.html b/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.html
index f5f3a7e..849c145 100644
--- a/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.html
+++ b/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.html
@@ -134,7 +134,7 @@
             <div class="d-flex row align-items-center" *ngFor="let field of idExFields; let i = index">
               <div class="col-md-8 order-1">
                 <input [(ngModel)]="field.item" class="form-control dl-input-text" placeholder="/event-header/id"
-                  type="text" [value]="field.item" (change)="onChangeSaveIdField()" />
+                  type="text" (change)="onChangeSaveIdField()" (input)="this.adminService.onKeyPressSymbol($event)" />
               </div>
               <div class="order-2">
                 <button type="button" class="btn dl-icon-enable p-2" (click)="onClickAddIdField(i)">
diff --git a/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.ts b/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.ts
index 3f0223e..9289861 100644
--- a/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.ts
+++ b/components/datalake-handler/admin/src/src/app/views/topics/topic-list/topic-modal/topic-modal.component.ts
@@ -229,21 +229,26 @@
   onClickAddIdField() {
     this.idExFields.push(this.idExNewField);
     this.idExNewField = {};
+    this.onChangeSaveIdField();
   }
 
   onClickDelIdField(index: number) {
     if (this.idExFields.length > 1) {
       this.idExFields.splice(index, 1);
+      this.onChangeSaveIdField();
     }
   }
 
   onChangeSaveIdField() {
     this.data.messageIdPath = "";
+
     for (let i = 0; i < this.idExFields.length; i++) {
-      if (i == 0) {
-        this.data.messageIdPath = this.idExFields[i].item;
-      } else {
-        this.data.messageIdPath += "," + this.idExFields[i].item;
+      if (this.idExFields[i].item) {
+        if (this.data.messageIdPath == "") {
+          this.data.messageIdPath = this.idExFields[i].item;
+        } else {
+          this.data.messageIdPath += "," + this.idExFields[i].item;
+        }
       }
     }
   }
diff --git a/components/datalake-handler/admin/src/src/assets/i18n/en-us.json b/components/datalake-handler/admin/src/src/assets/i18n/en-us.json
index 1165461..2e0892f 100644
--- a/components/datalake-handler/admin/src/src/assets/i18n/en-us.json
+++ b/components/datalake-handler/admin/src/src/assets/i18n/en-us.json
@@ -1,6 +1,6 @@
 {
   "SIDEBAR": {
-    "FEEDFER": "DataLake Feeder",
+    "FEEDER": "DataLake Feeder",
     "KAFKA": "Kafka",
     "TOPICS": "Topics",
     "DATABASE": "Database",
