aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-ui/src/app/models/attributes.ts
blob: ae5eac02818b04b19894e02c44c45aeddff644e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highl
/*-
 * ============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 * 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";

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));
      });
    });
  }
}

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));
    }

    this.convertValueToView();
  }

  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;
  };
}