diff --git a/apps/roadm/web/roadm-gui/lib/port/port.component.css b/apps/roadm/web/roadm-gui/lib/port/port.component.css
new file mode 100644
index 0000000..6fb15ef
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/port/port.component.css
@@ -0,0 +1,93 @@
+/* css for ROADM port table view */
+
+#ov-roadm-port h2 {
+    display: inline-block;
+}
+
+/* Panel Styling */
+#ov-roadm-port-item-details-panel.floatpanel {
+    position: absolute;
+    top: 115px;
+}
+
+.light #ov-roadm-port-item-details-panel.floatpanel {
+    background-color: rgb(229, 234, 237);
+}
+.dark #ov-roadm-port-item-details-panel.floatpanel {
+    background-color: #3A4042;
+}
+
+#ov-roadm-port-item-details-panel h3 {
+    margin: 0;
+    font-size: large;
+}
+
+#ov-roadm-port-item-details-panel h4 {
+    margin: 0;
+}
+
+#ov-roadm-port-item-details-panel td {
+    padding: 5px;
+}
+
+#ov-roadm-port-item-details-panel td.label {
+    font-style: italic;
+    opacity: 0.8;
+}
+
+#ov-roadm-port .table-header span.units {
+    font-variant: normal;
+    text-transform: none;
+}
+
+#ov-roadm-port .table-header td {
+    text-transform: unset;
+    font-variant: none;
+}
+
+/* Editable Target Power field */
+#ov-roadm-port .editable span {
+    width: 100%;
+    display: inline-block;
+}
+
+#ov-roadm-port .editable span.target-power:hover {
+    color: #009fdb
+}
+
+#ov-roadm-port .editable input {
+    padding: 0;
+}
+#ov-roadm-port .editable button {
+    margin: 0;
+    padding: 0px 5px 0px 5px;
+}
+
+#ov-roadm-port .editable input {
+    width: 80px;
+}
+
+#ov-roadm-port .editable .input-error {
+    color: red;
+    font-size: 10px;
+    width: 180px;
+}
+
+#ov-roadm-port .mode-select .mode-title {
+    margin: 0;
+    font-weight:bold;
+    font-size: 16px;
+}
+
+#ov-roadm-port .mode-select .mode-fail {
+    color: red;
+    font-size: 10px;
+}
+
+#ov-roadm-port .mode-select select {
+    width: 250px;
+}
+
+#ov-roadm-port .mode-select button {
+    width: 100px;
+}
\ No newline at end of file
diff --git a/apps/roadm/web/roadm-gui/lib/port/port.component.html b/apps/roadm/web/roadm-gui/lib/port/port.component.html
new file mode 100644
index 0000000..fc5461d
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/port/port.component.html
@@ -0,0 +1,130 @@
+<!--
+~ Copyright 2019-present Open Networking Foundation
+~
+~ 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.
+-->
+<!-- Port partial HTML -->
+<div id="ov-roadm-port">
+    <!--<onos-loading [theme]="'light'" [running]="loadingIconShown"></onos-loading>-->
+    <div class="tabular-header">
+        <h2>
+            Ports for Optical Device {{devId}} ({{tableData.length}} Total)
+        </h2>
+
+        <div class="ctrl-btns">
+            <div class="refresh" (click)="toggleRefresh()">
+                <!-- See icon.theme.css for the defintions of the classes active and refresh-->
+                <onos-icon classes="{{ autoRefresh?'active refresh':'refresh' }}" iconId="refresh" iconSize="42" toolTip="{{ autoRefreshTip }}"></onos-icon>
+            </div>
+
+            <div class="separator"></div>
+
+            <div routerLink="/roadm-gui" [queryParams]="{ devId: devId }" routerLinkActive="active">
+                <onos-icon classes="{{ devId ? 'active-rect':undefined }}" iconId="deviceTable" iconSize="42" toolTip="{{deviceTip}}"></onos-icon>
+            </div>
+
+            <!--<div routerLink="/flow" [queryParams]="{ devId: devId }" routerLinkActive="active">-->
+                <!--<onos-icon classes="{{ devId ? 'active-rect' :undefined}}" iconId="flowTable" iconSize="42" toolTip="{{ flowTip }}"></onos-icon>-->
+            <!--</div>-->
+
+            <div>
+                <onos-icon classes="{{ devId ? 'current-view' :undefined}}" iconId="portTable" iconSize="42"></onos-icon>
+            </div>
+
+        </div>
+
+        <div class="search">
+            <input id="searchinput" [(ngModel)]="tableDataFilter.queryStr" type="search" #search placeholder="Search" />
+            <select [(ngModel)]="tableDataFilter.queryBy">
+                <option value="" disabled>Search By</option>
+                <option value="$">All Fields</option>
+                <option value="id">Port ID</option>
+                <option value="name">Pkts Received</option>
+                <option value="type">Pkts Sent</option>
+                <option value="enabled">Bytes Received</option>
+                <option value="grid">Bytes Sent</option>
+                <option value="hasTargetPower">Pkts RX Dropped</option>
+            </select>
+        </div>
+    </div>
+
+    <div class="summary-list" onosTableResize>
+        <div class="table-header">
+            <table>
+                <tr>
+                    <td colId="id">PORT ID</td>
+                    <td colId="reversePort">REVERSE PORT</td>
+                    <td colId="name">NAME</td>
+                    <td colId="type">TYPE</td>
+                    <td colId="enabled">ENABLED</td>
+                    <td colId="minFreq">MIN FREQ (THz)</td>
+                    <td colId="maxFreq">MAX FREQ (THz)</td>
+                    <td colId="grid">GRID (GHz)</td>
+                    <td colId="currentFreq">CURRENT FREQ (THz)</td>
+                    <td colId="modulation">MODULATION</td>
+                    <td colId="powerRange">POWER RANGE (dBm)</td>
+                    <td colId="currentPower">CURRENT OUTPUT POWER (dBm)</td>
+                    <td colId="currentInputPower">CURRENT INPUT POWER (dBm)</td>
+                    <td colId="targetPower">TARGET OUTPUT POWER (dBm)</td>
+                    <td colId="hasTargetPower">HAS TARGET POWER</td>
+                    <td colId="serviceState">SERVICE STATE</td>
+                </tr>
+            </table>
+        </div>
+
+        <div class="table-body">
+            <table>
+                <tr class="table-body" *ngIf="tableData.length === 0" class="no-data">
+                    <td colspan="9">{{annots.noRowsMsg}}</td>
+                </tr>
+
+                <tr *ngFor="let port of tableData | filter : tableDataFilter" (click)="selectCallback($event, port)" [ngClass]="{selected: port.id === selId, 'data-change': isChanged(port.id)}">
+                    <td>{{port.id}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.reversePort}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.name}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.enabled}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH' || port.type=='OMS'?port.minFreq:""}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH' || port.type=='OMS'?port.maxFreq:""}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.type=='OCH' || port.type=='OMS'?port.grid:""}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">
+                        <form [formGroup]="freqForm" (ngSubmit)="submitFrequency(devId, port.id)" *ngIf="port.type=='OCH'">
+                            <input type="text" style="width:50px" value="{{port.type=='OCH'?port.currFreq:''}}" formControlName="newFreq" required>
+                            <button type="submit">Submit</button>
+                        </form>
+                    </td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">
+                        <form [formGroup]="modulationForm" (ngSubmit)="submitModulation(devId, port.id)" *ngIf="port.type=='OCH'">
+                            <select [(ngModel)]="port.modulation" formControlName="newModulation">
+                                <option value="dp_qpsk">qpsk</option>
+                                <option value="dp_16qam">16qam</option>
+                            </select>
+                            <button type="submit">Submit</button>
+                        </form>
+                    </td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.powerRange}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{convertNumber(port.currentPower) | number: '1.2-2'}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{convertNumber(port.currentInputPower) | number: '1.2-2'}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">
+                        <form [formGroup]="powerForm" (ngSubmit)="submitPower(devId, port.id)" *ngIf="port.type=='OCH' || port.type=='OMS'">
+                            <input type="number" step="any" style="width:50px" value="{{convertNumber(port.targetPower) | number: '1.2-2'}}" formControlName="newPower" required>
+                            <button type="submit">Submit</button>
+                        </form>
+                    </td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.hasTargetPower}}</td>
+                    <td [ngClass]="(isDelta() ? 'delta' : '')">{{port.serviceState}}</td>
+                </tr>
+            </table>
+        </div>
+    </div>
+</div>
diff --git a/apps/roadm/web/roadm-gui/lib/port/port.component.ts b/apps/roadm/web/roadm-gui/lib/port/port.component.ts
new file mode 100644
index 0000000..24913ab
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/port/port.component.ts
@@ -0,0 +1,255 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.
+ */
+import { Component, OnDestroy, OnInit } from '@angular/core';
+import {
+    FnService,
+    LogService,
+    PrefsService,
+    WebSocketService,
+    IconService,
+    SortDir, TableBaseImpl, TableResponse
+} from '../../../../../../web/gui2-fw-lib/public_api';
+import { ActivatedRoute } from '@angular/router';
+import {FormGroup, FormControl} from '@angular/forms';
+
+/**
+ * Model of the response from WebSocket
+ */
+interface RoadmPortTableResponse extends TableResponse {
+    roadmPorts: RoadmPort[];
+}
+
+/**
+ * Model of the roadm ports returned from the WebSocket
+ */
+interface RoadmPort {
+    id: string;
+    reversePort: string;
+    name: string;
+    type: string;
+    enabled: string;
+    minFreq: string;
+    maxFreq: string;
+    grid: string;
+    currFreq: string;
+    powerRange: string;
+    currentPower: string;
+    targetPower: string;
+    modulation: string;
+    hasTargetPower: string;
+    serviceState: string;
+}
+
+interface FilterToggleState {
+    devId: string;
+    nzFilter: boolean;
+    showDelta: boolean;
+}
+
+const defaultPortPrefsState = {
+    nzFilter: 1,
+    showDelta: 0,
+};
+
+/**
+ * ONOS GUI -- Port View Component
+ */
+@Component({
+    selector: 'roadm-port',
+    templateUrl: './port.component.html',
+    styleUrls: ['./port.component.css',
+        '../../../../../../web/gui2-fw-lib/lib/widget/table.theme.css',
+        '../../../../../../web/gui2-fw-lib/lib/widget/table.css',
+    ]
+})
+export class RoadmPortComponent extends TableBaseImpl implements OnInit, OnDestroy {
+    devId: string;
+    nzFilter: boolean = true;
+    showDelta: boolean = false;
+    prefsState = {};
+    toggleState: FilterToggleState;
+
+    powerForm: FormGroup;
+    modulationForm: FormGroup;
+    freqForm: FormGroup;
+    SET_POWER_REQ = 'roadmSetTargetPowerRequest';
+    SET_POWER_RESP = 'roadmSetTargetPowerResponse';
+    SET_MODULATION = 'roadmSetModulationRequest';
+    SET_FREQUENCY = 'roadmSetFrequencyRequest';
+
+    restorePrefsConfig; // Function
+
+    deviceTip = 'Show device table';
+
+    constructor(protected fs: FnService,
+                protected log: LogService,
+                protected ar: ActivatedRoute,
+                protected wss: WebSocketService,
+                protected prefs: PrefsService,
+                protected is: IconService,
+    ) {
+        super(fs, log, wss, 'roadmPort');
+        this.ar.queryParams.subscribe(params => {
+            this.devId = params['devId'];
+
+        });
+
+        this.payloadParams = {
+            devId: this.devId
+        };
+
+        this.responseCallback = this.portResponseCb;
+        this.restorePrefsConfig = this.restoreConfigFromPrefs;
+
+        this.sortParams = {
+            firstCol: 'id',
+            firstDir: SortDir.desc,
+            secondCol: 'type',
+            secondDir: SortDir.asc,
+        };
+
+        this.is.loadIconDef('switch');
+    }
+
+    ngOnInit() {
+        this.init();
+        this.createForm();
+        this.wss.bindHandlers(new Map<string, (data) => void>([
+            [this.SET_POWER_RESP, (data) => this.powerConfigCb(data)]
+        ]));
+        this.log.debug('RoadmPortComponent initialized');
+    }
+
+    createForm() {
+        this.powerForm = new FormGroup({
+            newPower: new FormControl(''),
+        });
+        this.modulationForm = new FormGroup({
+            newModulation: new FormControl(''),
+        });
+        this.freqForm = new FormGroup({
+            newFreq: new FormControl(''),
+        });
+        this.log.debug('Create Forms');
+    }
+
+    ngOnDestroy() {
+        this.destroy();
+        this.log.debug('RoadmPortComponent destroyed');
+    }
+
+    portResponseCb(data: RoadmPortTableResponse) {
+        this.log.debug('Roadm Port response received for ', data.roadmPorts.length, 'port');
+    }
+
+    isNz(): boolean {
+        return this.nzFilter;
+    }
+
+    isDelta(): boolean {
+        return this.showDelta;
+    }
+
+    toggleNZState(b?: any) {
+        if (b === undefined) {
+            this.nzFilter = !this.nzFilter;
+        } else {
+            this.nzFilter = b;
+        }
+        this.payloadParams = this.filterToggleState();
+        this.updatePrefsState('nzFilter', this.nzFilter);
+        this.forceRefesh();
+    }
+
+    toggleDeltaState(b?: any) {
+        if (b === undefined) {
+            this.showDelta = !this.showDelta;
+        } else {
+            this.showDelta = b;
+        }
+
+        this.payloadParams = this.filterToggleState();
+        this.updatePrefsState('showDelta', this.showDelta);
+        this.forceRefesh();
+    }
+
+    updatePrefsState(what: any, b: any) {
+        this.prefsState[what] = b ? 1 : 0;
+        this.prefs.setPrefs('port_prefs', this.prefsState);
+    }
+
+    filterToggleState(): FilterToggleState {
+        return this.toggleState = {
+            devId: this.devId,
+            nzFilter: this.nzFilter,
+            showDelta: this.showDelta,
+        };
+    }
+
+    forceRefesh() {
+        this.requestTableData();
+    }
+
+    restoreConfigFromPrefs() {
+        this.prefsState = this.prefs.asNumbers(
+            this.prefs.getPrefs('port_prefs', defaultPortPrefsState, )
+        );
+
+        this.log.debug('Port - Prefs State:', this.prefsState);
+        this.toggleDeltaState(this.prefsState['showDelta']);
+        this.toggleNZState(this.prefsState['nzFilter']);
+    }
+
+    submitPower(devId, port) {
+        this.log.debug('Set power of port ', port, 'in device ', devId, 'as value ', this.powerForm.value['newPower'], 'dBm.');
+        this.wss.sendEvent(this.SET_POWER_REQ, {
+            'targetPower': this.powerForm.value['newPower'],
+            'devId': devId,
+            'id': port,
+        });
+    }
+
+    submitModulation(devId, port) {
+        this.log.debug('Set Modulation of port ', port, 'in device ', devId, 'as value ', this.modulationForm.value['newModulation']);
+        this.wss.sendEvent(this.SET_MODULATION, {
+            'modulation': this.modulationForm.value['newModulation'],
+            'devId': devId,
+            'id': port,
+        });
+    }
+
+    submitFrequency(devId, port) {
+        this.log.debug('Set Frequency of port ', port, 'in device ', devId, 'as value ', this.freqForm.value['newFreq']);
+        this.wss.sendEvent(this.SET_FREQUENCY, {
+            'currFreq': this.freqForm.value['newFreq'],
+            'devId': devId,
+            'id': port,
+        });
+    }
+
+    powerConfigCb(data) {
+        if (!data.valid) {
+            const info = 'The power config operation is failed. The reason is: \n' + data.message;
+            alert(info);
+        } else {
+            this.log.debug('The power config operation is successful!');
+        }
+    }
+
+    convertNumber(str: string): number {
+        return Number(str);
+    }
+}
diff --git a/apps/roadm/web/roadm-gui/lib/roadm-gui-lib.module.ts b/apps/roadm/web/roadm-gui/lib/roadm-gui-lib.module.ts
new file mode 100644
index 0000000..7a75fde
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/roadm-gui-lib.module.ts
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.
+ */
+
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import {RouterModule} from '@angular/router';
+import { Gui2FwLibModule } from '../../../../../web/gui2-fw-lib/public_api';
+import { RoadmDeviceComponent } from './roadm/roadm.component';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { RoadmPortComponent } from './port/port.component';
+
+@NgModule({
+    declarations: [
+        RoadmDeviceComponent,
+        RoadmPortComponent,
+    ],
+    imports: [
+        RouterModule,
+        RouterModule.forChild([{path: 'roadm-port-gui', component: RoadmPortComponent}]),
+        Gui2FwLibModule,
+        CommonModule,
+        FormsModule,
+        ReactiveFormsModule
+    ],
+    exports: [
+        RoadmDeviceComponent,
+        RoadmPortComponent,
+    ]
+})
+export class RoadmGuiLibModule { }
diff --git a/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.css b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.css
new file mode 100644
index 0000000..a49562c
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.css
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.
+ */
+
+#ov-roadm {
+    padding: 20px;
+    color: navy;
+}
+
+#ov-roadm .button-panel {
+    margin: 10px;
+    width: 200px;
+    background-color: #ccf;
+}
+
+#ov-roadm .my-button {
+    cursor: pointer;
+    padding: 4px;
+    text-align: center;
+    color: white;
+    background-color: #99d;
+}
+
+#ov-roadm .number {
+    font-size: 140%;
+    text-align: right;
+}
+
+#ov-roadm .quote {
+    margin: 10px 20px;
+    font-style: italic;
+}
\ No newline at end of file
diff --git a/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.disabled.spec.ts b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.disabled.spec.ts
new file mode 100644
index 0000000..63a51d1
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.disabled.spec.ts
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.
+ */
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RoadmDeviceComponent } from './roadm.component';
+import {ActivatedRoute, Params} from '@angular/router';
+import {CommonModule} from '@angular/common';
+import { of } from 'rxjs';
+import { } from 'jasmine';
+import {
+    FnService,
+    IconService,
+    LogService,
+    Gui2FwLibModule,
+} from '../../../../../../web/gui2-fw-lib/public_api';
+import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
+import {FormsModule} from '@angular/forms';
+import {RouterTestingModule} from '@angular/router/testing';
+
+class MockActivatedRoute extends ActivatedRoute {
+    constructor(params: Params) {
+        super();
+        this.queryParams = of(params);
+    }
+}
+
+class MockIconService {
+    loadIconDef() { }
+}
+
+describe('RoadmDeviceComponent', () => {
+    let fs: FnService;
+    let ar: MockActivatedRoute;
+    let windowMock: Window;
+    let logServiceSpy: jasmine.SpyObj<LogService>;
+    let component: RoadmDeviceComponent;
+    let fixture: ComponentFixture<RoadmDeviceComponent>;
+
+    beforeEach(async(() => {
+        const logSpy = jasmine.createSpyObj('LogService', ['info', 'debug', 'warn', 'error']);
+        ar = new MockActivatedRoute({ 'debug': 'txrx' });
+
+        windowMock = <any>{
+            location: <any>{
+                hostname: 'foo',
+                host: 'foo',
+                port: '80',
+                protocol: 'http',
+                search: { debug: 'true' },
+                href: 'ws://foo:123/onos/ui/websock/path',
+                absUrl: 'ws://foo:123/onos/ui/websock/path'
+            }
+        };
+        fs = new FnService(ar, logSpy, windowMock);
+
+        TestBed.configureTestingModule({
+            imports: [BrowserAnimationsModule, CommonModule, FormsModule, RouterTestingModule, Gui2FwLibModule],
+            declarations: [
+                RoadmDeviceComponent
+            ],
+            providers: [
+                { provide: FnService, useValue: fs },
+                { provide: LogService, useValue: logSpy },
+                { provide: IconService, useClass: MockIconService },
+                { provide: 'Window', useValue: windowMock },
+            ]
+        })
+        .compileComponents();
+        logServiceSpy = TestBed.get(LogService);
+    }));
+
+    beforeEach(() => {
+        fixture = TestBed.createComponent(RoadmDeviceComponent);
+        component = fixture.componentInstance;
+        fixture.detectChanges();
+    });
+
+    it('should create', () => {
+        expect(component).toBeTruthy();
+    });
+});
diff --git a/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.html b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.html
new file mode 100644
index 0000000..b242701
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.html
@@ -0,0 +1,97 @@
+<!--
+~ Copyright 2019-present Open Networking Foundation
+~
+~ 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.
+-->
+<div id="ov-device">
+    <onos-loading [theme]="'light'" [running]="loadingIconShown"></onos-loading>
+    <div class="tabular-header">
+        <h2>Optical Devices ({{ tableData.length }} total)</h2>
+        <div class="ctrl-btns">
+            <div class="refresh" (click)="toggleRefresh()">
+                <!-- See icon.theme.css for the defintions of the classes active and refresh-->
+                <onos-icon classes="{{ autoRefresh?'active refresh':'refresh' }}" iconId="refresh" iconSize="42" toolTip="{{ autoRefreshTip }}"></onos-icon>
+            </div>
+            <div class="separator"></div>
+
+            <!--<div>-->
+                <!--<onos-icon classes="{{ selId ? 'current-view':undefined }}" iconId="deviceTable" iconSize="42"></onos-icon>-->
+            <!--</div>-->
+
+            <!--<div (click)="navto('/flow')">-->
+                <!--<onos-icon classes="{{ selId ? 'active-rect' :undefined}}" iconId="flowTable" iconSize="42" toolTip="{{ flowTip }}"></onos-icon>-->
+            <!--</div>-->
+
+            <div (click)="navto('/roadm-gui/roadm-port-gui')">
+                <onos-icon classes="{{ selId ? 'active-rect' :undefined}}" iconId="portTable" iconSize="42" toolTip="{{ portTip }}"></onos-icon>
+            </div>
+
+        </div>
+        <div class="search">
+            <input id="searchinput" [(ngModel)]="tableDataFilter.queryStr" type="search" #search placeholder="Search" />
+            <select [(ngModel)]="tableDataFilter.queryBy">
+                <option value="" disabled>Search By</option>
+                <option value="$">All Fields</option>
+                <option value="id">Device-Id</option>
+                <option value="name">Name</option>
+                <option value="protocol">Protocol</option>
+            </select>
+        </div>
+    </div>
+
+    <div id="summary-list" class="summary-list" onosTableResize>
+        <div class="table-header">
+            <table>
+                <tr>
+                    <td colId="available" class="table-icon"></td>
+                    <td colId="type" class="table-icon"></td>
+                    <td colId="name">Friendly Name</td>
+                    <td colId="id">Device ID</td>
+                    <td colId="master" [ngClass]="{width: '130px'}">Master</td>
+                    <td colId="ports" [ngClass]="{width: '70px'}">Ports</td>
+                    <td colId="vendor">Vendor</td>
+                    <td colId="hwVersion">H/W Version</td>
+                    <td colId="swVersion">S/W Version</td>
+                    <td colId="protocol" [ngClass]="{width: '100px'}">Protocol</td>
+                    <td colId="type">Type</td>
+                </tr>
+            </table>
+        </div>
+        <div class="table-body">
+            <table>
+                <tr class="table-body" *ngIf="tableData.length === 0" class="no-data">
+                    <td colspan="9">{{ annots.noRowsMsg }}</td>
+                </tr>
+                <tr *ngFor="let dev of tableData | filter : tableDataFilter" (click)="selectCallback($event, dev)" [ngClass]="{selected: dev.id === selId, 'data-change': isChanged(dev.id)}">
+                    <td class="table-icon">
+                        <onos-icon classes="{{ dev._iconid_available}}" iconId={{dev._iconid_available}}></onos-icon>
+                    </td>
+                    <td class="table-icon">
+                        <onos-icon classes="{{dev._iconid_type? 'active-type':undefined}}" iconId="{{dev._iconid_type}}"></onos-icon>
+                    </td>
+                    <td>{{ dev.name }}</td>
+                    <td>{{ dev.id }}</td>
+                    <td>{{ dev.master }}</td>
+                    <td>{{ dev.ports }}</td>
+                    <td>{{ dev.vendor }}</td>
+                    <td>{{ dev.hwVersion }}</td>
+                    <td>{{ dev.swVersion }}</td>
+                    <td>{{ dev.protocol }}</td>
+                    <td>{{ dev.type }}</td>
+                </tr>
+            </table>
+        </div>
+    </div>
+
+    <!--<onos-devicedetails class="floatpanels" id="{{ selId }}" (closeEvent)="deselectRow($event)"></onos-devicedetails>-->
+</div>
diff --git a/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.ts b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.ts
new file mode 100644
index 0000000..13e05dc
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/roadm/roadm.component.ts
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.
+ */
+import { Component, OnInit, OnDestroy} from '@angular/core';
+
+import {
+    FnService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from '../../../../../../web/gui2-fw-lib/public_api';
+
+import { ActivatedRoute, Router } from '@angular/router';
+
+/**
+ * Model of the response from WebSocket
+ */
+interface RoadmDeviceTableResponse extends TableResponse {
+    roadms: RoadmDevice[];
+}
+
+/**
+ * Model of the ROADM devices returned from the WebSocket
+ */
+interface RoadmDevice {
+    available: boolean;
+    chassisid: string;
+    hwVersion: string;
+    id: string;
+    master: string;
+    Vendor: string;
+    name: string;
+    ports: number;
+    protocol: string;
+    serial: string;
+    swVersion: string;
+    type: string;
+    _iconid_available: string;
+    _iconid_type: string;
+}
+
+
+/**
+ * ONOS GUI -- Roadm Device View Component
+ */
+@Component({
+    selector: 'roadm-device',
+    templateUrl: './roadm.component.html',
+    styleUrls: ['./roadm.component.css', './roadm.theme.css',
+        '../../../../../../web/gui2-fw-lib/lib/widget/table.css',
+        '../../../../../../web/gui2-fw-lib/lib/widget/table.theme.css'
+    ]
+})
+export class RoadmDeviceComponent extends TableBaseImpl implements OnInit, OnDestroy {
+
+    // TODO: Update for LION
+    flowTip = 'Show flow view for selected device';
+    portTip = 'Show port view for selected device';
+    groupTip = 'Show group view for selected device';
+    meterTip = 'Show meter view for selected device';
+    pipeconfTip = 'Show pipeconf view for selected device';
+
+    constructor(
+        protected fs: FnService,
+        protected log: LogService,
+        protected as: ActivatedRoute,
+        protected router: Router,
+        protected wss: WebSocketService,
+    ) {
+        super(fs, log, wss, 'roadm');
+        this.responseCallback = this.deviceResponseCb;
+
+        this.as.queryParams.subscribe(params => {
+            this.selId = params['devId'];
+
+        });
+
+        this.payloadParams = {
+            devId: this.selId
+        };
+
+        this.sortParams = {
+            firstCol: 'name',
+            firstDir: SortDir.asc,
+            secondCol: 'id',
+            secondDir: SortDir.desc,
+        };
+    }
+
+    ngOnInit() {
+        this.init();
+        this.log.debug('RoadmDeviceComponent initialized');
+    }
+
+    ngOnDestroy() {
+        this.destroy();
+        this.log.debug('RoadmDeviceComponent destroyed');
+    }
+
+    deviceResponseCb(data: RoadmDeviceTableResponse) {
+        this.log.debug('Device response received for ', data.roadms.length, 'roadm devices');
+    }
+
+    navto(path) {
+        this.log.debug('navigate');
+        if (this.selId) {
+            this.router.navigate([path], { queryParams: { devId: this.selId } });
+        }
+    }
+
+}
diff --git a/apps/roadm/web/roadm-gui/lib/roadm/roadm.theme.css b/apps/roadm/web/roadm-gui/lib/roadm/roadm.theme.css
new file mode 100644
index 0000000..cdc0aba
--- /dev/null
+++ b/apps/roadm/web/roadm-gui/lib/roadm/roadm.theme.css
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Roadm Device View (theme) -- CSS file
+ */
+
+.light #device-details-panel .bottom th {
+    background-color: #e5e5e6;
+}
+
+.light #device-details-panel .bottom tr:nth-child(odd) {
+    background-color: #fbfbfb;
+}
+.light #device-details-panel .bottom tr:nth-child(even) {
+    background-color: #f4f4f4;
+}
+#ov-device .tabular-header {
+    text-align: left;
+}
+#ov-device div.summary-list .table-header td {
+    font-weight: bold;
+    font-variant: small-caps;
+    text-transform: uppercase;
+    font-size: 10pt;
+    padding-top: 8px;
+    padding-bottom: 8px;
+    letter-spacing: 0.02em;
+    cursor: pointer;
+    background-color: #e5e5e6;
+    color: #3c3a3a;
+}
+
+#ov-device div.summary-list .table-body {
+    overflow:scroll;
+}
+#ov-device h2 {
+    display: inline-block;
+}
+
+#ov-device, div.ctrl-btns {
+}
+
+#ov-device th, td {
+    text-align: left;
+    padding:  8px;
+}
