/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ 'use strict'; 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: 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; _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 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 toJSON = (): any => { if (!this.resourceInstanceUniqueId) { this.value = undefined; } this.readonly = undefined; this.resourceInstanceUniqueId = undefined; return this; } }