aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/webapp/app/vid/scripts/view-models
diff options
context:
space:
mode:
Diffstat (limited to 'vid-app-common/src/main/webapp/app/vid/scripts/view-models')
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubs.htm53
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubscriberList.htm102
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiServiceTypes.htm4
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubDetails.htm12
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubViewEdit.htm2
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/addNetworkNode.htm62
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/change-management.html100
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/createInstanceServiceModels.htm11
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/creationDialog.htm4
-rw-r--r--[-rwxr-xr-x]vid-app-common/src/main/webapp/app/vid/scripts/view-models/deleteResumeDialog.htm (renamed from vid-app-common/src/main/webapp/app/vid/scripts/view-models/deletionDialog.htm)140
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/instantiate.htm79
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/messageViewer.htm6
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/msoCommit.htm5
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/pnfSearchAssociation.htm62
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/search.htm5
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceMetadata.htm10
-rwxr-xr-xvid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceModels.htm4
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceProxyConfig.htm108
-rw-r--r--vid-app-common/src/main/webapp/app/vid/scripts/view-models/testEnvironments.htm82
19 files changed, 665 insertions, 186 deletions
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubs.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubs.htm
index c5c5ccaa..233bab1c 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubs.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubs.htm
@@ -39,7 +39,8 @@
<br>
Please search by the Subscriber name or enter Service Instance Id or Service Instance Name below:&nbsp;<br><br>
- <table>
+ <table ng-init="loadOwningEntity()">
+
<tr>
<td style="width:30%">
<div class="fn-ebz-container">
@@ -51,7 +52,7 @@
<!--<select name="selectedCustomer" ng-model="selectedCustomer">-->
<!--<option ng-repeat="item in customerList" value="{{item.globalCustomerId}}" ng-disabled="getPermitted(item)">{{item.subscriberName}}</option>-->
<!--</select>-->
- <select ng-model="selectedCustomer"
+ <select ng-model="selectedCustomer" id="selectSubscriber"
ng-options="item.globalCustomerId as item.subscriberName for item in customerList | orderBy:'subscriberName'">
<option value="">Select a subscriber</option>
</select>
@@ -60,8 +61,9 @@
class="glyphicon glyphicon-refresh"></span></a>
</div>
</td>
-
</tr>
+
+
<tr>
<td style="width:30%">
<div class="fn-ebz-container">
@@ -72,8 +74,8 @@
</div>
</td>
<td style="width:60%">
- <div class="fn-ebz-container">
- <input type="text" style="width: 350px;" name="selectedServiceInstance"
+ <div class="fn-ebz-container" style="width: 100%;">
+ <input type="text" name="selectedServiceInstance"
ng-model="selectedServiceInstance"
data-tests-id="searchForExistingInstancesText"
restrict-input="{type : selectedserviceinstancetype}"/>
@@ -81,12 +83,51 @@
</td>
</tr>
+
+ <tr>
+ <td style="width:30%">
+ <div class="fn-ebz-container">
+ <label class="fn-ebz-text-label">Owning entity Name:</label>
+ </div>
+ </td>
+ <td style="width:30%" nowrap>
+ <div class="fn-ebz-container" style="width: 100%;">
+ <!--<select name="selectedCustomer" ng-model="selectedCustomer">-->
+ <!--<option ng-repeat="item in customerList" value="{{item.globalCustomerId}}" ng-disabled="getPermitted(item)">{{item.subscriberName}}</option>-->
+ <!--</select>-->
+ <multiselect id="selectOwningEntity" ng-model="selectedEntity"
+ options="owningEntities"
+ display-prop="name" id-prop="id">
+ </multiselect>
+ </div>
+ </td>
+ </tr>
+
+ <tr>
+ <td style="width:30%">
+ <div class="fn-ebz-container">
+ <label class="fn-ebz-text-label">Project Name:</label>
+ </div>
+ </td>
+ <td style="width:30%" nowrap>
+ <div class="fn-ebz-container" style="width: 100%;">
+ <!--<select name="selectedCustomer" ng-model="selectedCustomer">-->
+ <!--<option ng-repeat="item in customerList" value="{{item.globalCustomerId}}" ng-disabled="getPermitted(item)">{{item.subscriberName}}</option>-->
+ <!--</select>-->
+ <multiselect id="selectProject" ng-model="selectedProject"
+ options="projects"
+ display-prop="name" id-prop="id">
+ </multiselect>
+ </div>
+ </td>
+ </tr>
+
<tr>
<td>
<td style="width:30%">
<div>
<button type="submit" class="btn btn-primary" size="small"
- ng-click="getSubscriberDet(selectedCustomer,selectedserviceinstancetype,selectedServiceInstance);">
+ ng-click="getServiceInstancesSearchResults(selectedCustomer,selectedserviceinstancetype,selectedServiceInstance, selectedProject, selectedEntity);">
Submit
</button>
</a>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubscriberList.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubscriberList.htm
index 16357dde..6198cb47 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubscriberList.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiGetSubscriberList.htm
@@ -18,52 +18,66 @@
============LICENSE_END=========================================================
-->
-<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiGetSubs.css" />
-<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubDetails.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiGetSubs.css"/>
+<link rel="stylesheet" type="text/css" href="app/vid/styles/aaiSubDetails.css"/>
<script src="app/vid/scripts/controller/aaiSubscriberController.js"></script>
<div ng-controller="aaiSubscriberController" ng-cloak>
- <div>
- <div class="statusLine" ng-class="{true:'aaiVisible', false:'aaiHidden'}[isSpinnerVisible]">
- <img src="app/vid/images/spinner.gif"></img>
- <label>Status:</label><span class="status">{{status}}</span>
- </div>
-
- <div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>
-
- <h2 class="heading2"><center>Create New Service Instance</center></h2>
-
- <table>
- <tr>
- <td >
- <div class="fn-ebz-container">
- <label class="fn-ebz-text-label">Subscriber Name:</label>
- </div>
- </td>
- <td style="width:80%" nowrap>
- <div class="fn-ebz-container" ng-init="autoGetSubs();">
- <select ng-model="selectedCustomer" data-tests-id="subscriberName">
- <option value="">Select Subscriber Name</option>
- <option ng-repeat="item in customerList | orderBy:'subscriberName'" ng-value="item.globalCustomerId" ng-disabled="!item.isPermitted" class="subscriberNameOption">{{item.subscriberName}}</option>
- </select>
- &nbsp;&nbsp;<a class="btn btn-primary" ng-click="refreshSubs();" ><span class="glyphicon glyphicon-refresh"></span></a>
- </div>
- </td>
-
- </tr>
- <tr>
- <td >
- </td>
- <td style="width:80%">
- <div >
- <button type="submit" class="btn btn-primary" size="small" ng-click="getServiceTypes(selectedCustomer);">Submit</button></a>
- &nbsp;&nbsp;<button type="submit" class="btn btn-primary" size="small" ng-click="cancelCreateSI()">Cancel</button></a>
- </div>
- </td>
- </tr>
- </table>
-
-
- </div>
+ <div>
+ <div class="statusLine" ng-class="{true:'aaiVisible', false:'aaiHidden'}[isSpinnerVisible]">
+ <img src="app/vid/images/spinner.gif"></img>
+ <label>Status:</label><span class="status">{{status}}</span>
+ </div>
+
+ <div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}
+ <pre>{{errorDetails | json}}</pre>
+ </font></div>
+
+ <h2 class="heading2">
+ <center>Create New Service Instance</center>
+ </h2>
+
+ <table>
+ <tr>
+ <td>
+ <div class="fn-ebz-container">
+ <label class="fn-ebz-text-label">Subscriber Name:</label>
+ </div>
+ </td>
+ <td style="width:80%" nowrap>
+ <div class="fn-ebz-container" ng-init="autoGetSubs();">
+ <select ng-model="selectedCustomer" data-tests-id="subscriberName">
+ <option value="">Select Subscriber Name</option>
+ <option ng-repeat="item in customerList | orderBy:'subscriberName'"
+ ng-value="item.globalCustomerId" ng-disabled="!item.isPermitted"
+ class="subscriberNameOption">{{item.subscriberName}}
+ </option>
+ </select>
+ &nbsp;&nbsp;<a class="btn btn-primary" ng-click="refreshSubs();"><span
+ class="glyphicon glyphicon-refresh"></span></a>
+ </div>
+ </td>
+
+ </tr>
+ <tr>
+ <td>
+ </td>
+ <td style="width:80%">
+ <div>
+ <button type="submit" class="btn btn-primary" size="small"
+ ng-click="getServiceTypes(selectedCustomer);">Submit
+ </button>
+ </a>
+ &nbsp;&nbsp;<button type="submit" class="btn btn-primary" size="small"
+ ng-click="cancelCreateSI()">Cancel
+ </button>
+ </a>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
+ </div>
</div>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiServiceTypes.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiServiceTypes.htm
index 06a53c3e..dc9f0a42 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiServiceTypes.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiServiceTypes.htm
@@ -31,7 +31,7 @@
<div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>
<h2 class="heading2"><center>Create New Service Instance</center></h2>
- <table>
+ <table class="create-instance-service ">
<tr>
<td >
@@ -69,7 +69,7 @@
</td>
<td style="width:80%">
<div >
- <button type="submit" class="btn btn-primary" size="small" ng-click="getAaiServiceModels(selectedServicetype,createSubscriberName);">Submit</button></a>
+ <button type="submit" class="btn btn-primary" size="small" ng-click="getAaiServiceModels(selectedServicetype,createSubscriberName);" ng-disabled="!selectedServicetype" ng-class="{'button--inactive': !selectedServicetype}">Submit</button></a>
&nbsp;&nbsp;<button type="submit" class="btn btn-primary" size="small" ng-click="cancelCreateSIType()">Cancel</button></a>
</div>
</td>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubDetails.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubDetails.htm
index 3471fcb9..686e33b0 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubDetails.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubDetails.htm
@@ -27,13 +27,13 @@
<label>Status:</label><span class="status">{{status}}</span>
</div>
- <div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>
+ <div data-tests-id="subDetailsErrMsg" ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>
- <h1 class="heading1"><center>Subscriber Details for {{selectedSubscriber}} ({{selectedSubscriberName}})</center></h1>
+ <h1 class="heading1"><center>Subscriber Details for {{selectedSubscriberId}} ({{selectedSubscriberName}})</center></h1>
<br>
<div class="fn-ebz-container">
Filter:
- <input class="fn-ebz-text" type="text" ng-model="searchString" size="20" style="width: 250px;">
+ <input class="fn-ebz-text" type="text" ng-model="searchString" size="20" style="width: 250px;" data-tests-id="filter-subscriber-details">
</div>
<div ng-init="getSubDetails();">
@@ -54,13 +54,13 @@
<tr>
<td att-table-body>
<div>
- <a alt="View/Edit" ng-click="getAsdcModel(disData);" data-tests-id="{{'view/edit-test-data-id-' + disData['serviceInstanceId']}}" ng-bind="disData.isPermitted ? 'View/Edit' : 'View'"></a>
+ <a alt="View/Edit" ng-click="onViewEditClick(disData);" data-tests-id="{{'view/edit-test-data-id-' + disData['serviceInstanceId']}}" ng-bind="disData.isPermitted ? 'View/Edit' : 'View'"></a>
</div>
</td>
<td att-table-body ng-bind="disData['globalCustomerId']"></td>
- <td att-table-body ng-bind="disData['subscriberName']"></td>
+ <td att-table-body ng-bind="disData['subscriberName']" data-tests-id="{{'subscriber-name-test-data-id-' + $index}}"></td>
<td att-table-body ng-bind="disData['serviceType']"></td>
- <td att-table-body ng-bind="disData['serviceInstanceName']"></td>
+ <td att-table-body ng-bind="disData['serviceInstanceName']" data-tests-id="{{'service-name-test-data-id-' + $index}}"></td>
<td att-table-body data-tests-id="{{'instance-id-for-name-' + disData['serviceInstanceName']}}" ng-bind="disData['serviceInstanceId']"></td>
</tr>
</tbody>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubViewEdit.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubViewEdit.htm
index 40bd1488..31621cfe 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubViewEdit.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/aaiSubViewEdit.htm
@@ -23,7 +23,7 @@
<div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"
ng-cloak>
<div ng-include="'app/vid/scripts/view-models/creationDialog.htm'"></div>
- <div ng-include="'app/vid/scripts/view-models/deletionDialog.htm'"></div>
+ <div ng-include="'app/vid/scripts/view-models/deleteResumeDialog.htm'"></div>
<div ng-include="'app/vid/scripts/view-models/detailsDialog.htm'"></div>
</div>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/addNetworkNode.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/addNetworkNode.htm
new file mode 100644
index 00000000..6983477e
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/addNetworkNode.htm
@@ -0,0 +1,62 @@
+<!--
+============LICENSE_START=======================================================
+VID
+================================================================================
+Copyright (C) 2017 AT&T Intellectual Property. 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.
+============LICENSE_END=========================================================
+-->
+<link rel="stylesheet" type="text/css" href="app/vid/styles/networkNode.css"/>
+
+<div class="network-wrapper-config">
+ <div class="head">
+ <div class="title">Config {{modelName}}</div>
+ <div class="btn-wrapper">
+ <button class="cancel-btn grey" data-tests-id="cancelButton" data-ng-click="cancel()">Cancel</button>
+ <button class="next-btn blue" data-tests-id="nextButton" data-ng-disabled="networkNodeForm.$invalid" data-ng-click="next()">Next</button>
+ </div>
+ </div>
+
+ <div class="content-wrapper">
+ <div class="content">
+ <form name="networkNodeForm" class="form-wrapper">
+ <div class="instance-field {{field.id}}" ng-repeat="(key, field) in nodeTemplateFields">
+ <input id="{{field.id}}" data-tests-id="suppressRollbackInput" ng-if="key === 'suppressRollback'" type="checkbox" ng-model="field.value"/>
+ <label for="{{field.id}}"class="title" ng-if="key !== 'lineOfBusiness' && key !== 'platform'">
+ {{field.name}}
+ </label>
+ <div class="" ng-if="key === 'instanceName'">
+ <input data-tests-id="instanceNameInput" name="{{field.id}}" id="{{field.id}}" type="text" required ng-model="field.value" ng-pattern="regexInstanceName">
+ <span class="error" data-ng-show="!networkNodeForm.instanceName.$error.required && networkNodeForm.instanceName.$dirty && networkNodeForm.instanceName.$invalid">{{errorMsg}}</span>
+ </div>
+ <select id="{{field.id}}" data-tests-id="regionDropDown" ng-if="key === 'lcpRegion'" required ng-model="field.value"
+ placeholder="Choose {{field.name}}"
+ data-ng-change="setTenant(field)">
+ <option value="" selected>LCP region</option>
+ <option data-ng-disabled="!option.isPermitted" ng-repeat="option in field.optionList"
+ value="{{option.id}}" data-tests-id="{{'region-' + option.id}}">{{option.id}}</option>
+ </select>
+ <select id="{{field.id}}" data-tests-id="tenantDropDown" ng-if="key === 'tenant'" required ng-model="field.value"
+ data-ng-options="option.tenantName for option in field.optionList" placeholder="Choose {{field.name}}"
+ data-ng-disabled="!field.optionList || !field.optionList.length">
+ <option value="" selected>Tenant name</option>
+ </select>
+ </div>
+ </form>
+ </div>
+ <div class="sidebar-right">
+ <service-metadata title-txt="info" service-metadata-fields="serviceMetadataFields"></service-metadata>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/change-management.html b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/change-management.html
index 0f42ec87..94a1790d 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/change-management.html
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/change-management.html
@@ -13,63 +13,95 @@
<input type="search" id="change-management-search" class="search-changes" ng-change="vm.searchChanges()" ng-model-options="{debounce: 300}" ng-model="vm.searchChangesTerm" placeholder="Type to search">
</div>
+ <span class="refresh-cm">
+ Last updated at:
+ <span class="last-time-updated">{{ vm.lastTimeUpdated }}</span>
+ <i class="icon-sync" data-tests-id="refresh-cm" ng-click="vm.init()"></i>
+ </span>
<div class="jobs-table">
<div class="row">
<div class="col-md-12">
<uib-tabset active="activeJustified" justified="true">
<uib-tab index="0" heading="Active" id="active-tab">
- <table class="table table-bordered" id="active-table">
- <thead class="thead-default">
- <tr>
- <th class="col-md-5">VNF Name</th>
- <th class="col-md-2">Type</th>
- <th class="col-md-2">Flow</th>
- <th class="col-md-2">Start time</th>
- <th>Status</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
+ <div class="table-wrapper">
+ <table class="table table-bordered" data-tests-id="active-table-cm" id="active-table">
+ <thead class="thead-default" ng-click="collapseInProgress=!collapseInProgress">
<tr class="table-headline-row">
- <th>
+ <th >
+ <span ng-class="{'collapse-icon':!collapseInProgress,'expand-icon':collapseInProgress }"></span>
<span id="in-progress-table-head">IN PROGRESS</span>
</th>
<th></th>
<th></th>
<th></th>
<th></th>
- <th></th>
</tr>
- <tr ng-repeat="changeManagement in vm.changeManagements | changeManagementsByStatuses:{statuses: ['FAILED', 'INPROGRESS', 'PENDING']}">
+ <tr ng-show="!collapseInProgress">
+ <th class="col-md-5">VNF Name</th>
+ <th class="col-md-2">Type</th>
+ <th class="col-md-2">Flow</th>
+ <th class="col-md-2">Start time</th>
+ <th>Status</th>
+ </tr>
+ </thead>
+ <tbody ng-show="!collapseInProgress">
+
+ <tr data-tests-id="active-table-cm-row" ng-repeat="changeManagement in vm.changeManagements | changeManagementsByStatuses:{statuses: ['FAILED', 'IN_PROGRESS', 'PENDING']}">
<th scope="row">{{changeManagement.instanceReferences.vnfInstanceName || 'No-Instance-Name'}}</th>
<td>{{changeManagement.requestScope}}</td>
<td>{{changeManagement.requestType}}</td>
<td>{{changeManagement.startTime}}</td>
<td class="centered" ng-if="changeManagement.requestStatus.requestState == 'FAILED'"><span class="icon-x" ng-click="vm.openFailedModal({details: changeManagement.requestStatus.statusMessage, job: changeManagement})"></span></td>
- <td class="centered" ng-if="changeManagement.requestStatus.requestState == 'INPROGRESS'"><span class="icon-process" ng-click="vm.openInProgressModal({details: changeManagement.requestStatus.statusMessage, job: changeManagement})"></span></td>
+ <td class="centered" ng-if="changeManagement.requestStatus.requestState == 'IN_PROGRESS'"><span class="icon-process" ng-click="vm.openInProgressModal({details: changeManagement.requestStatus.statusMessage, job: changeManagement})"></span></td>
<td class="centered" ng-if="changeManagement.requestStatus.requestState == 'PENDING'"><span class="icon-alert" ng-click="vm.openAlertModal({details: changeManagement.requestStatus.statusMessage, job: changeManagement})"></span></td>
- <td class="centered"><span class="icon-view"></span></td>
</tr>
- <tr class="table-headline-row">
- <th>
- <span id="pending-table-head">PENDING</span>
- </th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- <th></th>
- </tr>
- <tr ng-repeat="changeManagement in vm.pendingChangeManagements">
- <th scope="row">{{changeManagement.vnfName}}</th>
- <td>{{changeManagement.scheduleRequest.scheduleName}}</td>
- <td>{{changeManagement.workflow}}</td>
- <td>{{changeManagement.startTime}}</td>
- <td class="centered"><span class="icon-pending" ng-click="vm.openPendingModal({details: 'change management is pending in scheduler and waiting to be deployed'})"></span></td>
- <td class="centered"><span class="icon-view"></span></td>
+ </tbody>
+ </table>
+ </div>
+ <div class="table-wrapper">
+ <table class="table table-bordered" data-tests-id="pending-table-cm" id="pending-table">
+ <thead ng-click="collapsePending=!collapsePending">
+ <tr class="table-headline-row">
+ <th class="col-md-6">
+ <span ng-class="{'collapse-icon':!collapsePending,'expand-icon':collapsePending }"></span>
+ <span id="pending-table-head">PENDING</span>
+ </th>
+
+ <th></th>
+ <th></th>
+ <th></th>
+ <th></th>
+ <th></th>
+ <th></th>
+ <th></th>
+ </tr>
+ <tr class="thead-default" ng-show="!collapsePending">
+ <th class="col-md-2">Schedule ID</th>
+ <th class="col-md-2">CM ticket</th>
+ <th class="col-md-1">VNF name</th>
+ <th class="col-md-1">VNF status</th>
+ <th class="col-md-2">Workflow</th>
+ <th class="col-md-2">Start time</th>
+ <th class="col-md-2">Schedule status</th>
+ <th class="col-md-1">Status</th>
+ </tr>
+ </thead>
+ <tbody ng-show="!collapsePending">
+
+ <tr data-tests-id="pending-table-cm-row" ng-repeat="changeManagement in vm.pendingChangeManagements">
+ <th scope="row">{{changeManagement.scheduleRequest.scheduleId}}</th>
+ <td>{{changeManagement.aotsChangeId}}</td>
+ <td>{{changeManagement.vnfName}}</td>
+ <td>{{changeManagement.status}}</td>
+ <td>{{changeManagement.scheduleRequest.domainData[1].value}}</td>
+ <td>{{changeManagement.scheduleRequest.createDateTime }}</td><!--| date:"MM/dd/yyyy HH:mm:ss"-->
+ <td>{{changeManagement.scheduleRequest.status}}</td>
+ <td class="centered"><span class="cancel-action" ng-class="{'icon-pending':changeManagement.scheduleRequest.status!=='Deleted', 'icon-deleted': changeManagement.scheduleRequest.status=='Deleted'}"
+ ng-click="vm.openPendingModal($event, changeManagement)"></span></td>
</tr>
</tbody>
</table>
+ </div>
</uib-tab>
<uib-tab index="1" heading="Finished" id="finished-tab">
<table class="table table-bordered" id="finished-table">
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/createInstanceServiceModels.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/createInstanceServiceModels.htm
index 0f694612..da249c2c 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/createInstanceServiceModels.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/createInstanceServiceModels.htm
@@ -19,6 +19,8 @@
-->
<link rel="stylesheet" type="text/css" href="app/vid/styles/serviceModels.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/buttons.css" />
+
<div popup-window class="popupContents" ngx-show="{{popup.isTablePopUpVisible}}" ng-cloak>
<div ng-include="'app/vid/scripts/view-models/previousVersion.htm'"/>
</div>
@@ -36,7 +38,7 @@
<br><br>
- <table>
+ <table class="create-instance-service ">
<tr>
<td >
@@ -77,7 +79,7 @@
<!-- <h1 class="heading1" style="margin-top:20px;">Browse SDC Service Models</h1> -->
<div style="margin-top:30px" ng-init="getAaiServiceModelsList();">
- <table att-table table-data="services" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
+ <table data-tests-id="services-list" att-table table-data="services" view-per-page="viewPerPage" current-page="currentPage" search-category="searchCategory" search-string="searchString" total-page="totalPage">
<thead att-table-row type="header">
<tr>
<th att-table-header key="action">Action</th>
@@ -100,9 +102,10 @@
<td att-table-body ng-bind="service['extra-properties']['extra-property'][4]['property-value']"></td>
<td att-table-body ng-bind="service['extra-properties']['extra-property'][6]['property-value']"></td>
<td att-table-body ng-show="service['extra-properties']['extra-property'][6]['property-value'] > '1.0' ">
- <button type=button ng-click="loadPreviousVersionData(service['extra-properties']['extra-property'][6]['property-value'],service['extra-properties']['extra-property'][4]['property-value'])" att-button btn-type="primary" size="small">
+ <div class="clickable-text previous-versions-button"
+ ng-click="loadPreviousVersionData(service['extra-properties']['extra-property'][6]['property-value'],service['extra-properties']['extra-property'][4]['property-value'])">
Previous Versions
- </button>
+ </div>
</td>
<td att-table-body ng-show="service['extra-properties']['extra-property'][6]['property-value'] <= '1.0' ">&nbsp;</td>
</tr>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/creationDialog.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/creationDialog.htm
index 4449285d..ca13ca2b 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/creationDialog.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/creationDialog.htm
@@ -4,7 +4,7 @@
<div class="titleLine">
<img src="app/vid/images/spinner.gif"
ngx-visible="{{isSpinnerVisible}}"></img>
- <h3>Create {{componentName}} -- {{createType}}</h3>
+ <h3 data-tests-id="create-modal-title">Create {{componentName}} -- {{createType}}</h3>
</div>
<div class="error" ng-show="isErrorVisible">
@@ -33,7 +33,7 @@
<div class="buttonRow">
<button data-tests-id="confirmButton" ngx-enabled="{{isConfirmEnabled}}" att-button size="small"
ng-click="confirm();">Confirm</button>
- <button type="button" ng-click="cancel();" att-button
+ <button type="button" data-tests-id="cancelButton" ng-click="cancel();" att-button
btn-type="primary" size="small">Cancel</button>
</div>
</div>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/deletionDialog.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/deleteResumeDialog.htm
index b4b93166..ccd54a61 100755..100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/deletionDialog.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/deleteResumeDialog.htm
@@ -1,70 +1,70 @@
-<!--
- ============LICENSE_START=======================================================
- VID
- ================================================================================
- Copyright (C) 2017 AT&T Intellectual Property. 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.
- ============LICENSE_END=========================================================
- -->
-
-<div ng-controller="deletionDialogController">
-
- <div ng-show="isDialogVisible">
- <div class="titleLine">
- <img src="app/vid/images/spinner.gif"
- ngx-visible="{{isSpinnerVisible}}"></img>
- <h3>Delete {{componentName}}</h3>
- </div>
-
- <div class="error" ng-show="isErrorVisible">
- <img src="app/vid/images/error.png"></img>{{error}}
- </div>
-
- <parameter-block control="summaryControl"></parameter-block>
-
- <div ngx-visible="{{isDataVisible}}">
-
- <h4>
- User Provided Data (<img class="requiredIndicator"
- src="app/vid/images/asterisk.png" height='10' width='10'></img> indicates required field)
- </h4>
- <parameter-block control="userProvidedControl"
- callback="userParameterChanged(id);" editable></parameter-block>
-
- <div class="prompt">
- <p>
- Enter Data and <span>Confirm</span> to<br />Delete <span>{{componentName}}</span>
- </p>
- <p>
- <span>Cancel</span> to Return to Previous Page.<br />Data entered
- will be lost
- </p>
- </div>
- </div>
-
- <div class="buttonRow">
- <!-- <button type="button" ng-click="confirm();" att-button
- btn-type="primary" size="small" class="confirm">Confirm</button>
- <button type="button" ng-click="cancel();" att-button
- btn-type="primary" size="small">Cancel</button> --->
- <button ngx-enabled="{{isConfirmEnabled}}" att-button size="small"
- ng-click="confirm();">Confirm</button>
- <button type="button" ng-click="cancel();" att-button
- btn-type="primary" size="small">Cancel</button>
- </div>
- </div>
-
- <div ng-include="'app/vid/scripts/view-models/msoCommit.htm'"></div>
-
-</div>
+<!--
+ ============LICENSE_START=======================================================
+ VID
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. 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.
+ ============LICENSE_END=========================================================
+ -->
+
+<div ng-controller="deleteResumeDialogController">
+
+ <div ng-show="isDialogVisible">
+ <div class="titleLine">
+ <img src="app/vid/images/spinner.gif"
+ ngx-visible="{{isSpinnerVisible}}"></img>
+ <h3>{{dialogMethod}} {{componentName}}</h3>
+ </div>
+
+ <div class="error" ng-show="isErrorVisible">
+ <img src="app/vid/images/error.png"></img>{{error}}
+ </div>
+
+ <parameter-block control="summaryControl"></parameter-block>
+
+ <div ngx-visible="{{isDataVisible}}">
+
+ <h4>
+ User Provided Data (<img class="requiredIndicator"
+ src="app/vid/images/asterisk.png" height='10' width='10'></img> indicates required field)
+ </h4>
+ <parameter-block control="userProvidedControl"
+ callback="userParameterChanged(id);" editable></parameter-block>
+
+ <div class="prompt">
+ <p>
+ Enter Data and <span>Confirm</span> to<br />{{dialogMethod}} <span>{{componentName}}</span>
+ </p>
+ <p>
+ <span>Cancel</span> to Return to Previous Page.<br />Data entered
+ will be lost
+ </p>
+ </div>
+ </div>
+
+ <div class="buttonRow">
+ <!-- <button type="button" ng-click="confirm();" att-button
+ btn-type="primary" size="small" class="confirm">Confirm</button>
+ <button type="button" ng-click="cancel();" att-button
+ btn-type="primary" size="small">Cancel</button> --->
+ <button data-tests-id="confirmResumeDeleteButton" ngx-enabled="{{isConfirmEnabled}}" att-button size="small"
+ ng-click="confirm();">Confirm</button>
+ <button type="button" ng-click="cancel();" att-button
+ btn-type="primary" size="small">Cancel</button>
+ </div>
+ </div>
+
+ <div ng-include="'app/vid/scripts/view-models/msoCommit.htm'"></div>
+
+</div>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/instantiate.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/instantiate.htm
index 71efef1d..0740c07e 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/instantiate.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/instantiate.htm
@@ -23,7 +23,7 @@
<div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"
ng-cloak>
<div ng-include="'app/vid/scripts/view-models/creationDialog.htm'"></div>
- <div ng-include="'app/vid/scripts/view-models/deletionDialog.htm'"></div>
+ <div ng-include="'app/vid/scripts/view-models/deleteResumeDialog.htm'"></div>
<div ng-include="'app/vid/scripts/view-models/detailsDialog.htm'"></div>
<div ng-include="'app/vid/scripts/view-models/statusDialog.htm'"></div>
</div>
@@ -35,7 +35,7 @@
<div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>
- <h1 class="heading1" style="margin-top: 20px;">{{isPermitted == "true" ? "View/Edit" : "View"}} Service Instance</h1>
+ <h1 class="heading1" style="margin-top: 20px;">{{isPermitted ? "View/Edit" : "View"}} Service Instance</h1>
<a class="btn btn-primary btn-xs pull-right" ng-click="reloadRoute();" ><span class="glyphicon glyphicon-refresh"></span></a>
<br>
@@ -47,7 +47,7 @@
{{service.instance.subscriberName}}</th>
<th style="text-align: center" width="34%">SERVICE TYPE:
{{service.instance.serviceType}}</th>
- <th style="text-align: center" width="33%">SERVICE INSTANCE
+ <th data-tests-id="service-instanceId-th-id" style="text-align: center" width="33%">SERVICE INSTANCE
ID: {{service.instance.serviceInstanceId}}</th>
<tr>
<tr>
@@ -64,16 +64,16 @@
<ol ui-tree-nodes="" ng-model="service" >
<li ng-repeat="aService in [service]" ui-tree-node>
<div ui-tree-handle class="tree-node tree-node-content">
- <a class="btn btn-success btn-xs" ng-if="(aService.instance.vnfs && aService.instance.vnfs.length > 0) || (aService.instance.networks && aService.instance.networks.length > 0)" data-nodrag ng-click="this.toggle()">
+ <a class="btn btn-success btn-xs" ng-if="(aService.instance.vnfs && aService.instance.vnfs.length > 0) ||(aService.instance.pnfs && aService.instance.pnfs.length > 0) || (aService.instance.networks && aService.instance.networks.length > 0)" data-nodrag ng-click="this.toggle()">
<span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
</a>
- SERVICE INSTANCE: {{aService.instance.name}}
- <a ng-if="((isMacro()) || (isObjectEmpty(aService.instance.vnfs) && isObjectEmpty(aService.instance.networks))) && isPermitted" data-tests-id="deleteServiceButton" class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteService(aService.instance);">
+ SERVICE INSTANCE: {{aService.instance.name}} | ORCH STATUS: {{serviceOrchestrationStatus}}
+ <a ng-if="((isMacro()) || (isObjectEmpty(aService.instance.vnfs) && isObjectEmpty(aService.instance.networks) && isObjectEmpty(aService.instance.pnfs))) && isPermitted" data-tests-id="deleteServiceButton" class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteService(aService.instance);">
<span class="glyphicon glyphicon-remove"></span>
</a>
- <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs && !isObjectEmpty(aService.convertedModel.vnfs) && !aService.convertedModel.isNewFlow && isPermitted">
+ <div class="pull-right btn-group" ng-if="(aService.convertedModel.vnfs||aService.convertedModel.vnfs) &&(!isObjectEmpty(aService.convertedModel.pnfs)||!isObjectEmpty(aService.convertedModel.pnfs)) && !aService.convertedModel.isNewFlow && isPermitted">
<button type="button" data-tests-id="addVNFButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- Add VNF<span class="caret"></span>
+ Add node instance<span class="caret"></span>
</button>
<ul class="dropdown-menu" ng-model="aService.convertedModel.vnfs">
<a role="menuitem" ng-repeat="(vnfUuid, vnf) in aService.convertedModel.vnfs" data-tests-id="addVNFOption-{{vnf.modelCustomizationName}}" ng-click="addVnfInstance(vnf, aService.instance.vnfs)">{{vnf.modelCustomizationName}}</a>
@@ -82,7 +82,7 @@
</div>
<div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs && !isObjectEmpty(aService.convertedModel.vnfs) && aService.convertedModel.isNewFlow && isPermitted">
<button type="button" data-tests-id="addVNFButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- Add VNF<span class="caret"></span>
+ Add node instance<span class="caret"></span>
</button>
<ul class="dropdown-menu" ng-model="aService.convertedModel.vnfs" data-tests-id="addVnfsDropdown">
<li role="menuitem" ng-repeat="(vnfUuid, vnf) in aService.convertedModel.vnfs">
@@ -91,21 +91,24 @@
</ul>
</div>
<!-- <div class="pull-right btn-group" ng-if="aService.model.networks && !equals(aService.model.networks, {})">-->
- <div class="pull-right btn-group" ng-if="aService.convertedModel.networks && (!(isObjectEmpty(aService.convertedModel.networks)))">
+ <div class="pull-right btn-group" ng-if="aService.convertedModel.networks && (!(isObjectEmpty(aService.convertedModel.networks))) && isPermitted">
<!--<div class="pull-right btn-group" ng-if="aService.model.networks">-->
<button type="button" data-tests-id="addNetworkButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Add Network<span class="caret"></span>
</button>
<ul class="dropdown-menu" ng-model="aService.convertedModel.networks">
<li ng-repeat="(networkUuid, network) in aService.convertedModel.networks">
- <a ng-click="addNetworkInstance(network, aService.instance.vnfs)">{{network.modelCustomizationName}}</a>
+ <a data-tests-id="addNetworkOption-{{network.modelCustomizationName}}" ng-click="addNetworkInstance(network, aService.instance.vnfs)">{{network.modelCustomizationName}}</a>
</li>
</ul>
</div>
<a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeService(aService.instance)" style="margin-right: 8px;">
<span class="glyphicon glyphicon-info-sign"></span>
</a>
- <a data-tests-id="activateButton" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="activateMSOInstance()" style="margin-right: 8px;">
+ <a data-tests-id="deactivateButton" ng-disabled="!isActivateDeactivateEnabled('deactivate')" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="deactivateMSOInstance()" style="margin-right: 8px;">
+ Deactivate
+ </a>
+ <a data-tests-id="activateButton" ng-disabled="!isActivateDeactivateEnabled('activate')" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="activateMSOInstance()" style="margin-right: 8px;">
Activate
</a>
</div>
@@ -180,7 +183,7 @@
</a>
VFMODULE: {{vfModule.name}} | TYPE: {{vfModule.nodeType}} | ORCH STATUS: {{vfModule.nodeStatus}}
<!-- -->
- <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVFModuleButton" data-nodrag ng-click="deleteVfModule(aService.instance, vfModule, vnf)">
+ <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVFModuleButton-{{vfModule.name}}" data-nodrag ng-click="deleteVfModule(aService.instance, vfModule, vnf)">
<span class="glyphicon glyphicon-remove"></span>
</a>
<div class="pull-right btn-group">
@@ -196,6 +199,12 @@
<a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVfModule(aService.instance, vfModule, vnf)" style="margin-right: 8px;">
<span class="glyphicon glyphicon-info-sign"></span>
</a>
+ <div class="resume" ng-if="isPermitted&&(vfModule.nodeStatus==resumeStatus)">
+ <a data-tests-id="resumeVFModuleButton-{{vfModule.name}}" class="pull-right btn btn-success btn-xs button-margin" ng-click="resume(aService.instance, vfModule, vnf)" >
+ Resume
+ </a>
+ </div>
+
</div>
<ol ui-tree-nodes="" ng-model="vfModule.volumeGroups" ng-class="{hidden: collapsed}">
<li ng-repeat="volumeGroup in vfModule.volumeGroups" ui-tree-node>
@@ -227,6 +236,7 @@
</ol>
</li>
</ol>
+
<ol ui-tree-nodes="" ng-model="aService.instance.networks" ng-class="{hidden: collapsed}">
<li ng-repeat="network in aService.instance.networks" ui-tree-node>
<div ui-tree-handle class="tree-node tree-node-content">
@@ -244,6 +254,49 @@
</div>
</li>
</ol>
+
+
+ <ol ui-tree-nodes="" ng-model="aService.instance.configurations" ng-class="{hidden: collapsed}">
+ <li ng-repeat="configuration in aService.instance.configurations" ui-tree-node>
+ <div ui-tree-handle class="tree-node tree-node-content">
+ <a class="btn btn-success btn-xs" ng-if="(configuration.ports && configuration.ports.length > 0)" data-nodrag ng-click="this.toggle()">
+ <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
+ </a>
+ CONFIGURATION: {{configuration.name}} | TYPE: {{configuration.nodeType}} | ORCH STATUS: {{configuration.nodeStatus}}
+
+ <a class="pull-right btn btn-danger btn-xs" ng-if="!isMacro() && isPermitted && configuration.nodeStatus === STATUS_CONSTANTS.AAI_INACTIVE" data-tests-id="deleteConfigurationButton" data-nodrag ng-click="deleteConfiguration(aService.instance, configuration)">
+ <span class="glyphicon glyphicon-remove"></span>
+ </a>
+
+ <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="toggleConfigurationStatus(aService, configuration)" ng-if="isPermitted && allowConfigurationActions">
+ {{configuration.nodeStatus === STATUS_CONSTANTS.AAI_ACTIVE ? "Deactivate" : "Activate"}}
+ </a>
+ </div>
+ <ol ui-tree-nodes="" ng-model="configuration.ports" ng-class="{hidden: collapsed}">
+ <li ng-repeat="port in configuration.ports" ui-tree-node>
+ <div ui-tree-handle class="tree-node tree-node-content">
+ PORT: {{port.portName}} | ORCH STATUS: {{port.portStatus}}
+
+ <button type="button" class="pull-right btn btn-primary btn-xs" ng-if="configuration.nodeStatus == STATUS_CONSTANTS.AAI_ACTIVE" ng-click="togglePortStatus(aService, configuration, port)">
+ {{port.portStatus === STATUS_CONSTANTS.AAI_ENABLED ? "Disable" : "Enable"}}
+ </button>
+ </div>
+ </li>
+ </ol>
+ </li>
+ </ol>
+
+ <ol id="pnfs-tree" ui-tree-nodes="" ng-model="pnfs" ng-class="{hidden: collapsed || pnf.length === 0}">
+ <li ng-repeat="pnf in pnfs" ui-tree-node>
+ <div ui-tree-handle class="tree-node tree-node-content">
+ PNF: {{pnf}}
+
+ <a class="dissociate-pnf pull-right btn btn-primary btn-xs" data-nodrag ng-click="dissociatePnf(pnf)" style="margin-right: 8px;">
+ <span>Dissociate</span>
+ </a>
+ </div>
+ </li>
+ </ol>
</li>
</ol>
</div>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/messageViewer.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/messageViewer.htm
new file mode 100644
index 00000000..67e9248e
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/messageViewer.htm
@@ -0,0 +1,6 @@
+<div class="message-viewer">
+ <div ng-include src="icon"></div>
+ <div class="primaryMessage">{{ primaryMessage }}</div>
+ <div class="secondaryMessage">{{ secondaryMessage }}</div>
+ <button data-tests-id="try-again" class="btn btn-primary" ng-if="showTryAgain" ng-click="tryAgain()">TRY AGAIN</button>
+</div> \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/msoCommit.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/msoCommit.htm
index 48268248..25a6cf9e 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/msoCommit.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/msoCommit.htm
@@ -18,8 +18,8 @@
============LICENSE_END=========================================================
-->
-<div ng-controller="msoCommitController" ng-show="isViewVisible">
-
+<div ng-controller="msoCommitController" ng-show="isViewVisible" >
+<div ng-if="isViewVisible">
<div class="statusLine">
<img src="app/vid/images/spinner.gif"
ngx-visible="{{isSpinnerVisible}}"> </img> <label>Status:</label><span
@@ -45,3 +45,4 @@
ng-click="close();">Close</button>
</div>
</div>
+</div>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/pnfSearchAssociation.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/pnfSearchAssociation.htm
new file mode 100644
index 00000000..7c1095e6
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/pnfSearchAssociation.htm
@@ -0,0 +1,62 @@
+<!--
+============LICENSE_START=======================================================
+VID
+================================================================================
+Copyright (C) 2017 AT&T Intellectual Property. 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.
+============LICENSE_END=========================================================
+-->
+<link rel="stylesheet" type="text/css" href="app/vid/styles/networkNode.css"/>
+<link rel="stylesheet" type="text/css" href="app/vid/styles/pnfSearchAssociation.css"/>
+<div ng-controller="pnfSearchAssociationController" class="network-wrapper-config pnf-search-association">
+ <div class="head">
+ <div class="title">PNF Model: {{modelName}}</div>
+ <div class="btn-wrapper">
+ <button class="cancel-btn grey" data-tests-id="back" data-ng-click="back()">Back</button>
+ <button class="create-btn blue" data-tests-id="associatePnf" data-ng-disabled="!pnfInstance" data-ng-click="associate()">Associate</button>
+ </div>
+ </div>
+
+ <div class="content-wrapper">
+ <div class="content">
+ <div class="bold" >Unique name of physical network function:</div>
+ <div class="input-wrapper">
+ <input data-tests-id="pnfName" type="search" placeholder="Enter PNF name and click Search" data-ng-model="pnfName" ></input>
+ <div data-tests-id="searchPnf" class="search2-icon search-input" data-ng-click="searchPnf(pnfName)" data-ng-disabled="!pnfName"></div>
+ </div>
+ <div class="result-content margin-search" data-ng-show="pnfInstance">
+ <span ng-show="pnfInstance.pnfName">PNF unique name:</span>
+ <div data-tests-id="pnfInstancePnfName">{{pnfInstance.pnfName}}</div>
+ <span ng-show="pnfInstance.pnfName2" >PNF name:</span>
+ <div data-tests-id="pnfInstancePnfName2">{{pnfInstance.pnfName2}}</div>
+ <span ng-show="pnfInstance.pnfName2Source" >PNF name source:</span>
+ <div data-tests-id="pnfInstancePnfName2Source">{{pnfInstance.pnfName2Source}}</div>
+ <span ng-show="pnfInstance.pnfId">PNF ID:</span>
+ <div data-tests-id="pnfInstancePnfId">{{pnfInstance.pnfId}}</div>
+ <span ng-show="pnfInstance.equipType">Equipment type:</span>
+ <div data-tests-id="pnfInstanceEquipType">{{pnfInstance.equipType}}</div>
+ <span ng-show="pnfInstance.equipVendor">Equipment vendor:</span>
+ <div data-tests-id="pnfInstanceEquipVendor">{{pnfInstance.equipVendor}}</div>
+ <span ng-show="pnfInstance.equipModel">Equipment model:</span>
+ <div data-tests-id="pnfInstanceEquipModel">{{pnfInstance.equipModel}}</div>
+
+ </div>
+ <div class="error-msg margin-search" data-tests-id="pnfNotFoundErrorMessage" data-ng-show="notFound">The specified PNF instance {{pnfNameNotFound}} does not exist in A&AI. <br/>Please note: A&AI is case sensitive</div>
+
+ </div>
+
+ <div class="sidebar-right">
+ <service-metadata title-txt="SERVICE MODEL INFO" service-metadata-fields="serviceMetadataFields"></service-metadata>
+ </div>
+</div> \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/search.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/search.htm
new file mode 100644
index 00000000..a0b94fe4
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/search.htm
@@ -0,0 +1,5 @@
+<link rel="stylesheet" type="text/css" href="app/vid/styles/search.css"/>
+<div class="search-container">
+ <input type="search" data-tests-id="test-search-input" class="search-input" ng-model="searchString" ng-model-options="{debounce: 300}" placeholder="Type to search">
+ <div class="search-icon" ng-include src="'app/vid/images/search.svg'"></div>
+</div> \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceMetadata.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceMetadata.htm
new file mode 100644
index 00000000..27992d4a
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceMetadata.htm
@@ -0,0 +1,10 @@
+<link rel="stylesheet" type="text/css" href="app/vid/styles/serviceMetadata.css"/>
+<div class="header-title" ng-if="titleTxt">
+ {{titleTxt}}
+</div>
+<div class="metadata-content">
+ <div class="field" ng-repeat="field in serviceMetadataFields">
+ <label>{{field.name}}</label>
+ <div class="value" data-tests-id="{{'info-test-data-id-' + field.name.split(' ').join('')}}">{{field.value}}</div>
+ </div>
+</div> \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceModels.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceModels.htm
index 3cba8719..17b87bfd 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceModels.htm
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceModels.htm
@@ -69,8 +69,8 @@
<td att-table-body ng-bind="service['distributionStatus']"></td>
<td att-table-body ng-bind="service['lastUpdaterUserId']"></td>
<td att-table-body ng-bind="service['toscaModelUrl']"></td>
- <td att-table-body ng-show="service['version'] > '1.0' "><button type=button ng-click="loadPreviousVersionData(service['invariantUUID'],service['name'],service['version'])" att-button btn-type="primary" size="small">Previous Versions</button></td>
- <td att-table-body ng-show="service['version'] <= '1.0' ">&nbsp;</td>
+ <td att-table-body ng-show="service.hasPreviousVersion"><button type=button ng-click="loadPreviousVersionData(service['invariantUUID'],service['name'],service['version'])" att-button btn-type="primary" size="small">Previous Versions</button></td>
+ <td att-table-body ng-show="!service.hasPreviousVersion">&nbsp;</td>
</tr>
</tbody>
</table>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceProxyConfig.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceProxyConfig.htm
new file mode 100644
index 00000000..e2261dc1
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/serviceProxyConfig.htm
@@ -0,0 +1,108 @@
+<!--
+============LICENSE_START=======================================================
+VID
+================================================================================
+Copyright (C) 2017 AT&T Intellectual Property. 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.
+============LICENSE_END=========================================================
+-->
+<link rel="stylesheet" type="text/css" href="app/vid/styles/networkNode.css"/>
+<link rel="stylesheet" type="text/css" href="app/vid/styles/serviceProxyConfig.css"/>
+<div class="service-wrapper-config network-wrapper-config">
+ <div class="head">
+ <div class="title">Config {{modelName}}</div>
+ <div class="btn-wrapper">
+ <button class="cancel-btn grey" data-tests-id="backButton" data-ng-click="back()">Back</button>
+ <button class="create-btn blue" data-tests-id="createButton" data-ng-disabled="proxiesInstanceName.$invalid|| disableCreate" data-ng-click="create()">Create</button>
+ </div>
+ </div>
+
+ <div class="content-wrapper">
+ <div class="content">
+ <div class="diagram">
+ <div class="diagram-img">
+ <div class="circle service-circle">
+ <span class="text">Source<br>Service proxy</span>
+ </div>
+ <div class="dotted-line" data-ng-class="{'checked': sourceInstance, 'unchecked': !sourceInstance}">
+ <span class="conn-circle sprite" data-tests-id="sourceInstanceSelectedIcon" data-ng-class="{'valid-large': sourceInstance}"></span>
+ </div>
+ <div class="circle config-circle">
+ <span class="line"></span>
+ </div>
+ <div class="dotted-line" data-ng-class="{'checked': collectorInstance, 'unchecked': !collectorInstance}">
+ <span class="conn-circle sprite" data-tests-id="collectorInstanceSelectedIcon" data-ng-class="{'valid-large': collectorInstance}"></span>
+ </div>
+ <div class="circle service-circle">
+ <span class="text">Collector<br>Service proxy</span>
+ </div>
+ </div>
+ <div class="element-name-wrapper">
+ <div class="element-name service" data-ng-click="openMetadataModal('sourceMetadata')">
+ <span class="label-txt" data-tests-id="sourceInstanceName">{{sourceInstanceName}} <span class="info" data-tests-id="sourceInfoButton">i</span></span>
+
+ </div>
+ <div class="element-name config">
+ <span class="label-txt" data-tests-id="modelName">{{modelName}}</span>
+ </div>
+ <div class="element-name service" data-ng-click="openMetadataModal('collectorMetadata')">
+ <span class="label-txt" data-tests-id="collectorInstanceName">{{collectorInstanceName}}<span class="info" data-tests-id="collectorInfoButton">i</span></span>
+
+ </div>
+ </div>
+ </div>
+ <form name="proxiesInstanceName" class="bottom">
+ <div class="wrapper-list source-vnf">
+ <div class="title-txt"><b>Source</b> Service Type</div>
+ <select ng-model="sourceServiceType"
+ ng-change="onSourceServiceTypeSelected()" name="sourceServiceType" id="sourceServiceType"
+ ng-options="item['service-type'] disable when !(item['is-permitted']) for item in serviceTypes"
+ required data-tests-id="sourceServiceType">
+ <option value="" disabled>Select service type</option>
+ </select>
+
+ <div class="title-txt select-vnf-title">VNF providing <b>source</b> requirements</div>
+ <select ng-model="sourceInstance" name="source" ng-disabled="sourceInstanceList === null" required data-tests-id="sourceDropDown">
+ <option value="" selected>Type/Select VNF name</option>
+ <option ng-repeat="option in sourceInstanceList" data-tests-id="{{'source-' + option.id}}"
+ value="{{option.id}}">{{option['properties']['vnf-name']}}</option>
+ </select>
+ <span class="no-results" data-tests-id="sourceNoResults" ng-show="sourceNoResults">No vnf instances found.</span>
+ </div>
+
+ <div class="wrapper-list collector-{{collectorType}}">
+ <div class="title-txt ng-hide-keep-block" ng-hide="collectorType==='pnf'"><b>Collector</b> Service Type</div>
+ <select ng-model="collectorServiceType" ng-hide="collectorType==='pnf'" class="ng-hide-keep-block"
+ ng-change="onCollectorServiceTypeSelected()" name="collectorServiceType" id="collectorServiceType"
+ ng-options="item['service-type'] disable when !(item['is-permitted']) for item in serviceTypes"
+ required data-tests-id="collectorServiceType">
+ <option value="" disabled>Select service type</option>
+ </select>
+
+ <div class="title-txt select-vnf-title">{{collectorType.toUpperCase()}} providing <b>collector</b> requirements</div>
+ <select ng-model="collectorInstance" name="collector" ng-disabled="collectorInstanceList === null" required data-tests-id="collectorDropDown">
+ <option value="" selected>Type/Select {{collectorType.toUpperCase()}} name</option>
+ <option ng-repeat="option in collectorInstanceList" data-tests-id="{{'collector-' + option.id}}"
+ value="{{option.id}}">{{option['properties'][collectorType=='vnf' ? 'vnf-name' : 'pnfName']}}</option>
+ </select>
+ <span class="no-results" data-tests-id="collectorNoResults" ng-show="collectorNoResults">No {{collectorType}} instances found.</span>
+ </div>
+ </form>
+ </div>
+
+ <div class="sidebar-right">
+ <service-metadata title-txt="info" service-metadata-fields="serviceMetadataFields"></service-metadata>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/view-models/testEnvironments.htm b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/testEnvironments.htm
new file mode 100644
index 00000000..2c445f8b
--- /dev/null
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/view-models/testEnvironments.htm
@@ -0,0 +1,82 @@
+<link rel="stylesheet" type="text/css" href="app/vid/styles/testEnvironments.css" />
+<link rel="stylesheet" type="text/css" href="app/vid/styles/buttons.css" />
+<div class="test-environments">
+ <div class="header">
+ <div class="header-left">
+ <span data-tests-id="test-environments-headline" class="headline">Test Environments {{vm.total}}</span>
+ <span class="separator"></span>
+ <div class="button-container" ng-click="vm.createNewTestEnvironment()">
+ <div class="icon-svg" data-tests-id="test-environments-new-button">
+ <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 55.47337 55.63023"><path class="icon-filling" d="M27.7367.07843A27.73669,27.73669,0,1,0,55.4734,27.81512,27.73757,27.73757,0,0,0,27.7367.07843ZM40.18824,29.6178H29.53938V40.26666a1.80267,1.80267,0,0,1-3.60535,0V29.6178H15.28516a1.80267,1.80267,0,0,1,0-3.60535H25.934V15.36359a1.80267,1.80267,0,0,1,3.60535,0V26.01245H40.18824a1.80267,1.80267,0,1,1,0,3.60535Z"/></svg>
+ </div>
+ <span class="button-text">Create New</span>
+ </div>
+ <span class="separator"></span>
+ </div>
+ <search-text data-tests-id="test-environments-search" search-string="vm.searchString"></search-text>
+ </div>
+ <div class="error-messages" ng-if="vm.emptyData || vm.connectError">
+ <message-viewer data-tests-id="test-environments-no-data" primary-message="No test environment was created yet" secondary-message="create new to start testing" icon="app/vid/images/emptyData.svg" class="no-data" ng-if="vm.emptyData">
+ </message-viewer>
+ <message-viewer data-tests-id="test-environments-error" primary-message="Something went wrong" secondary-message="{{vm.connectError}}" icon="app/vid/images/icon_noconnection.svg" try-again="vm.loadAAIestEnvironments()" class="connect-error" ng-if="vm.connectError">
+ </message-viewer>
+ </div>
+ <div class="environments-table" ng-if="vm.environments.length">
+ <div class="row">
+ <div class="col-md-12">
+ <button data-tests-id="test-environments-refresh" class="refresh" type="button" ng-click="vm.loadAAIestEnvironments()">
+ <div ng-include src="'app/vid/images/refresh.svg'"></div>
+ </button>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col-md-12 test-environments-table-container">
+ <table data-tests-id="test-environments-table" att-table table-data="vm.environments" search-category="searchCategory" search-string="vm.searchString" class="table table-bordered" id="environments-table">
+ <thead att-table-row type="header" class="thead-default">
+ <tr>
+ <th att-table-header default-sort="A" key="operationalEnvironmentId">Environment ID</th>
+ <th att-table-header key="operationalEnvironmentName">Environment Name</th>
+ <th att-table-header key="relationshipList.relationship[0].relationshipData[0].relationshipValue">ECOMP Environment ID</th>
+ <th att-table-header key="relationshipList.relationship[0].relatedToProperty[0].propertyValue">ECOMP Environment Name</th>
+ <th att-table-header key="tenantContext">Tenant Context</th>
+ <th att-table-header key="operationalEnvironmentType">Environment Type</th>
+ <th att-table-header key="workloadContext">Workload Context</th>
+ <th att-table-header sortable="false">Status</th>
+ <th att-table-header sortable="false">Action</th>
+ <th att-table-header sortable="false">Attach Manifest</th>
+ </tr>
+ </thead>
+ <tbody att-table-row type="body" row-repeat="environment in vm.environments">
+ <tr>
+ <td att-table-body ng-bind="environment.operationalEnvironmentId"></td>
+ <td att-table-body ng-bind="environment.operationalEnvironmentName"></td>
+ <td att-table-body ng-bind="environment.relationshipList.relationship[0].relationshipData? environment.relationshipList.relationship[0].relationshipData[0].relationshipValue: ''"></td>
+ <td att-table-body ng-bind="environment.relationshipList.relationship[0].relatedToProperty? environment.relationshipList.relationship[0].relatedToProperty[0].propertyValue: ''"></td>
+ <td att-table-body ng-bind="environment.tenantContext"></td>
+ <td att-table-body ng-bind="environment.operationalEnvironmentType"></td>
+ <td att-table-body ng-bind="environment.workloadContext"></td>
+ <td att-table-body ng-bind="vm.getEnvStatus(environment)" id="testEnvStatus-{{environment.operationalEnvironmentId}}"></td>
+ <td att-table-body>
+ <button id="testEnvActivate-{{environment.operationalEnvironmentId}}" type="button" class="blue envActionBtn"
+ ng-click="vm.onTestEnvActivateClick(environment)" ng-show="!vm.isEnvActive(environment)">Activate</button>
+ <button id="testEnvDeactivate-{{environment.operationalEnvironmentId}}" type="button" class="blue envActionBtn"
+ ng-click="vm.onTestEnvDeactivateClick(environment)" ng-show="vm.isEnvActive(environment)">Deactivate</button>
+ </td>
+ <td att-table-body>
+ <button id="testEnvAttach-{{environment.operationalEnvironmentId}}" class="transparent attach-button"
+ ng-click="vm.onTestEnvActivateClick(environment)" ng-show="vm.isEnvActive(environment)">
+ <img src="app/vid/images/attach.svg">
+ </button>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+</div>
+<div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"
+ ng-cloak>
+ <div ng-include="'app/vid/scripts/view-models/msoCommit.htm'"></div>
+</div> \ No newline at end of file