Provide timeout field in interface operation implementation 95/135495/4
authorimamSidero <imam.hussain@est.tech>
Tue, 18 Jul 2023 10:04:25 +0000 (11:04 +0100)
committerVasyl Razinkov <vasyl.razinkov@est.tech>
Fri, 28 Jul 2023 14:58:32 +0000 (14:58 +0000)
Timeout field with timeout type is provided in interface operation implementation

Issue-ID: SDC-4575
Signed-off-by: Imam hussain <imam.hussain@est.tech>
Change-Id: I7cde19b933f71f3ef45ff7130a8df704b2aacbdc

catalog-ui/src/app/ng2/pages/composition/interface-operatons/interface-operations.component.ts
catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.html
catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.less
catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.component.ts
catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/interface-operation-handler.module.ts
catalog-ui/src/app/ng2/pages/interface-definition/interface-definition.page.component.ts

index 2c1497e..04210ae 100644 (file)
@@ -289,12 +289,19 @@ export class InterfaceOperationsComponent {
         this.modalServiceNg2.currentModal.instance.dynamicContent.instance.isLoading = true;
         const interfaceOperationHandlerComponentInstance: InterfaceOperationHandlerComponent = this.modalInstance.instance.dynamicContent.instance;
         const operationUpdated: InterfaceOperationModel = interfaceOperationHandlerComponentInstance.operationToUpdate;
+        let timeout = null;
+        if (operationUpdated.implementation && operationUpdated.implementation.timeout != null) {
+            timeout = operationUpdated.implementation.timeout;
+        }
         const isArtifactChecked = interfaceOperationHandlerComponentInstance.enableAddArtifactImplementation;
         if (!isArtifactChecked) {
             let artifactName = interfaceOperationHandlerComponentInstance.artifactName;
             artifactName = artifactName === undefined ? '' : artifactName;
             operationUpdated.implementation = new ArtifactModel({'artifactName': artifactName, 'artifactVersion': ''} as ArtifactModel);
         }
+        if (timeout != null) {
+            operationUpdated.implementation.timeout = timeout;
+        }
         this.topologyTemplateService.updateComponentInstanceInterfaceOperation(
             this.componentMetaData.uniqueId,
             this.componentMetaData.componentType,
index cf9a04a..0b42f75 100644 (file)
             >
             </app-add-input>
         </div>
+        <div class="group-with-border content-row">
+            <label class="sdc-timeout-label">Timeout : </label>
+            <input class="sdc-timeout" type="number" [formControl]="timeoutValue" oninput="this.value = this.valueAsNumber" [ngClass]="{'disabled':isViewOnly}" (change)="timeoutConversion()"/>
+            <select class="sdc-timeout-select" [formControl]="timeoutType" (change)="timeoutConversion()" [ngClass]="{'disabled':isViewOnly}">
+                <option value="sec">Seconds</option>
+                <option value="hour">Hours</option>
+                <option value="day">Days</option>
+              </select>
+        </div>
     </form>
 </div>
index 5edf97f..7c333ce 100644 (file)
 .operation-handler::-webkit-scrollbar-track {
     border: 0;
 }
+
+.sdc-timeout-label {
+    width: 100%;
+}
+
+.sdc-timeout {
+    box-sizing : border-box;
+    padding : 0 10px;
+    width : 10%;
+    border: solid 1px #d2d2d2;
+    border-radius : 2px;
+    color: #5a5a5a;
+}
index 4a68de2..5c5ec1b 100644 (file)
@@ -19,6 +19,7 @@
 *  ============LICENSE_END=========================================================
 */
 import {Component, EventEmitter, Output, ViewChild} from '@angular/core';
+import { FormControl } from '@angular/forms';
 import {UIInterfaceModel} from "../interface-operations.component";
 import {InputOperationParameter, InterfaceOperationModel, IOperationParamsList} from "../../../../../models/interfaceOperation";
 import {TranslateService} from "../../../../shared/translator/translate.service";
@@ -89,6 +90,8 @@ export class InterfaceOperationHandlerComponent {
     enableAddArtifactImplementation: boolean;
     propertyValueValid: boolean = true;
     inputTypeOptions: any[];
+    timeoutValue = new FormControl('');
+    timeoutType = new FormControl('');
 
     constructor(private dataTypeService: DataTypeService,
                 private componentServiceNg2: ComponentServiceNg2,
@@ -105,6 +108,23 @@ export class InterfaceOperationHandlerComponent {
         this.operationToUpdate.interfaceId = this.input.selectedInterface.uniqueId;
         this.operationToUpdate.interfaceType = this.input.selectedInterface.type;
         this.modelName = this.input.modelName;
+        this.timeoutType.setValue('sec');
+        if (this.operationToUpdate.implementation && this.operationToUpdate.implementation.timeout != null) {
+            this.timeoutValue.setValue(this.operationToUpdate.implementation.timeout);
+            let timeout = this.timeoutValue.value / 3600;
+            if (Number.isInteger(timeout)) {
+                if (timeout > 23 && Number.isInteger(timeout / 24)) {
+                    this.timeoutValue.setValue(timeout / 24);
+                    this.timeoutType.setValue("day");
+                } else {
+                    this.timeoutValue.setValue(timeout);
+                    this.timeoutType.setValue("hour");
+                }
+            } else if (Number.isInteger(timeout / 24)) {
+                this.timeoutValue.setValue(timeout / 24);
+                this.timeoutType.setValue("day");
+            }
+        }
         this.initCustomToscaFunctions();
         this.initInputs();
         this.removeImplementationQuote();
@@ -259,6 +279,21 @@ export class InterfaceOperationHandlerComponent {
         this.inputs.splice(index, 1);
     }
 
+    timeoutConversion = (): void => {
+        let timeout = this.timeoutValue.value;
+        if (timeout != null) {
+            if (this.timeoutType.value == null || this.timeoutType.value == 'sec') {
+                this.operationToUpdate.implementation.timeout = timeout;
+                return;
+            }
+            if (this.timeoutType.value == 'hour') {
+                this.operationToUpdate.implementation.timeout = timeout * 3600;
+            } else if (this.timeoutType.value == 'day') {
+                this.operationToUpdate.implementation.timeout = (timeout * 24) * 3600;
+            }
+        }
+    }
+
     private removeImplementationQuote(): void {
         if (this.operationToUpdate.implementation) {
             if (!this.operationToUpdate.implementation
index b4fc9d1..3fa20ab 100644 (file)
@@ -23,6 +23,7 @@ import {NgModule} from "@angular/core";
 import {CommonModule} from "@angular/common";
 
 import {FormsModule, ReactiveFormsModule} from "@angular/forms";
+import {BrowserModule} from '@angular/platform-browser';
 import {FormElementsModule} from "app/ng2/components/ui/form-components/form-elements.module";
 import {TranslateModule} from "app/ng2/shared/translator/translate.module";
 import {AddInputComponent} from './add-input/add-input.component';
@@ -46,6 +47,7 @@ import {ToscaFunctionModule} from '../../../properties-assignment/tosca-function
     imports: [
         CommonModule,
         SdcUiComponentsModule,
+        BrowserModule,
         FormsModule,
         FormElementsModule,
         TranslateModule,
index f4706b9..90d6a6c 100644 (file)
@@ -279,12 +279,19 @@ export class InterfaceDefinitionComponent {
         this.modalServiceNg2.currentModal.instance.dynamicContent.instance.isLoading = true;
         const interfaceOperationHandlerComponentInstance: InterfaceOperationHandlerComponent = this.modalInstance.instance.dynamicContent.instance;
         const operationToUpdate = this.modalInstance.instance.dynamicContent.instance.operationToUpdate;
+        let timeout = null;
+        if (operationToUpdate.implementation && operationToUpdate.implementation.timeout != null) {
+            timeout = operationToUpdate.implementation.timeout;
+        }
         const isArtifactChecked = interfaceOperationHandlerComponentInstance.enableAddArtifactImplementation;
         if (!isArtifactChecked) {
             const artifactName = interfaceOperationHandlerComponentInstance.artifactName ?
                 interfaceOperationHandlerComponentInstance.artifactName : '';
             operationToUpdate.implementation = new ArtifactModel({'artifactName': artifactName, 'artifactVersion': ''} as ArtifactModel);
         }
+        if (timeout != null) {
+            operationToUpdate.implementation.timeout = timeout;
+        }
         this.componentServiceNg2.updateComponentInterfaceOperation(this.component.uniqueId, operationToUpdate)
         .subscribe((newOperation: InterfaceOperationModel) => {
             let oldOpIndex;