-import { SchemaPropertyGroupModel, SchemaProperty } from '../aschema-property';
-import { PROPERTY_DATA, PROPERTY_TYPES} from 'app/utils';
-import { PropertyBEModel } from '../../models';
+/*-
+ * ============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=========================================================
+ */
+
+import * as _ from "lodash";
+import { SchemaPropertyGroupModel, SchemaProperty } from '../schema-property';
+import { DerivedPropertyType, PropertyBEModel, PropertyFEModel } from '../../models';
+import {SubPropertyToscaFunction} from "../sub-property-tosca-function";
+import {ToscaFunction} from "../tosca-function";
+import { PROPERTY_TYPES } from 'app/utils';
+import { UUID } from "angular2-uuid";
-export enum DerivedPropertyType {
- SIMPLE,
- LIST,
- MAP,
- COMPLEX //other datatype, list of non-simple, or map of non-simple
-}
export class DerivedFEProperty extends PropertyBEModel {
+ valueObj: any;
+ valueObjIsValid: boolean;
+ valueObjOrig: any;
+ valueObjIsChanged: boolean;
+ value: any
parentName: string;
propertiesName: string; //"network_assignments#ipv4_subnet#use_ipv4 = parentPath + name
derivedDataType: DerivedPropertyType;
+ toscaFunction: ToscaFunction;
isDeclared: boolean;
isSelected: boolean;
isDisabled: boolean;
+ hidden: boolean;
isChildOfListOrMap: boolean;
+ canBeDeclared: boolean;
+ mapKey: string;
+ mapKeyError: string;
+ mapInlist: boolean;
+ parentMapKey: string;
- constructor(property: PropertyBEModel, parentName?: string)
- constructor(name: string, parentName: string, type: string, value: string, isChildOfListOrMap?:boolean, schema?: SchemaPropertyGroupModel);
- constructor(nameOrPropertyObj?: string | PropertyBEModel, parentName?: string, type?: string, value?: string, isChildOfListOrMap?: boolean, schema?: SchemaPropertyGroupModel) {
-
- super(typeof nameOrPropertyObj === 'string' ? null : nameOrPropertyObj);
-
- if (typeof nameOrPropertyObj !== 'string') { //constructor #1
+ constructor(property: PropertyBEModel, parentName?: string, createChildOfListOrMap?: boolean, key?:string, value?:any) {
+ if (!createChildOfListOrMap) { //creating a standard derived prop
+ super(property);
this.parentName = parentName ? parentName : null;
- this.propertiesName = (parentName) ? parentName + '#' + nameOrPropertyObj.name : nameOrPropertyObj.name;
- } else { //constructor #2
- this.name = nameOrPropertyObj;
- this.type = type;
+ this.propertiesName = (parentName) ? parentName + '#' + property.name : property.name;
+ this.canBeDeclared = true; //defaults to true
+ } else { //creating a direct child of list or map (ie. Item that can be deleted, with UUID instead of name)
+ super(null);
+ if(property.subPropertyToscaFunctions != null){
+ property.subPropertyToscaFunctions.forEach((item : SubPropertyToscaFunction) => {
+ if(item.subPropertyPath[0] === key){
+ this.toscaFunction = item.toscaFunction;
+ }
+ });
+ }
+ this.isChildOfListOrMap = true;
+ this.canBeDeclared = false;
+ this.name = UUID.UUID();
this.parentName = parentName;
- this.propertiesName = parentName + '#' + nameOrPropertyObj;
- this.value = value;
- if (schema) {
- this.schema = new SchemaPropertyGroupModel(new SchemaProperty(schema.property));
+ this.propertiesName = parentName + '#' + this.name;
+
+ if (property.type == PROPERTY_TYPES.LIST) {
+ let parentKey : string = null;
+ if(property.value != null) {
+ const valueJson = JSON.parse(property.value);
+ if (key != '') {
+ parentKey = key;
+ }else{
+ let indexNumber = Number(Object.keys(valueJson).sort().reverse()[0]) + 1;
+ parentKey = indexNumber.toString();
+ }
+ }else {
+ parentKey = "0";
+ }
+ if (property.schemaType != PROPERTY_TYPES.MAP) {
+ this.mapKey = parentKey;
+ }
+ this.mapKeyError = null;
+ this.type = property.schema.property.type;
+ if (this.type == PROPERTY_TYPES.MAP){
+ this.mapInlist = true;
+ this.parentMapKey = parentKey;
+ }
+ this.schema = new SchemaPropertyGroupModel(new SchemaProperty(property.schema.property));
+ } else { //map
+ if (key) {
+ this.mapKey = key;
+ this.mapKeyError = null;
+ } else {
+ this.mapKey = '';
+ this.mapKeyError = 'Key cannot be empty.';
+ }
+ this.type = property.type;
+ if (property.schema.property.type == PROPERTY_TYPES.MAP){
+ const schProp = new SchemaProperty();
+ schProp.isSimpleType = true;
+ schProp.isDataType = false;
+ schProp.simpleType = PROPERTY_TYPES.STRING;
+ this.schema = new SchemaPropertyGroupModel(schProp);
+ this.schemaType = PROPERTY_TYPES.STRING;
+ if (property instanceof DerivedFEProperty) {
+ this.parentMapKey = property.parentMapKey;
+ if (value != null && typeof value == 'object') {
+ this.toscaFunction = property.toscaFunction;
+ }
+ }
+ } else {
+ this.schema = new SchemaPropertyGroupModel(new SchemaProperty(property.schema.property));
+ }
+
}
+ this.valueObj = ((this.type == PROPERTY_TYPES.JSON || this.type == PROPERTY_TYPES.MAP) && typeof value == 'object') ? JSON.stringify(value) : value;
+ if (value != null) {
+ this.value = typeof value == 'object' ? JSON.stringify(value) : value;
+ }
+ this.updateValueObjOrig();
}
+ // this.constraints = property ? property.constraints : null;
+ this.valueObjIsValid = true;
this.derivedDataType = this.getDerivedPropertyType();
- this.isChildOfListOrMap = (isChildOfListOrMap) ? isChildOfListOrMap : false;
}
-
- public getDerivedPropertyType = () => {
- if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.type) > -1) {
- return DerivedPropertyType.SIMPLE;
- } else if (this.type == PROPERTY_TYPES.LIST) {
- return DerivedPropertyType.LIST;
- } else if (this.type == PROPERTY_TYPES.MAP) {
- return DerivedPropertyType.MAP;
- } else {
- return DerivedPropertyType.COMPLEX;
- }
- }
-
-}
-export class DerivedFEPropertyMap {
- [parentPath: string]: Array<DerivedFEProperty>;
-}
+ public getActualMapKey() {
+ return (this.mapKeyError) ? this.name : this.mapKey;
+ }
+ public updateValueObj(valueObj:any, isValid:boolean) {
+ this.valueObj = PropertyFEModel.cleanValueObj(valueObj);
+ this.valueObjIsValid = isValid;
+ this.valueObjIsChanged = this.hasValueObjChanged();
+ }
-// isDataType: boolean;
+ public updateValueObjOrig() {
+ this.valueObjOrig = _.cloneDeep(this.valueObj);
+ this.valueObjIsChanged = false;
+ }
+ public hasValueObjChanged() {
+ return !_.isEqual(this.valueObj, this.valueObjOrig);
+ }
-// canAdd: boolean;
-// canCollapse: boolean;
-// canBeDeclared: boolean;
+}
+export class DerivedFEPropertyMap {
+ [parentPath: string]: Array<DerivedFEProperty>;
+}
-// derivedValue: string;
-// derivedValueType: string;
-// propertiesName: string;
\ No newline at end of file