merge from ecomp a88f0072 - Modern UI

Issue-ID: VID-378
Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6
Signed-off-by: Ittay Stern <ittay.stern@att.com>
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts
new file mode 100644
index 0000000..31d7b03
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts
@@ -0,0 +1,167 @@
+import {Component, EventEmitter, Output, ViewChild} from '@angular/core';
+import {ITreeOptions, TreeComponent} from 'angular-tree-component';
+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 '../../../shared/store/reducers';
+import {AaiService} from '../../../shared/services/aaiService/aai.service';
+import {ServiceNodeTypes} from '../../../shared/models/ServiceNodeTypes';
+import {IframeService} from "../../../shared/utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../shared/services/defaultDataServiceGenerator/default.data.generator.service";
+import {VfModulePopuopService} from "../../../shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service";
+import {NetworkPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/network/network.popup.service";
+import {createVFModuleInstance} from "../../../shared/storeUtil/utils/vfModule/vfModule.actions";
+import {VnfPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service";
+import {DrawingBoardModes} from "../drawing-board.modes";
+import {DrawingBoardTreeService} from "../drawing-board-tree/drawing-board-tree.service";
+import {ObjectToModelTreeService} from "../objectsToTree/objectToModelTree/objectToModelTree.service";
+import {VnfGroupPopupService} from "../../../shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service";
+import {SharedTreeService} from "../objectsToTree/shared.tree.service";
+import {changeInstanceCounter} from "../../../shared/storeUtil/utils/general/general.actions";
+import {createVnfGroupInstance} from "../../../shared/storeUtil/utils/vnfGroup/vnfGroup.actions";
+import {VnfGroupControlGenerator} from "../../../shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
+import {HighlightPipe} from "../../../shared/pipes/highlight/highlight-filter.pipe";
+import * as _ from 'lodash';
+import {DrawingBoardTreeComponent} from "../drawing-board-tree/drawing-board-tree.component";
+
+
+@Component({
+  selector: 'available-models-tree',
+  templateUrl: './available-models-tree.component.html',
+  styleUrls: ['./available-models-tree.component.scss'],
+  providers : [HighlightPipe]
+})
+
+export class AvailableModelsTreeComponent {
+  filterValue : string = '';
+  serviceModelId: string;
+  serviceHierarchy;
+  parentElementClassName = 'content';
+  _store: NgRedux<AppState>;
+  isNewObject: boolean;
+  availableModelsTreeService: AvailableModelsTreeService;
+  drawingBoardTreeService: DrawingBoardTreeService;
+
+  constructor(private _iframeService: IframeService,
+              private _aaiService: AaiService,
+              private route: ActivatedRoute,
+              private dialogService: DialogService,
+              private _availableModelsTreeService: AvailableModelsTreeService,
+              private _drawingBoardTreeService: DrawingBoardTreeService,
+              private _defaultDataGeneratorService: DefaultDataGeneratorService,
+              private _vnfGroupControlGenerator: VnfGroupControlGenerator,
+              private _vfModulePopuopService: VfModulePopuopService,
+              private _vnfGroupPopupService: VnfGroupPopupService,
+              private _vnfPopupService: VnfPopupService,
+              private _networkPopupService: NetworkPopupService,
+              private  store: NgRedux<AppState>,
+              private _objectToModelTreeService : ObjectToModelTreeService,
+              private  _sharedTreeService : SharedTreeService,
+              private _highlightPipe : HighlightPipe) {
+    this.availableModelsTreeService = _availableModelsTreeService;
+    this.drawingBoardTreeService = _drawingBoardTreeService;
+
+    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._objectToModelTreeService.convertServiceHierarchyModelToTreeNodes(this.serviceHierarchy);
+          },
+          error => {
+            console.log('error is ', error)
+          }
+        );
+      });
+
+  }
+
+  @Output()
+  highlightInstances: EventEmitter<number> = new EventEmitter<number>();
+  @ViewChild('tree') tree: TreeComponent;
+
+  nodes = [];
+  service = {name: ''};
+
+  options: ITreeOptions = {
+    nodeHeight: 36,
+    dropSlotHeight: 0,
+    nodeClass: (node: ITreeNode) => {
+      if (node.data.type === ServiceNodeTypes.VFmodule && ! node.parent.data['getNodeCount'](node.parent, this.serviceModelId) && this.store.getState().global.drawingBoardStatus !== DrawingBoardModes.VIEW) {
+        node.data.disabled = true;
+        return 'tree-node tree-node-disabled';
+      }
+      node.data.disabled = false;
+      return 'tree-node';
+    }
+  };
+
+
+  getNodeName(node : ITreeNode, filter : string) {
+    return this._highlightPipe.transform(node.data.name ,filter ? filter : '');
+  }
+
+  expandParentByNodeId(id: IDType): void {
+    this.tree.treeModel.getNodeById(id).parent.expand();
+  }
+
+  updateNodes(updateData : {nodes : any, filterValue : string}) : void {
+    this.nodes = updateData.nodes;
+    this.filterValue = updateData.filterValue;
+  }
+
+  selectNode(node: ITreeNode): void {
+    node.expand();
+    this._sharedTreeService.setSelectedVNF(null);
+    this.highlightInstances.emit(node.data.modelUniqueId);
+  }
+
+
+
+  onClickAdd(node: ITreeNode, serviceId: string ,  isNewObject: boolean = false): void {
+    this.isNewObject = isNewObject;
+    let data = node.data;
+    let dynamicInputs = data.dynamicInputs;
+    let isAlaCarte: boolean = this.serviceHierarchy.service.instantiationType == "A-La-Carte";
+    let isEcompGeneratedNaming: boolean = data.isEcompGeneratedNaming;
+    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, isEcompGeneratedNaming)) {
+      this._iframeService.addClassOpenModal(this.parentElementClassName);
+      node.data.onAddClick(node, serviceId);
+    } else {
+      if (node.data.type === ServiceNodeTypes.VnfGroup)  {
+        let instanceName = this._vnfGroupControlGenerator.getDefaultInstanceName(null, serviceId, node.data.name);
+        let vnfGroup = this._defaultDataGeneratorService.generateVnfGroupInstance(this.serviceHierarchy.vnfGroups[node.data.name], isEcompGeneratedNaming, isAlaCarte, instanceName);
+        this._store.dispatch(changeInstanceCounter(node.data.modelUniqueId, serviceId, 1 , <any> {data: {type: 'VnfGroup'}}));
+        this._store.dispatch(createVnfGroupInstance(vnfGroup, node.data.name, serviceId, node.data.name));
+        DrawingBoardTreeComponent.triggerreCalculateIsDirty.next(this.serviceModelId);
+      } else {
+        let vfModule = this._defaultDataGeneratorService.generateVFModule(this.serviceHierarchy.vnfs[node.parent.data.name].vfModules[node.data.name], dynamicInputs, isEcompGeneratedNaming, isAlaCarte);
+        if (this._sharedTreeService.selectedVNF) {
+          this.store.dispatch(createVFModuleInstance(vfModule, node.data.name, this.serviceModelId, null, this._sharedTreeService.selectedVNF));
+          DrawingBoardTreeComponent.triggerreCalculateIsDirty.next(this.serviceModelId);
+        } else if (this._availableModelsTreeService.getOptionalVNFs(this.serviceModelId, node.parent.data.name).length === 1) {
+          let existVnf = this._store.getState().service.serviceInstance[this.serviceModelId].vnfs;
+          if(!_.isNil(existVnf)){
+            for(let vnfKey in existVnf){
+              if(existVnf[vnfKey]['modelInfo'].modelUniqueId === node.parent.data.id){
+                this.store.dispatch(createVFModuleInstance(vfModule, node.data.name, this.serviceModelId, null, vnfKey));
+                DrawingBoardTreeComponent.triggerreCalculateIsDirty.next(this.serviceModelId);
+              }
+            }
+          }
+
+
+        } else {
+          this._availableModelsTreeService.addingAlertAddingNewVfModuleModal();
+        }
+      }
+    }
+  }
+}