summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/drawingBoard/available-models-tree
diff options
context:
space:
mode:
authorIttay Stern <ittay.stern@att.com>2018-08-29 17:01:32 +0300
committerIttay Stern <ittay.stern@att.com>2019-02-18 18:35:30 +0200
commit6f900cc45d7dd7f97430812b86b5c1d1693c8ae3 (patch)
tree936005c364dc5a7264d6304d4777c3d83494db22 /vid-webpack-master/src/app/drawingBoard/available-models-tree
parent67d99f816cc583643c35193197594cf78d8ce60a (diff)
merge from ecomp a88f0072 - Modern UI
Issue-ID: VID-378 Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6 Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-webpack-master/src/app/drawingBoard/available-models-tree')
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html35
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss398
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts166
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts450
-rw-r--r--vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts36
5 files changed, 0 insertions, 1085 deletions
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html
deleted file mode 100644
index 5eb977325..000000000
--- a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<div class="available-models-tree">
- <h5>
- <span>SERVICE MODEL:</span>
- <span id="service-model-name">{{service | serviceInfo: _store: serviceModelId : 'name'}}</span>
- </h5>
- <div class="available-models-content-wrapper">
- <div class="search-container">
- <input [attr.data-tests-id]="'search-left-tree'" #filter (keyup)="searchTree(filter.value, $event)" placeholder="Filter..."/>
- <span class="icon-search"></span>
- </div>
-
- <tree-root #tree [attr.data-tests-id]="'available-models-tree'" [nodes]="nodes" [options]="options">
- <ng-template #treeNodeTemplate let-node let-index="index">
- <div [attr.data-tests-id]="'node-'+node.data.name" (click)="selectNode(node)" [ngClass]="{'selected': index , 'isParent': node.data.type !== 'VFmodule' , 'isChild': node.data.type === 'VFmodule' }">
- <span class="vf-type">{{node.data.type.substring(0,1)}}</span>
- <span class="span-name" [innerHTML]=" isFilterEnabled ? (node.data.name | highlight : filter.value) : (node.data.name)"></span>
- <span class="actions">
- <span class="number-button" *ngIf="isShowNodeCount(node)">
- <span>{{getNodeCount(node)}}</span>
- </span>
- <span class="icon-v" *ngIf="isShowIconV(node)">
- <span ></span>
- </span>
- <span class="icon-plus" *ngIf="isShowIconAdd(node)">
- <span tooltip="Add" [attr.data-tests-id]="'node-'+node.data.name+'-add-btn'" (click)="onClickAdd($event,node)">
- <i class="fa fa-plus-circle" aria-hidden="true"></i>
- </span>
- </span>
- </span>
- </div>
- </ng-template>
- </tree-root>
-
- </div>
-</div>
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss
deleted file mode 100644
index 44f94109a..000000000
--- a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.scss
+++ /dev/null
@@ -1,398 +0,0 @@
-available-models-tree {
- .available-models-tree {
- height: 100%;
- display: flex;
- flex-direction: column;
- line-height: 14px;
- border-right: #D2D2D2 1.5px solid;
- min-width: 340px;
- h5 {
- font-family: OpenSans-Semibold;
- color: #5A5A5A;
- background-color: #F2F2F2;
- margin: 0;
- padding: 15px;
- padding-left: 20px;
- span {
- vertical-align: middle;
- &:first-child {
- font-size: 12px;
- color: #191919;
- }
- }
- }
- .available-models-content-wrapper {
- flex: 1;
- display: flex;
- flex-direction: column;
- padding: 20px;
- background-color: #F2F2F2;
- .search-container {
- margin-bottom: 30px;
- width: 100%;
- display: flex;
- background: #FFFFFF;
- border: 1px solid #D2D2D2;
- border-radius: 2px;
- height: 40px;
- min-width: 40px;
- font-family: OpenSans-Italic;
- color: #959595;
- input {
- flex: 1;
- border: 0;
- padding-left: 10px;
- outline: 0;
- }
- .icon-search {
- display: flex;
- width: 40px;
- &:after {
- content: "\e92e";
- cursor: pointer;
- font-size: 20px;
- font-weight: 600;
- text-align: center;
- display: inline-block;
- flex: auto;
- align-self: center;
- }
- }
- }
- tree-root {
- flex: 1;
- display: flex;
- }
- tree-viewport {
- flex: 1;
- height: auto;
- overflow: auto;
- padding-top: 5px;
- .tree-node {
- color: #5A5A5A;
- font-size: 13px;
- white-space: normal;
- word-break: break-all;
- tree-node-drop-slot {
- .node-drop-slot {
- display: none;
- }
- }
- &.tree-node-disabled {
- color: #D2D2D2;
- cursor: default;
- pointer-events: none;
- }
- &:not(.tree-node-disabled) {
- >tree-node-wrapper {
- .node-wrapper:hover {
- color: #009FDB;
- .node-content-wrapper {
- tree-node-content {
- > div {
- span.actions {
- .number-button {
- span {
- //background-color: #009FDB;
- }
- }
- .icon-plus span:before {
- display: inline-block;
- color: #5A5A5A;
- }
- }
- }
- }
- }
- }
- }
- }
- &.tree-node-focused:not(.tree-node-disabled) {
- & > tree-node-wrapper {
- .node-wrapper {
- color: #009FDB;
- .node-content-wrapper-focused,
- .node-content-wrapper:hover {
- background: none;
- box-shadow: none;
- tree-node-content {
- > div {
- span.actions {
- .number-button {
- span {
- //background-color: #009FDB;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- tree-node-wrapper {
- .node-wrapper {
- height: 36px;
- tree-node-expander {
- font-family: 'icomoon' !important;
- height: 100%;
- .toggle-children-wrapper {
- padding: 0;
- display: block;
- height: 100%;
- span.toggle-children {
- display: flex;
- width: 20px;
- top: 0;
- height: inherit;
- background-image: none;
- &:before {
- content: "\e900";
- font-weight: 600;
- text-align: center;
- display: inline-block;
- flex: auto;
- align-self: center;
- font-size: 20px;
- }
- }
- }
- .toggle-children-wrapper-expanded {
- span.toggle-children {
- transform: none;
- &:before {
- content: "\e930";
- }
- }
- }
- .toggle-children-placeholder {
- width: 20px;
- }
- }
- .node-content-wrapper {
- padding: 0;
- background: none;
- box-shadow: none;
- height: 100%;
- flex: 1;
- min-width: 0;
- border-left: 1px solid #D2D2D2;
- tree-node-content {
- > div {
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding-left: 10px;
- span {
- &.actions {
- height: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- >span {
- width: 45px;
- max-width: 45px;
- text-align: center;
- }
- .number-button {
- width: 30px;
- padding-left: 0;
- text-align: center;
- span {
- display: block;
- font-size: 11px;
- }
- }
- .icon-v {
- width: 45px;
- span:before {
- content: "\e932";
- color: #5A5A5A;
- font-size: 16px;
- text-align: center;
- display: inline-block;
- vertical-align: baseline;
- }
- }
- .icon-plus {
- width: 45px;
- span {
- &:before {
- //content: "\e901";
- //fill:#009FDB;
- //color: #009FDB;
- //font-size: 16px;
- //text-align: center;
- //display: none;
- //vertical-align: baseline;
- }
- &:hover:before {
- //color: #009FDB !important;
-
- }
- }
- }
- }
- }
- }
- }
- }
-
- }
- }
- tree-node-children {
- .tree-children {
- padding-left: 20px;
- }
- }
- }
- }
-
- }
- }
-}
-.highlight {
- background-color: #9DD9EF;
-}
-
-#drawing-board-tree{
- .tree-node.tree-node-expanded.tree-node-focused {
- border: 1px solid #009FDB;
- }
-
-}
-
-available-models-tree {
-
- .tree-root {
- margin-top: 35px;
- }
-
- tree-node-expander {
- background: #FFFFFF;
- border: 1px solid #D2D2D2;
- border-right: none;
- width: 45px;
- padding-left: 12px;
- }
-
- .node-content-wrapper {
- border: none;
- }
-
- tree-node-wrapper tree-node-expander{
- background: none !important;
- border: none !important;
- }
-
- tree-node-content div {
- background: white;
- }
-
- .node-wrapper {
- height: 45px !important;
- background: #FFFFFF;
- border: 1px solid #D2D2D2;
- }
-
- tree-node-collection div {
- margin-top: 0px;
- }
-
- .tree-node-leaf .node-wrapper tree-node-expander {
- display: none;
- }
-
- .tree-children {
- padding: 20px;
- }
-
- .tree-node.tree-node-expanded.tree-node-focused {
- border: 1px solid #009FDB;
- }
-
- .tree-node.tree-node-expanded {
- border: 1px solid rgba(128, 128, 128, 0.72);
- margin-bottom: 10px;
- }
-
- .tree-children {
- padding-left: 0;
- }
-
- tree-node-content .actions .number-button {
- height: 45px;
- padding-top: 14px;
- border: 1px solid #D2D2D2;
- padding-left: 0;
- span {
- background: none;
- font-size: 11px;
- color: #5A5A5A;
- }
- }
-
-
-
- .node-content-wrapper.node-content-wrapper-focused tree-node-content div{
- background: #009FDB !important;
- color: white;
-
- .isParent {
- border-left: 1px solid #009FDB;
- }
-
- .number-button span{
- color: white !important;
- }
-
- .icon-v span:before{
- color: white !important;
- }
- }
-
- .vf-type {
- width: 20px;
- height: 45px;
- padding-top: 16px;
- border-right: 1px solid #D2D2D2;
-
- }
-
- .isParent {
- width: 100%;
- padding-left: 5px;
- }
-
- .tree-node-expanded .isChild .vf-type {
- display: none;
- }
-
- .isParent .span-name {
- width: 100%;
- padding-left: 10px;
- }
-
- .toggle-children-wrapper.toggle-children-wrapper-expanded {
- .toggle-children:before {
- color: #009FDB;
- }
- }
-
- .tree-node.tree-node-expanded .tree-children {
- border: 1px solid rgba(128, 128, 128, 0.72);
- }
-
- .tree-node.tree-node-expanded.tree-node-focused .tree-children {
- border: 1px solid #009fdb;
- }
-
- .tree-node-leaf .node-wrapper{
- margin-left: 45px;
- border-left: none;
- }
-}
-
-
-
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts
deleted file mode 100644
index 4e5819e4c..000000000
--- a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.component.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import {Component, EventEmitter, Output, ViewChild} from '@angular/core';
-import {ITreeOptions, TreeComponent} from 'angular-tree-component';
-import '../../../../node_modules/angular-tree-component/dist/angular-tree-component.css';
-import {IDType, ITreeNode} from 'angular-tree-component/dist/defs/api';
-import {DialogService} from 'ng2-bootstrap-modal';
-import {AvailableModelsTreeService} from './available-models-tree.service';
-import {NgRedux} from "@angular-redux/store";
-import {ActivatedRoute} from '@angular/router';
-import {AppState} from '../../store/reducers';
-import {AaiService} from '../../services/aaiService/aai.service';
-import {ServicePlanningService} from '../../services/service-planning.service';
-import {VnfPopupComponent} from '../../components/vnf-popup/vnf-popup.components';
-import {ServiceNodeTypes} from '../../shared/models/ServiceNodeTypes';
-import {VfModuleMap} from '../../shared/models/vfModulesMap';
-import {IframeService} from "../../shared/utils/iframe.service";
-import {createVFModuleInstance} from "../../service.actions";
-import {DefaultDataGeneratorService} from "../../shared/services/defaultDataServiceGenerator/default.data.generator.service";
-
-
-@Component({
- selector: 'available-models-tree',
- templateUrl: './available-models-tree.component.html',
- styleUrls: ['./available-models-tree.component.scss']
-})
-
-
-export class AvailableModelsTreeComponent{
-
- serviceModelId: string;
- serviceHierarchy;
- parentElementClassName = 'content';
- _store : NgRedux<AppState>;
- constructor(private _servicePlanningService: ServicePlanningService,
- private _iframeService: IframeService,
- private _aaiService: AaiService,
- private route: ActivatedRoute,
- private dialogService: DialogService,
- private _availableModelsTreeService: AvailableModelsTreeService,
- private _defaultDataGeneratorService: DefaultDataGeneratorService,
- private store: NgRedux<AppState>) {
- this._store = store;
- this.route
- .queryParams
- .subscribe(params => {
- this.serviceModelId = params['serviceModelId'];
- this._aaiService.getServiceModelById(this.serviceModelId).subscribe(
- value => {
- this.serviceHierarchy = value;
- this.nodes = this._servicePlanningService.convertServiceModelToTreeNodes(this.serviceHierarchy);
- },
- error => {
- console.log('error is ', error)
- }
- );
- });
-
- }
-
- @Output()
- highlightInstances: EventEmitter<number> = new EventEmitter<number>();
- @ViewChild('tree') tree: TreeComponent;
-
- nodes = [];
- service = {name: ''};
- isFilterEnabled: boolean = false;
-
- options: ITreeOptions = {
- nodeHeight: 36,
- dropSlotHeight: 0,
- nodeClass: (node: ITreeNode) => {
- if(node.data.type === ServiceNodeTypes.VFmodule && !this.getNodeCount(node.parent))
- {
- node.data.disabled = true;
- return 'tree-node tree-node-disabled';
- }
- node.data.disabled = false;
- return 'tree-node';
- }
- };
-
- expandParentByNodeId(id: IDType): void {
- this.tree.treeModel.getNodeById(id).parent.expand();
- }
-
- searchTree(searchText: string, event: KeyboardEvent): void {
- if (searchText === '') {
- return;
- }
- this.isFilterEnabled = event.key === 'Delete' || event.key === 'Backspace' || searchText.length > 1;
- if (this.isFilterEnabled) {
- let __this = this;
- let results: ITreeNode[] = [];
- this.nodes.forEach(function (node) {
- __this.searchTreeNode(node, searchText, results);
- });
- results.forEach(function (result) {
- __this.expandParentByNodeId(result.id)
- });
- }
- }
-
- searchTreeNode(node, searchText: string, results): void {
- if (node.name.toLowerCase().indexOf(searchText.toLowerCase()) != -1) {
- results.push(node);
- }
- if (node.children != null) {
- for (let i = 0; i < node.children.length; i++) {
- this.searchTreeNode(node.children[i], searchText, results);
- }
- }
- }
-
- selectNode(node: ITreeNode): void {
- node.expand();
- this.highlightInstances.emit(node.data.id);
- }
-
- onClickAdd(e: MouseEvent, node: ITreeNode): void {
- let data = node.data;
- let dynamicInputs = data.dynamicInputs;
- let userProvidedNaming:boolean = data.userProvidedNaming;
- let type:string = data.type;
- if(!this.store.getState().global.flags['FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD']|| node.data.type === ServiceNodeTypes.VF || this._availableModelsTreeService.shouldOpenDialog(type, dynamicInputs, userProvidedNaming)) {
- this._iframeService.addClassOpenModal(this.parentElementClassName);
- this.dialogService.addDialog(VnfPopupComponent, {
- serviceModelId: this.serviceModelId,
- parentModelName: node.parent && node.parent.data.name,
- modelName: data.name,
- modelType: type,
- dynamicInputs: dynamicInputs,
- userProvidedNaming: userProvidedNaming,
- isNewVfModule : true
- });
- }
- else {
- let vfModule = this._defaultDataGeneratorService.generateVFModule(this.serviceHierarchy, node.parent.data.name, node.data.name);
- this.store.dispatch(createVFModuleInstance(vfModule, node.data.name, this.serviceModelId));
- }
- e.preventDefault();
- e.stopPropagation();
- }
-
- getNodeCount(node: ITreeNode): number {
- let modelName: string = node.data.name;
- if (ServicePlanningService.isVfModule(node)) {
- let parentVnfModelName = node.parent.data.name;
- let vfModuleMap: VfModuleMap = this._servicePlanningService.getVfModuleMap(this.serviceModelId, parentVnfModelName, modelName);
- return vfModuleMap ? Object.keys(vfModuleMap).length : 0;
- } else if (ServicePlanningService.isVnf(node)) {
- let vnfInstance = this._servicePlanningService.getVnfInstance(this.serviceModelId, modelName);
- return vnfInstance ? 1 : 0;
- }
- }
-
- isShowIconV(node: ITreeNode): boolean {
- return this.getNodeCount(node) > 0;
- }
-
- isShowNodeCount(node: ITreeNode): boolean {
- return this.getNodeCount(node) > 0;
- }
-
- isShowIconAdd(node: ITreeNode): boolean {
- return this._availableModelsTreeService.shouldShowAddIcon(node, this.store.getState().service.serviceHierarchy, this.serviceModelId, this.getNodeCount(node));
- }
-}
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts
deleted file mode 100644
index 10cbb0d8f..000000000
--- a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.spec.ts
+++ /dev/null
@@ -1,450 +0,0 @@
-import {TestBed, getTestBed} from '@angular/core/testing';
-import {
- HttpClientTestingModule,
- HttpTestingController
-} from '@angular/common/http/testing';
-import {AvailableModelsTreeService} from './available-models-tree.service';
-import {ServicePlanningService} from "../../services/service-planning.service";
-import {ServiceNodeTypes} from "../../shared/models/ServiceNodeTypes";
-import {NgRedux} from "@angular-redux/store";
-import {MockAppStore} from "../../services/service-planning.service.spec";
-
-describe('Available Models Tree Service', () => {
- let injector;
- let service: AvailableModelsTreeService;
- let httpMock: HttpTestingController;
-
- beforeEach(() => {
-
- TestBed.configureTestingModule({
- imports: [HttpClientTestingModule],
- providers: [AvailableModelsTreeService,
- ServicePlanningService,
- {provide: NgRedux, useClass: MockAppStore}]
- });
-
- injector = getTestBed();
- service = injector.get(AvailableModelsTreeService);
- httpMock = injector.get(HttpTestingController);
- });
-
- describe('#shouldShowAddIcon', () => {
- it('should return true if number of current vnf modules is under the max', (done: DoneFn) => {
- let treeNode = {
- data: {
- children: [],
- name: 'vf_vmee0..VfVmee..base_vmme..module-0'
- }
- };
-
- let serviceHierarchy = getSericeServiceHierarchy();
- let result = service.shouldShowAddIcon(treeNode, serviceHierarchy, '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 0);
- expect(result).toBeTruthy();
- done();
- });
-
- it('should return false if number of current vnf modules are more than max', (done: DoneFn) => {
- let treeNode = {
- data: {
- children: [],
- name: 'vf_vmee0..VfVmee..base_vmme..module-0'
- }
- };
-
- let serviceHierarchy = getSericeServiceHierarchy();
- let result = service.shouldShowAddIcon(treeNode, serviceHierarchy, '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 2);
- expect(result).toBeFalsy();
- done();
- });
-
- it('should return true if number of current vnf modules are more than max and max is null', (done: DoneFn) => {
- let treeNode = {
- data: {
- children: [],
- name: 'vf_vmee0..VfVmee..base_vmme..module-0'
- }
- };
-
- let serviceHierarchy = getSericeServiceHierarchy();
- let result = service.shouldShowAddIcon(treeNode, serviceHierarchy, '6e59c5de-f052-46fa-aa7e-2fca9d674c44', 0);
- expect(result).toBeTruthy();
- done();
- });
- });
-
- describe('#shouldOpenModalDialogOnAddInstance', () => {
- let serviceHierarchy = getSericeServiceHierarchy();
-
- it('should open popup on add instance', (done: DoneFn) => {
- // add vnf should return true
- let result = service.shouldOpenDialog(ServiceNodeTypes.VF, [], false);
- expect(result).toBeTruthy();
-
- // add vfModule with user provided naming should return true
- result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [], true);
- expect(result).toBeTruthy();
-
- // add vfModule with dynamicInputs without defaultValues should return true
- result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [{
- id: '2017488_adiodvpe0_vnf_config_template_version',
- type: 'string',
- name: '2017488_adiodvpe0_vnf_config_template_version',
- isRequired: true,
- description: 'VPE Software Version'
- }], false);
- expect(result).toBeTruthy();
-
- // add vfModule with dynamicInputs with defaultValues should return false
- result = service.shouldOpenDialog(ServiceNodeTypes.VFmodule, [{
- id: '2017488_adiodvpe0_vnf_config_template_version',
- type: 'string',
- name: '2017488_adiodvpe0_vnf_config_template_version',
- value: '17.2',
- isRequired: true,
- description: 'VPE Software Version'
- }], false);
- expect(result).toBeFalsy();
- done();
- });
- });
-
- function getSericeServiceHierarchy() {
- return JSON.parse(JSON.stringify(
- {
- '6e59c5de-f052-46fa-aa7e-2fca9d674c44': {
- 'service': {
- 'uuid': '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
- 'invariantUuid': 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0',
- 'name': 'ComplexService',
- 'version': '1.0',
- 'toscaModelURL': null,
- 'category': 'Mobility',
- 'serviceType': '',
- 'serviceRole': '',
- 'description': 'ComplexService',
- 'serviceEcompNaming': 'true',
- 'instantiationType': 'Macro',
- 'inputs': {}
- },
- 'vnfs': {
- 'VF_vMee 0': {
- 'uuid': 'd6557200-ecf2-4641-8094-5393ae3aae60',
- 'invariantUuid': '4160458e-f648-4b30-a176-43881ffffe9e',
- 'description': 'VSP_vMee',
- 'name': 'VF_vMee',
- 'version': '2.0',
- 'customizationUuid': '91415b44-753d-494c-926a-456a9172bbb9',
- 'inputs': {},
- 'commands': {},
- 'properties': {
- 'gpb2_Internal2_mac': '00:80:37:0E:02:22',
- 'sctp-b-ipv6-egress_src_start_port': '0',
- 'sctp-a-ipv6-egress_rule_application': 'any',
- 'Internal2_allow_transit': 'true',
- 'sctp-b-IPv6_ethertype': 'IPv6',
- 'sctp-a-egress_rule_application': 'any',
- 'sctp-b-ingress_action': 'pass',
- 'sctp-b-ingress_rule_protocol': 'icmp',
- 'ncb2_Internal1_mac': '00:80:37:0E:0F:12',
- 'sctp-b-ipv6-ingress-src_start_port': '0.0',
- 'ncb1_Internal2_mac': '00:80:37:0E:09:12',
- 'fsb_volume_size_0': '320.0',
- 'sctp-b-egress_src_addresses': 'local',
- 'sctp-a-ipv6-ingress_ethertype': 'IPv4',
- 'sctp-a-ipv6-ingress-dst_start_port': '0',
- 'sctp-b-ipv6-ingress_rule_application': 'any',
- 'domain_name': 'default-domain',
- 'sctp-a-ingress_rule_protocol': 'icmp',
- 'sctp-b-egress-src_start_port': '0.0',
- 'sctp-a-egress_src_addresses': 'local',
- 'sctp-b-display_name': 'epc-sctp-b-ipv4v6-sec-group',
- 'sctp-a-egress-src_start_port': '0.0',
- 'sctp-a-ingress_ethertype': 'IPv4',
- 'sctp-b-ipv6-ingress-dst_end_port': '65535',
- 'sctp-b-dst_subnet_prefix_v6': '::',
- 'nf_naming': '{ecomp_generated_naming=true}',
- 'sctp-a-ipv6-ingress_src_subnet_prefix': '0.0.0.0',
- 'sctp-b-egress-dst_start_port': '0.0',
- 'ncb_flavor_name': 'nv.c20r64d1',
- 'gpb1_Internal1_mac': '00:80:37:0E:01:22',
- 'sctp-b-egress_dst_subnet_prefix_len': '0.0',
- 'Internal2_net_cidr': '169.255.0.0',
- 'sctp-a-ingress-dst_start_port': '0.0',
- 'sctp-a-egress-dst_start_port': '0.0',
- 'fsb1_Internal2_mac': '00:80:37:0E:0B:12',
- 'sctp-a-egress_ethertype': 'IPv4',
- 'vlc_st_service_mode': 'in-network-nat',
- 'sctp-a-ipv6-egress_ethertype': 'IPv4',
- 'sctp-a-egress-src_end_port': '65535.0',
- 'sctp-b-ipv6-egress_rule_application': 'any',
- 'sctp-b-egress_action': 'pass',
- 'sctp-a-ingress-src_subnet_prefix_len': '0.0',
- 'sctp-b-ipv6-ingress-src_end_port': '65535.0',
- 'sctp-b-name': 'epc-sctp-b-ipv4v6-sec-group',
- 'fsb2_Internal1_mac': '00:80:37:0E:0D:12',
- 'sctp-a-ipv6-ingress-src_start_port': '0.0',
- 'sctp-b-ipv6-egress_ethertype': 'IPv4',
- 'Internal1_net_cidr': '169.253.0.0',
- 'sctp-a-egress_dst_subnet_prefix': '0.0.0.0',
- 'fsb_flavor_name': 'nv.c20r64d1',
- 'sctp_rule_protocol': '132',
- 'sctp-b-ipv6-ingress_src_subnet_prefix_len': '0',
- 'sctp-a-ipv6-ingress_rule_application': 'any',
- 'sctp-a-IPv6_ethertype': 'IPv6',
- 'vlc2_Internal1_mac': '00:80:37:0E:02:12',
- 'vlc_st_virtualization_type': 'virtual-machine',
- 'sctp-b-ingress-dst_start_port': '0.0',
- 'sctp-b-ingress-dst_end_port': '65535.0',
- 'sctp-a-ipv6-ingress-src_end_port': '65535.0',
- 'sctp-a-display_name': 'epc-sctp-a-ipv4v6-sec-group',
- 'sctp-b-ingress_rule_application': 'any',
- 'int2_sec_group_name': 'int2-sec-group',
- 'vlc_flavor_name': 'nd.c16r64d1',
- 'sctp-b-ipv6-egress_src_addresses': 'local',
- 'vlc_st_interface_type_int1': 'other1',
- 'sctp-b-egress-src_end_port': '65535.0',
- 'sctp-a-ipv6-egress-dst_start_port': '0',
- 'vlc_st_interface_type_int2': 'other2',
- 'sctp-a-ipv6-egress_rule_protocol': 'any',
- 'Internal2_shared': 'false',
- 'sctp-a-ipv6-egress_dst_subnet_prefix_len': '0',
- 'Internal2_rpf': 'disable',
- 'vlc1_Internal1_mac': '00:80:37:0E:01:12',
- 'sctp-b-ipv6-egress_src_end_port': '65535',
- 'sctp-a-ipv6-egress_src_addresses': 'local',
- 'sctp-a-ingress-dst_end_port': '65535.0',
- 'sctp-a-ipv6-egress_src_end_port': '65535',
- 'Internal1_forwarding_mode': 'l2',
- 'Internal2_dhcp': 'false',
- 'sctp-a-dst_subnet_prefix_v6': '::',
- 'pxe_image_name': 'MME_PXE-Boot_16ACP04_GA.qcow2',
- 'vlc_st_interface_type_gtp': 'other0',
- 'ncb1_Internal1_mac': '00:80:37:0E:09:12',
- 'sctp-b-src_subnet_prefix_v6': '::',
- 'sctp-a-egress_dst_subnet_prefix_len': '0.0',
- 'int1_sec_group_name': 'int1-sec-group',
- 'Internal1_dhcp': 'false',
- 'sctp-a-ipv6-egress_dst_end_port': '65535',
- 'Internal2_forwarding_mode': 'l2',
- 'fsb2_Internal2_mac': '00:80:37:0E:0D:12',
- 'sctp-b-egress_dst_subnet_prefix': '0.0.0.0',
- 'Internal1_net_cidr_len': '17',
- 'gpb2_Internal1_mac': '00:80:37:0E:02:22',
- 'sctp-b-ingress-src_subnet_prefix_len': '0.0',
- 'sctp-a-ingress_dst_addresses': 'local',
- 'sctp-a-egress_action': 'pass',
- 'fsb_volume_type_0': 'SF-Default-SSD',
- 'ncb2_Internal2_mac': '00:80:37:0E:0F:12',
- 'vlc_st_interface_type_sctp_a': 'left',
- 'vlc_st_interface_type_sctp_b': 'right',
- 'sctp-a-src_subnet_prefix_v6': '::',
- 'vlc_st_version': '2',
- 'sctp-b-egress_ethertype': 'IPv4',
- 'sctp-a-ingress_rule_application': 'any',
- 'gpb1_Internal2_mac': '00:80:37:0E:01:22',
- 'instance_ip_family_v6': 'v6',
- 'sctp-a-ipv6-egress_src_start_port': '0',
- 'sctp-b-ingress-src_start_port': '0.0',
- 'sctp-b-ingress_dst_addresses': 'local',
- 'fsb1_Internal1_mac': '00:80:37:0E:0B:12',
- 'vlc_st_interface_type_oam': 'management',
- 'multi_stage_design': 'false',
- 'oam_sec_group_name': 'oam-sec-group',
- 'Internal2_net_gateway': '169.255.0.3',
- 'sctp-a-ipv6-ingress-dst_end_port': '65535',
- 'sctp-b-ipv6-egress-dst_start_port': '0',
- 'Internal1_net_gateway': '169.253.0.3',
- 'sctp-b-ipv6-egress_rule_protocol': 'any',
- 'gtp_sec_group_name': 'gtp-sec-group',
- 'sctp-a-ipv6-egress_dst_subnet_prefix': '0.0.0.0',
- 'sctp-b-ipv6-egress_dst_subnet_prefix_len': '0',
- 'sctp-a-ipv6-ingress_dst_addresses': 'local',
- 'sctp-a-egress_rule_protocol': 'icmp',
- 'sctp-b-ipv6-egress_action': 'pass',
- 'sctp-a-ipv6-egress_action': 'pass',
- 'Internal1_shared': 'false',
- 'sctp-b-ipv6-ingress_rule_protocol': 'any',
- 'Internal2_net_cidr_len': '17',
- 'sctp-a-name': 'epc-sctp-a-ipv4v6-sec-group',
- 'sctp-a-ingress-src_end_port': '65535.0',
- 'sctp-b-ipv6-ingress_src_subnet_prefix': '0.0.0.0',
- 'sctp-a-egress-dst_end_port': '65535.0',
- 'sctp-a-ingress_action': 'pass',
- 'sctp-b-egress_rule_protocol': 'icmp',
- 'sctp-b-ipv6-ingress_action': 'pass',
- 'vlc_st_service_type': 'firewall',
- 'sctp-b-ipv6-egress_dst_end_port': '65535',
- 'sctp-b-ipv6-ingress-dst_start_port': '0',
- 'vlc2_Internal2_mac': '00:80:37:0E:02:12',
- 'vlc_st_availability_zone': 'true',
- 'fsb_volume_image_name_1': 'MME_FSB2_16ACP04_GA.qcow2',
- 'sctp-b-ingress-src_subnet_prefix': '0.0.0.0',
- 'sctp-a-ipv6-ingress_src_subnet_prefix_len': '0',
- 'Internal1_allow_transit': 'true',
- 'gpb_flavor_name': 'nv.c20r64d1',
- 'availability_zone_max_count': '1',
- 'fsb_volume_image_name_0': 'MME_FSB1_16ACP04_GA.qcow2',
- 'sctp-b-ipv6-ingress_dst_addresses': 'local',
- 'sctp-b-ipv6-egress_dst_subnet_prefix': '0.0.0.0',
- 'sctp-b-ipv6-ingress_ethertype': 'IPv4',
- 'vlc1_Internal2_mac': '00:80:37:0E:01:12',
- 'sctp-a-ingress-src_subnet_prefix': '0.0.0.0',
- 'sctp-a-ipv6-ingress_action': 'pass',
- 'Internal1_rpf': 'disable',
- 'sctp-b-ingress_ethertype': 'IPv4',
- 'sctp-b-egress_rule_application': 'any',
- 'sctp-b-ingress-src_end_port': '65535.0',
- 'sctp-a-ipv6-ingress_rule_protocol': 'any',
- 'sctp-a-ingress-src_start_port': '0.0',
- 'sctp-b-egress-dst_end_port': '65535.0'
- },
- 'type': 'VF',
- 'modelCustomizationName': 'VF_vMee 0',
- 'vfModules': {
- 'vf_vmee0..VfVmee..vmme_vlc..module-1': {
- 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
- 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
- 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
- 'description': null,
- 'name': 'VfVmee..vmme_vlc..module-1',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..vmme_vlc..module-1',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vmee0..VfVmee..vmme_gpb..module-2': {
- 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
- 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
- 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
- 'description': null,
- 'name': 'VfVmee..vmme_gpb..module-2',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..vmme_gpb..module-2',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vmee0..VfVmee..base_vmme..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVmee..base_vmme..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
- 'commands': {},
- 'volumeGroupAllowed': true
- }
- },
- 'volumeGroups': {
- 'vf_vmee0..VfVmee..base_vmme..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVmee..base_vmme..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
- }
- }
- }
- },
- 'networks': {
- 'ExtVL 0': {
- 'uuid': 'ddc3f20c-08b5-40fd-af72-c6d14636b986',
- 'invariantUuid': '379f816b-a7aa-422f-be30-17114ff50b7c',
- 'description': 'ECOMP generic virtual link (network) base type for all other service-level and global networks',
- 'name': 'ExtVL',
- 'version': '37.0',
- 'customizationUuid': '94fdd893-4a36-4d70-b16a-ec29c54c184f',
- 'inputs': {},
- 'commands': {},
- 'properties': {
- 'network_assignments': '{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}',
- 'exVL_naming': '{ecomp_generated_naming=true}',
- 'network_flows': '{is_network_policy=false, is_bound_to_vpn=false}',
- 'network_homing': '{ecomp_selected_instance_node_target=false}'
- },
- 'type': 'VL',
- 'modelCustomizationName': 'ExtVL 0'
- }
- },
- 'configurations': {
- 'Port Mirroring Configuration By Policy 0': {
- 'uuid': 'b4398538-e89d-4f13-b33d-ca323434ba50',
- 'invariantUuid': '6ef0ca40-f366-4897-951f-abd65d25f6f7',
- 'description': 'A port mirroring configuration by policy object',
- 'name': 'Port Mirroring Configuration By Policy',
- 'version': '27.0',
- 'customizationUuid': '3c3b7b8d-8669-4b3b-8664-61970041fad2',
- 'inputs': {},
- 'commands': {},
- 'properties': {},
- 'type': 'Configuration',
- 'modelCustomizationName': 'Port Mirroring Configuration By Policy 0',
- 'sourceNodes': [],
- 'collectorNodes': null,
- 'configurationByPolicy': false
- }
- },
- 'serviceProxies': {},
- 'vfModules': {
- 'vf_vmee0..VfVmee..vmme_vlc..module-1': {
- 'uuid': '522159d5-d6e0-4c2a-aa44-5a542a12a830',
- 'invariantUuid': '98a7c88b-b577-476a-90e4-e25a5871e02b',
- 'customizationUuid': '55b1be94-671a-403e-a26c-667e9c47d091',
- 'description': null,
- 'name': 'VfVmee..vmme_vlc..module-1',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..vmme_vlc..module-1',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vmee0..VfVmee..vmme_gpb..module-2': {
- 'uuid': '41708296-e443-4c71-953f-d9a010f059e1',
- 'invariantUuid': '1cca90b8-3490-495e-87da-3f3e4c57d5b9',
- 'customizationUuid': '6add59e0-7fe1-4bc4-af48-f8812422ae7c',
- 'description': null,
- 'name': 'VfVmee..vmme_gpb..module-2',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..vmme_gpb..module-2',
- 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
- 'commands': {},
- 'volumeGroupAllowed': false
- },
- 'vf_vmee0..VfVmee..base_vmme..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVmee..base_vmme..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1},
- 'commands': {},
- 'volumeGroupAllowed': true
- }
- },
- 'volumeGroups': {
- 'vf_vmee0..VfVmee..base_vmme..module-0': {
- 'uuid': 'a27f5cfc-7f12-4f99-af08-0af9c3885c87',
- 'invariantUuid': 'a6f9e51a-2b35-416a-ae15-15e58d61f36d',
- 'customizationUuid': 'f8c040f1-7e51-4a11-aca8-acf256cfd861',
- 'description': null,
- 'name': 'VfVmee..base_vmme..module-0',
- 'version': '2',
- 'modelCustomizationName': 'VfVmee..base_vmme..module-0',
- 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}
- }
- },
- 'pnfs': {}
- }
- }
- ));
- }
-
-});
diff --git a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts b/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts
deleted file mode 100644
index 57dc4b409..000000000
--- a/vid-webpack-master/src/app/drawingBoard/available-models-tree/available-models-tree.service.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import {Injectable} from '@angular/core';
-import * as _ from "lodash";
-import {ServicePlanningService} from "../../services/service-planning.service";
-
-@Injectable()
-export class AvailableModelsTreeService {
- constructor(private _servicePlanningService: ServicePlanningService) {
- }
-
- shouldShowAddIcon(node: any, serviceHierarchy: any, serviceModelId: string, currentNodeCount: number): boolean {
- let maxNodes: number = 1;
- if (node.data.children !== null && node.data.children.length == 0) {
- let vnfModules = serviceHierarchy[serviceModelId].vfModules;
- if (vnfModules[node.data.name]) {
- maxNodes = vnfModules[node.data.name].properties.maxCountInstances || 1;
- }
- }
- return !node.data.disabled && currentNodeCount < maxNodes
- }
-
- shouldOpenDialog(type: string, dynamicInputs: any, userProvidedNaming: boolean): boolean {
- if (userProvidedNaming || this._servicePlanningService.requiredFields[type].length > 0) {
- return true;
- }
-
- if (dynamicInputs) {
- for(let input of dynamicInputs) {
- if (input.isRequired && _.isEmpty(input.value)) {
- return true;
- }
- }
- }
- return false;
- }
-
-}