Disable editing the name of existing attributes 09/133109/11
authoreschcam <cameron.scholes@est.tech>
Wed, 1 Feb 2023 12:17:18 +0000 (12:17 +0000)
committerMichael Morris <michael.morris@est.tech>
Wed, 22 Feb 2023 12:25:11 +0000 (12:25 +0000)
Also added a patch to fix an exception been thrown
when editing existing attributes

Issue-ID: SDC-3384
Signed-off-by: eschcam <cameron.scholes@est.tech>
Change-Id: I524bad3046699baf66f407d1cf0c36394a66b623

catalog-ui/src/app/models/attributes-outputs/attribute-be-model.ts
catalog-ui/src/app/models/attributes.ts
catalog-ui/src/app/ng2/pages/workspace/attributes/attribute-modal.component.html
catalog-ui/src/app/ng2/pages/workspace/attributes/attribute-modal.component.ts
integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/AttributeModal.java

index 6af23a5..a6966cd 100644 (file)
@@ -64,7 +64,11 @@ export class AttributeBEModel {
       this.password = attribute.password;
       this.required = attribute.required;
       this.schema = attribute.schema;
-      this.schemaType = attribute.schemaType;
+
+      if (attribute.schemaType) {
+        this.schemaType = attribute.schemaType;
+      }
+
       this.type = attribute.type;
       this.uniqueId = attribute.uniqueId;
       this.value = attribute.value;
index ae5eac0..711e5b3 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
  */
 
 'use strict';
-import * as _ from "lodash";
-import {SchemaAttribute, SchemaAttributeGroupModel} from "./schema-attribute";
-import {AttributeOutputDetail} from "app/models/attributes-outputs/attribute-output-detail";
-import {AttributeBEModel} from "app/models/attributes-outputs/attribute-be-model";
+import { AttributeBEModel } from 'app/models/attributes-outputs/attribute-be-model';
+import { AttributeOutputDetail } from 'app/models/attributes-outputs/attribute-output-detail';
+import * as _ from 'lodash';
+import { SchemaAttribute, SchemaAttributeGroupModel } from './schema-attribute';
 
 export class AttributesGroup {
   constructor(attributesObj?: AttributesGroup) {
-    _.forEach(attributesObj, (attributes: Array<AttributeModel>, instance) => {
+    _.forEach(attributesObj, (attributes: AttributeModel[], instance) => {
       this[instance] = [];
       _.forEach(attributes, (attribute: AttributeModel): void => {
         attribute.resourceInstanceUniqueId = instance;
@@ -39,7 +39,7 @@ export class AttributesGroup {
 
 export interface IAttributeModel {
 
-  //server data
+  // server data
   uniqueId: string;
   name: string;
   _default: string;
@@ -49,7 +49,7 @@ export interface IAttributeModel {
   status: string;
   value: string;
   parentUniqueId: string;
-  //custom data
+  // custom data
   resourceInstanceUniqueId: string;
   readonly: boolean;
   valueUniqueUid: string;
@@ -57,7 +57,7 @@ export interface IAttributeModel {
 
 export class AttributeModel extends AttributeBEModel implements IAttributeModel {
 
-  //server data
+  // server data
   uniqueId: string;
   name: string;
   _default: string;
@@ -67,7 +67,7 @@ export class AttributeModel extends AttributeBEModel implements IAttributeModel
   status: string;
   value: string;
   parentUniqueId: string;
-  //custom data
+  // custom data
   resourceInstanceUniqueId: string;
   readonly: boolean;
   valueUniqueUid: string;
@@ -102,7 +102,7 @@ export class AttributeModel extends AttributeBEModel implements IAttributeModel
     if (!this.schema || !this.schema.property) {
       this.schema = new SchemaAttributeGroupModel(new SchemaAttribute());
     } else {
-      //forcing creating new object, so editing different one than the object in the table
+      // forcing creating new object, so editing different one than the object in the table
       this.schema = new SchemaAttributeGroupModel(new SchemaAttribute(this.schema.property));
     }
 
@@ -116,21 +116,20 @@ export class AttributeModel extends AttributeBEModel implements IAttributeModel
     if (this._default && this.type === 'list') {
       this._default = '[' + this._default + ']';
     }
-    this._default = this._default != "" && this._default != "[]" && this._default != "{}" ? this._default : null;
+    this._default = this._default != '' && this._default != '[]' && this._default != '{}' ? this._default : null;
 
     return JSON.stringify(this);
   }
 
-
   public convertValueToView() {
-    //unwrapping value {} or [] if type is complex
+    // unwrapping value {} or [] if type is complex
     if (this._default && (this.type === 'map' || this.type === 'list') &&
         ['[', '{'].indexOf(this._default.charAt(0)) > -1 &&
         [']', '}'].indexOf(this._default.slice(-1)) > -1) {
       this._default = this._default.slice(1, -1);
     }
 
-    //also for value - for the modal in canvas
+    // also for value - for the modal in canvas
     if (this.value && (this.type === 'map' || this.type === 'list') &&
         ['[', '{'].indexOf(this.value.charAt(0)) > -1 &&
         [']', '}'].indexOf(this.value.slice(-1)) > -1) {
@@ -144,6 +143,7 @@ export class AttributeModel extends AttributeBEModel implements IAttributeModel
     }
     this.readonly = undefined;
     this.resourceInstanceUniqueId = undefined;
+
     return this;
-  };
+  }
 }
index 590217d..d94fb54 100644 (file)
 
             <div class="attributeType">
                 <!-- ATTRIBUTE TYPE - MANDATORY -->
-                <sdc-dropdown #attributeType [disabled]="false" label="Type" [required]="true"
+                <sdc-dropdown #attributeType
+                              [disabled]="isEdit"
+                              label="Type"
+                              [required]="true"
                               [selectedOption]="toDropDownOption(this.attributeToEdit.type)" placeHolder="Choose Type"
                               testId="attributeType"
                               [options]="types" (changed)="onTypeSelected($event)">
index 426ed40..e851baf 100644 (file)
@@ -32,6 +32,7 @@ export class AttributeModalComponent implements OnInit {
     // The current effective default value pattern
     public defaultValuePattern: string;
     public defaultValueErrorMessage: string;
+    public isEdit: boolean;
 
     // Attribute being Edited
     public attributeToEdit: AttributeModel;
@@ -41,6 +42,11 @@ export class AttributeModalComponent implements OnInit {
     }
 
     ngOnInit() {
+        // Disable editing the name of existing attributes
+        if (this.attributeToEdit && this.attributeToEdit.name) {
+            this.isEdit = true;
+        }
+
         this.revalidateDefaultValue();
     }
 
index bd1330d..037d7e4 100644 (file)
@@ -46,9 +46,9 @@ public class AttributeModal extends AbstractPageObject {
     public void fillForm(final AttributeData attributeData, final boolean isUpdate) {
         if (!isUpdate) {
             editName(attributeData.getAttributeName());
+            editType(attributeData.getAttributeType());
         }
         editDescription(attributeData.getDescription());
-        editType(attributeData.getAttributeType());
         editDefaultValue(attributeData.getDefaultValue());
     }