Fix bugs in attribute outputs page
[sdc.git] / catalog-ui / src / app / models / attributes.ts
index 9e5828a..3bbbd1e 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 {SchemaAttributeGroupModel, SchemaAttribute} from "./schema-attribute";
-import {SchemaPropertyGroupModel, SchemaProperty} from "./aschema-property";
+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) => {
-            this[instance] = [];
-            _.forEach(attributes, (attribute:AttributeModel):void => {
-                attribute.resourceInstanceUniqueId = instance;
-                attribute.readonly = true;
-                this[instance].push(new AttributeModel(attribute));
-            });
-        });
-    }
+  constructor(attributesObj?: AttributesGroup) {
+    _.forEach(attributesObj, (attributes: AttributeModel[], instance) => {
+      this[instance] = [];
+      _.forEach(attributes, (attribute: AttributeModel): void => {
+        attribute.resourceInstanceUniqueId = instance;
+        attribute.readonly = true;
+        this[instance].push(new AttributeModel(attribute));
+      });
+    });
+  }
 }
 
 export interface IAttributeModel {
 
-    //server data
-    uniqueId:string;
-    name:string;
-    defaultValue:string;
-    description:string;
-    type:string;
-    schema:SchemaAttributeGroupModel;
-    status:string;
-    value:string;
-    hidden:boolean;
-    parentUniqueId:string;
-    //custom data
-    resourceInstanceUniqueId:string;
-    readonly:boolean;
-    valueUniqueUid:string;
+  // server data
+  uniqueId: string;
+  name: string;
+  _default: string;
+  description: string;
+  type: string;
+  schema: SchemaAttributeGroupModel;
+  status: string;
+  value: string;
+  parentUniqueId: string;
+  // custom data
+  resourceInstanceUniqueId: string;
+  readonly: boolean;
+  valueUniqueUid: string;
 }
 
-export class AttributeModel implements IAttributeModel {
-
-    //server data
-    uniqueId:string;
-    name:string;
-    defaultValue:string;
-    description:string;
-    type:string;
-    schema:SchemaAttributeGroupModel;
-    status:string;
-    value:string;
-    hidden:boolean;
-    parentUniqueId:string;
-    //custom data
-    resourceInstanceUniqueId:string;
-    readonly:boolean;
-    valueUniqueUid:string;
-
-    constructor(attribute?:AttributeModel) {
-        if (attribute) {
-            this.uniqueId = attribute.uniqueId;
-            this.name = attribute.name;
-            this.defaultValue = attribute.defaultValue;
-            this.description = attribute.description;
-            this.type = attribute.type;
-            this.status = attribute.status;
-            this.schema = attribute.schema;
-            this.value = attribute.value;
-            this.hidden = attribute.hidden;
-            this.parentUniqueId = attribute.parentUniqueId;
-            this.resourceInstanceUniqueId = attribute.resourceInstanceUniqueId;
-            this.readonly = attribute.readonly;
-            this.valueUniqueUid = attribute.valueUniqueUid;
-        }
-
-        if (!this.schema || !this.schema.property) {
-            this.schema = new SchemaPropertyGroupModel(new SchemaProperty());
-        } else {
-            //forcing creating new object, so editing different one than the object in the table
-            this.schema = new SchemaAttributeGroupModel(new SchemaAttribute(this.schema.property));
-        }
-
-        this.convertValueToView();
+export class AttributeModel extends AttributeBEModel implements IAttributeModel {
+
+  // server data
+  uniqueId: string;
+  name: string;
+  _default: string;
+  description: string;
+  type: string;
+  schema: SchemaAttributeGroupModel;
+  status: string;
+  value: string;
+  parentUniqueId: string;
+  // custom data
+  resourceInstanceUniqueId: string;
+  readonly: boolean;
+  valueUniqueUid: string;
+
+  getOutputValues: AttributeOutputDetail[];
+  subAttributeOutputPath: string;
+  outputPath: string;
+
+  constructor(attribute?: AttributeModel) {
+    super(attribute);
+    if (attribute) {
+      this.uniqueId = attribute.uniqueId;
+      this.name = attribute.name;
+      this._default = attribute._default;
+      this.description = attribute.description;
+      this.type = attribute.type;
+      this.status = attribute.status;
+      this.schema = attribute.schema;
+      this.value = attribute.value;
+      this.parentUniqueId = attribute.parentUniqueId;
+      this.resourceInstanceUniqueId = attribute.resourceInstanceUniqueId;
+      this.readonly = attribute.readonly;
+      this.valueUniqueUid = attribute.valueUniqueUid;
+
+      this.getOutputValues = attribute.getOutputValues;
+      this.subAttributeOutputPath = attribute.subAttributeOutputPath;
+      this.outputPath = attribute.outputPath;
+    } else {
+      this._default = '';
+    }
+
+    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
+      this.schema = new SchemaAttributeGroupModel(new SchemaAttribute(this.schema.property));
+    }
+  }
+
+  public convertToServerObject(): string {
+    if (this._default && this.type === 'map') {
+      this._default = '{' + this._default + '}';
+    }
+    if (this._default && this.type === 'list') {
+      this._default = '[' + this._default + ']';
+    }
+    this._default = this._default != '' && this._default != '[]' && this._default != '{}' ? this._default : null;
+
+    return JSON.stringify(this);
+  }
+
+  public convertValueToView() {
+    // 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
+    if (this.value && (this.type === 'map' || this.type === 'list') &&
+        ['[', '{'].indexOf(this.value.charAt(0)) > -1 &&
+        [']', '}'].indexOf(this.value.slice(-1)) > -1) {
+      this.value = this.value.slice(1, -1);
     }
+  }
 
-    public convertToServerObject:Function = ():string => {
-        if (this.defaultValue && this.type === 'map') {
-            this.defaultValue = '{' + this.defaultValue + '}';
-        }
-        if (this.defaultValue && this.type === 'list') {
-            this.defaultValue = '[' + this.defaultValue + ']';
-        }
-        this.defaultValue = this.defaultValue != "" && this.defaultValue != "[]" && this.defaultValue != "{}" ? this.defaultValue : null;
-
-        return JSON.stringify(this);
-    };
-
-
-    public convertValueToView() {
-        //unwrapping value {} or [] if type is complex
-        if (this.defaultValue && (this.type === 'map' || this.type === 'list') &&
-            ['[', '{'].indexOf(this.defaultValue.charAt(0)) > -1 &&
-            [']', '}'].indexOf(this.defaultValue.slice(-1)) > -1) {
-            this.defaultValue = this.defaultValue.slice(1, -1);
-        }
-
-        //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) {
-            this.value = this.value.slice(1, -1);
-        }
+  public toJSON = (): any => {
+    if (!this.resourceInstanceUniqueId) {
+      this.value = undefined;
     }
+    this.readonly = undefined;
+    this.resourceInstanceUniqueId = undefined;
 
-    public toJSON = ():any => {
-        if (!this.resourceInstanceUniqueId) {
-            this.value = undefined;
-        }
-        this.readonly = undefined;
-        this.resourceInstanceUniqueId = undefined;
-        return this;
-    };
+    return this;
+  }
 }