Extend Modern UI for pnf usecase
[vid.git] / vid-webpack-master / src / app / drawingBoard / service-planning / objectsToTree / models / network / network.model.info.ts
index 3d99750..b01c796 100644 (file)
@@ -1,6 +1,5 @@
 import {DynamicInputsService} from "../../dynamicInputs.service";
 import {ILevelNodeInfo} from "../basic.model.info";
-import {NetworkInstance} from "../../../../../shared/models/networkInstance";
 import {NetworkModel} from "../../../../../shared/models/networkModel";
 import {NetworkTreeNode} from "../../../../../shared/models/networkTreeNode";
 import {SharedTreeService} from "../../shared.tree.service";
@@ -19,7 +18,6 @@ import {AvailableNodeIcons} from "../../../available-models-tree/available-model
 import {DuplicateVnfComponent} from "../../../duplicate/duplicate-vnf.component";
 import {changeInstanceCounter, removeInstance} from "../../../../../shared/storeUtil/utils/general/general.actions";
 import {IframeService} from "../../../../../shared/utils/iframe.service";
-import {SdcUiServices} from "onap-ui-angular";
 import {DuplicateService} from "../../../duplicate/duplicate.service";
 import {ServiceInstanceActions} from "../../../../../shared/models/serviceInstanceActions";
 import {
@@ -28,6 +26,10 @@ import {
   updateNetworkPosition
 } from "../../../../../shared/storeUtil/utils/network/network.actions";
 import {IModalConfig} from "onap-ui-angular/dist/modals/models/modal-config";
+import {ComponentInfoType} from "../../../component-info/component-info-model";
+import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
+import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
+import {ModalService} from "../../../../../shared/components/customModal/services/modal.service";
 
 export class NetworkModelInfo implements ILevelNodeInfo {
   constructor(private _dynamicInputsService: DynamicInputsService,
@@ -35,14 +37,17 @@ export class NetworkModelInfo implements ILevelNodeInfo {
               private _dialogService: DialogService,
               private _networkPopupService: NetworkPopupService,
               private _duplicateService: DuplicateService,
-              private modalService: SdcUiServices.ModalService,
+              private modalService: ModalService,
               private _iframeService: IframeService,
+              private _featureFlagsService: FeatureFlagsService,
               private _store: NgRedux<AppState>) {
   }
 
   name: string = 'networks';
   type: string = 'Network';
   typeName: string = 'N';
+  childNames: string[];
+  componentInfoType = ComponentInfoType.NETWORK;
 
   /***********************************************************
    * return model dynamic inputs
@@ -59,14 +64,13 @@ export class NetworkModelInfo implements ILevelNodeInfo {
   };
 
   /***********************************************************
-   * return network model
-   * @param networkModelId - current Model id
-   * @param instance
-   * @param serviceHierarchy - serviceHierarchy
+   * return a NodeModel object instance
+   * @param instanceModel - The model of the instance (usually extracted from serviceHierarchy store)
    ************************************************************/
-  getModel = (networkModelId: string, instance: NetworkInstance, serviceHierarchy): NetworkModel => {
-    const originalModelName = instance.originalName ? instance.originalName : networkModelId;
-    return new NetworkModel(serviceHierarchy[this.name][originalModelName]);
+  getModel = (instanceModel: any): NetworkModel => {
+    return new NetworkModel(
+      instanceModel,
+      this._featureFlagsService.getAllFlags());
   };
 
 
@@ -77,13 +81,13 @@ export class NetworkModelInfo implements ILevelNodeInfo {
    * @param parentModel
    * @param storeKey - store key if exist
    ************************************************************/
-  createInstanceTreeNode = (instance: NetworkInstance, model: NetworkModel, parentModel, storeKey: string): NetworkTreeNode => {
+  createInstanceTreeNode = (instance: any, model: any, parentModel: any, storeKey: string, serviceModelId: string): any => {
     let node = new NetworkTreeNode(instance, model, storeKey);
     node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
     node.typeName = this.typeName;
-    node.menuActions = this.getMenuAction(<any>node, model.uuid);
+    node.menuActions = this.getMenuAction(<any>node, serviceModelId);
     node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
-    node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage: "";
+    node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
     node = this._sharedTreeService.addingStatusProperty(node);
     return node;
   };
@@ -141,7 +145,7 @@ export class NetworkModelInfo implements ILevelNodeInfo {
       map = this._store.getState().service.serviceInstance[serviceModelId].existingNetworksCounterMap || 0;
       if (!_.isNil(map)) {
         let count = map[node.data.modelUniqueId] || 0;
-        count -= this._sharedTreeService.getExistingInstancesWithDeleteMode(node, serviceModelId , 'networks');
+        count -= this._sharedTreeService.getExistingInstancesWithDeleteMode(node, serviceModelId, 'networks');
         return count;
       }
     }
@@ -157,17 +161,17 @@ export class NetworkModelInfo implements ILevelNodeInfo {
     let counter: number = !_.isNil(this._store.getState().service.serviceInstance[serviceModelId]) ?
       (this._store.getState().service.serviceInstance[serviceModelId].existingNetworksCounterMap[node.data.modelUniqueId] || 0) : 0;
 
-    counter -= this._sharedTreeService.getExistingInstancesWithDeleteMode(node, serviceModelId , 'networks');
+    counter -= this._sharedTreeService.getExistingInstancesWithDeleteMode(node, serviceModelId, 'networks');
 
     const properties = this._store.getState().service.serviceHierarchy[serviceModelId].networks[node.data.name].properties;
-    const maxInstances: number = !_.isNil(properties) ? (properties.max_instances || 1) : 1;
-    const isReachedLimit = !(maxInstances > counter);
+    const flags = FeatureFlagsService.getAllFlags(this._store);
+    const isReachedLimit: boolean = this._sharedTreeService.isReachedToMaxInstances(properties, counter, flags);
     const showAddIcon = this._sharedTreeService.shouldShowAddIcon() && !isReachedLimit;
 
     return new AvailableNodeIcons(showAddIcon, isReachedLimit)
   }
 
-  getMenuAction(node: ITreeNode, serviceModelId: string): { [methodName: string]: { method: Function, visible: Function, enable: Function }} {
+  getMenuAction(node: ITreeNode, serviceModelId: string): { [methodName: string]: { method: Function, visible: Function, enable: Function } } {
     const mode = this._store.getState().global.drawingBoardStatus;
     return {
       edit: {
@@ -186,64 +190,63 @@ export class NetworkModelInfo implements ILevelNodeInfo {
             isUpdateMode: true
           });
         },
-        visible: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node),
-        enable: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node)
+        visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowRemoveAndEdit(node),
+        enable: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowRemoveAndEdit(node)
       },
       showAuditInfo: {
         method: (node, serviceModelId) => {
           let instance = this._store.getState().service.serviceInstance[serviceModelId].networks[node.data.networkStoreKey];
           this._sharedTreeService.openAuditInfoModal(node, serviceModelId, instance, 'NETWORK', this);
         },
-        visible: (node) => this._sharedTreeService.shouldShowAuditInfo(node),
-        enable: (node) => this._sharedTreeService.shouldShowAuditInfo(node)
+        visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowAuditInfo(node),
+        enable: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowAuditInfo(node)
       },
       duplicate: {
         method: (node, serviceModelId) => {
-          if (this._store.getState().global.flags['FLAG_DUPLICATE_VNF']) {
-            const storeKey = node.data.networkStoreKey;
-            let modalConfig: IModalConfig = this._duplicateService.openDuplicateModal(serviceModelId, node.data.modelUniqueId, node.data.modelName, storeKey, 1, this._store, node);
-            this.modalService.openCustomModal(modalConfig, DuplicateVnfComponent);
-          }
+          const storeKey = node.data.networkStoreKey;
+          let modalConfig: IModalConfig = this._duplicateService.openDuplicateModal(serviceModelId, node.data.modelUniqueId, node.data.modelName, storeKey, 1, this._store, node);
+          this.modalService.openCustomModal(modalConfig, DuplicateVnfComponent);
         },
-        visible: (node) => this._sharedTreeService.shouldShowDuplicate(node) && !_.isNil(node.data) && !_.isNil(node.data.action) && node.data.action === ServiceInstanceActions.Create && this._duplicateService.canDuplicate(node),
-        enable: (node, serviceModelId) => this._duplicateService.isEnabled(node, this._store, serviceModelId)
+        visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDuplicate(node) && !_.isNil(node.data) && !_.isNil(node.data.action) && node.data.action === ServiceInstanceActions.Create && this._duplicateService.canDuplicate(node),
+        enable: (node, serviceModelId) => node.data.parentType !== 'VRF' && this._duplicateService.isEnabled(node, this._store, serviceModelId)
       },
       remove: {
         method: (node, serviceModelId) => {
           let storeKey: string = node.data.networkStoreKey;
           this._store.dispatch(removeInstance(node.data.networkStoreKey, serviceModelId, storeKey, node));
-          this._store.dispatch(changeInstanceCounter(node.data.modelUniqueId , serviceModelId, -1, node));
-          this._sharedTreeService.selectedVNF = null;
+          this._store.dispatch(changeInstanceCounter(node.data.modelUniqueId, serviceModelId, -1, node));
+          this._sharedTreeService.selectedNF = null;
         },
-        visible: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node),
-        enable: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node),
+        visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowRemoveAndEdit(node),
+        enable: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowRemoveAndEdit(node),
       },
-      delete : {
-        method : (node, serviceModelId) => {
+      delete: {
+        method: (node, serviceModelId) => {
           if ((!_.isNil(node.data.children) && node.data.children.length === 0) || _.isNil(node.data.children)) {
             this._store.dispatch(deleteActionNetworkInstance(node.data.networkStoreKey, serviceModelId));
-          }else {
-            this._sharedTreeService.removeDeleteAllChild(node, serviceModelId, (node, serviceModelId)=>{
+          } else {
+            this._sharedTreeService.removeDeleteAllChild(node, serviceModelId, (node, serviceModelId) => {
               this._store.dispatch(deleteActionNetworkInstance(node.data.networkStoreKey, serviceModelId));
             });
           }
         },
-        visible: (node) => this._sharedTreeService.shouldShowDelete(node),
-        enable: (node) => this._sharedTreeService.shouldShowDelete(node)
+        visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDelete(node, serviceModelId),
+        enable: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowDelete(node, serviceModelId)
       },
-      undoDelete : {
-        method : (node, serviceModelId) => {
+      undoDelete: {
+        method: (node, serviceModelId) => {
           if ((!_.isNil(node.data.children) && node.data.children.length === 0) || _.isNil(node.data.children)) {
             this._store.dispatch(undoDeleteActionNetworkInstance(node.data.networkStoreKey, serviceModelId));
-          }else {
-            this._sharedTreeService.undoDeleteAllChild(node, serviceModelId, (node, serviceModelId)=>{
+          } else {
+            this._sharedTreeService.undoDeleteAllChild(node, serviceModelId, (node, serviceModelId) => {
               this._store.dispatch(undoDeleteActionNetworkInstance(node.data.networkStoreKey, serviceModelId));
             });
           }
         },
-        visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node),
-        enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
+        visible: (node) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowUndoDelete(node),
+        enable: (node, serviceModelId) => node.data.parentType !== 'VRF' && this._sharedTreeService.shouldShowUndoDelete(node) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
       }
+
     };
   }
 
@@ -251,7 +254,7 @@ export class NetworkModelInfo implements ILevelNodeInfo {
    * should update node position inside the tree
    * @param node - current ITrees node
    ************************************************************/
-  updatePosition(that , node, instanceId): void {
+  updatePosition(that, node, instanceId): void {
     that.store.dispatch(updateNetworkPosition(node));
   }
 
@@ -259,6 +262,21 @@ export class NetworkModelInfo implements ILevelNodeInfo {
     return !_.isNil(instance) ? instance.position : null;
   }
 
-  onSelectedNode(node: ITreeNode): void {
+  getInfo(model, instance): ModelInformationItem[] {
+    const modelInformation = !_.isEmpty(model)  ? [
+      ModelInformationItem.createInstance("Min instances", !_.isNull(model.min) ? String(model.min) : null),
+      this._sharedTreeService.createMaximumToInstantiateModelInformationItem(model)
+    ] : [];
+
+    if (!_.isEmpty(model) && !_.isEmpty(model.properties)) {
+      modelInformation.push(ModelInformationItem.createInstance("Network role", model.properties.network_role))
+    }
+
+    const instanceInfo = !_.isEmpty(instance) ? [
+        ModelInformationItem.createInstance("Route target id", instance.routeTargetId ? instance.routeTargetId : null),
+        ModelInformationItem.createInstance("Route target role", instance.routeTargetRole ? instance.routeTargetRole : null)] :
+      [];
+    const result = [modelInformation, instanceInfo];
+    return _.uniq(_.flatten(result));
   }
 }