diff options
Diffstat (limited to 'catalog-ui/app/scripts/models/properties.ts')
-rw-r--r-- | catalog-ui/app/scripts/models/properties.ts | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/catalog-ui/app/scripts/models/properties.ts b/catalog-ui/app/scripts/models/properties.ts new file mode 100644 index 0000000000..679ca03b44 --- /dev/null +++ b/catalog-ui/app/scripts/models/properties.ts @@ -0,0 +1,176 @@ +/*- + * ============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========================================================= + */ +/// <reference path="../references"/> +module Sdc.Models { + 'use strict'; + + export class PropertiesGroup { + constructor(propertiesObj?:Models.PropertiesGroup){ + _.forEach(propertiesObj, (properties:Array<Models.PropertyModel>, instance) => { + this[instance] = []; + _.forEach(properties, (property:Models.PropertyModel):void => { + property.resourceInstanceUniqueId = instance; + property.readonly = true; + this[instance].push(new Models.PropertyModel(property)); + }); + }); + } + } + + export interface IPropertyModel { + + //server data + uniqueId: string; + name: string; + constraints: Array<Object>; + defaultValue: string; + description: string; + password: boolean; + required: boolean; + type: string; + source: string; + parentUniqueId: string; + schema: Models.SchemaPropertyGroupModel; + + //instance properties + value:string; + valueUniqueUid:string; + path:Array<string>; + rules:Array<Object>; + + //custom properties + resourceInstanceUniqueId: string; + readonly: boolean; + simpleType: string; + } + + export class PropertyModel implements IPropertyModel{ + + //server data + uniqueId:string; + name:string; + constraints:Array<Object>; + defaultValue:string; + description:string; + password:boolean; + required:boolean; + type:string; + source:string; + parentUniqueId:string; + schema: Models.SchemaPropertyGroupModel; + + //instance properties + value:string; + valueUniqueUid:string; + path:Array<string>; + rules:Array<Object>; + + //custom properties + resourceInstanceUniqueId:string; + readonly:boolean; + simpleType: string; + filterTerm: string; + isAlreadySelected: boolean; + + constructor(property?:Models.PropertyModel) { + if (property) { + this.uniqueId = property.uniqueId; + this.name = property.name; + this.constraints = property.constraints; + this.defaultValue = property.defaultValue; + this.description = property.description; + this.password = property.password; + this.required = property.required; + this.type = property.type; + this.source = property.source; + this.parentUniqueId = property.parentUniqueId; + this.schema = property.schema; + this.value = property.value?property.value:property.defaultValue; + this.valueUniqueUid = property.valueUniqueUid; + this.path = property.path; + this.rules = property.rules; + this.resourceInstanceUniqueId = property.resourceInstanceUniqueId; + this.readonly = property.readonly; + this.simpleType = property.simpleType; + + + } + + if(!this.schema || !this.schema.property) { + this.schema = new Models.SchemaPropertyGroupModel(new Models.SchemaProperty()); + } else { + //forcing creating new object, so editing different one than the object in the table + this.schema = new Models.SchemaPropertyGroupModel(new Models.SchemaProperty(this.schema.property)); + } + if(property) { + this.filterTerm = this.name + " " + (this.description||"") +" " + this.type; + if(this.schema.property && this.schema.property.type) { + this.filterTerm += " " +this.schema.property.type; + } + } + } + + public convertToServerObject:Function = ():string => { + let serverObject = {}; + let mapData = { + "type": this.type, + "required": this.required || false, + "defaultValue": this.defaultValue != "" && this.defaultValue != "[]" && this.defaultValue != "{}" ? this.defaultValue :null, + "description": this.description, + "constraints": this.constraints, + "isPassword": this.password || false, + "schema": this.schema, + "name": this.name + }; + serverObject[this.name] = mapData; + + return JSON.stringify(serverObject); + }; + + + // 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; + this.simpleType = undefined; + this.value = this.value === "{}" || this.value === "[]" ? undefined: this.value; + this.defaultValue = this.defaultValue === "{}" || this.defaultValue === "[]" ? undefined: this.defaultValue; + return this; + }; + } +} |