import {InputOperationParameter} from "../../../../../../models/interfaceOperation";
import {DataTypeModel} from "../../../../../../models/data-types";
import {DerivedPropertyType} from "../../../../../../models/properties-inputs/property-be-model";
+import {SubPropertyToscaFunction} from "../../../../../../models/sub-property-tosca-function";
import {PROPERTY_DATA, PROPERTY_TYPES} from "../../../../../../utils/constants";
import {InstanceFeDetails} from "../../../../../../models/instance-fe-details";
+import {ToscaFunction} from "../../../../../../models/tosca-function";
import {CustomToscaFunction} from "../../../../../../models/default-custom-functions";
+import {ToscaFunctionType} from 'app/models/tosca-function-type.enum';
@Component({
selector: 'input-list',
onValueChange($event: any) {
const inputOperationParameter = this._inputs.find(input => input.name == $event.name);
+ if (!inputOperationParameter.subPropertyToscaFunctions) {
+ inputOperationParameter.subPropertyToscaFunctions = [];
+ }
if (inputOperationParameter) {
inputOperationParameter.valid = true;
if ($event.isToscaFunction) {
if (!inputOperationParameter.toscaFunction) {
inputOperationParameter.valid = false;
}
+ } else if (this.isTypeComplex(inputOperationParameter.type)) {
+ this.setComplexType($event, inputOperationParameter);
} else {
- inputOperationParameter.value = $event.value;
+ if (inputOperationParameter.type == PROPERTY_TYPES.JSON) {
+ const parseValue = $event.value;
+ try {
+ JSON.parse(parseValue);
+ inputOperationParameter.value = $event.value;
+ } catch (err) {
+ console.log('invalid json');
+ inputOperationParameter.valid = false;
+ inputOperationParameter.value = null;
+ }
+ } else {
+ inputOperationParameter.value = $event.value;
+ }
inputOperationParameter.toscaFunction = null;
}
+ }
this.inputsValidityChangeEvent.emit(this._inputs.every(input => input.valid === true));
this.inputValueChangeEvent.emit(new InputOperationParameter(inputOperationParameter));
- }
}
+ private setComplexType ($event, inputOperationParameter): void {
+ Object.keys($event.value).forEach(function (key) {
+ let value = $event.value[key];
+ if (!value || value.length < 1) {
+ return;
+ }
+ let subPropertyToscaFunction = inputOperationParameter.subPropertyToscaFunctions.find(existingSubPropertyToscaFunction => {
+ const prop = existingSubPropertyToscaFunction.subPropertyPath;
+ return prop && [key] && prop.length === [key].length && prop.every(function(value, index) { return value === [key][index]});
+ });
+ let valueKeys = value instanceof Object ? Object.keys(value) : undefined;
+ if (value && value.type && value.type in ToscaFunctionType) {
+ if (!subPropertyToscaFunction){
+ subPropertyToscaFunction = new SubPropertyToscaFunction();
+ inputOperationParameter.subPropertyToscaFunctions.push(subPropertyToscaFunction);
+ }
+ subPropertyToscaFunction.toscaFunction = value;
+ $event.value[key] = (value as ToscaFunction).buildValueObject();
+ let array: string[] = [];
+ array.push(key)
+ subPropertyToscaFunction.subPropertyPath = array;
+ } else if (subPropertyToscaFunction && (!valueKeys || !valueKeys.every(value => value.toUpperCase() in ToscaFunctionType))) {
+ inputOperationParameter.subPropertyToscaFunctions.splice(inputOperationParameter.subPropertyToscaFunctions.indexOf(subPropertyToscaFunction), 1)
+ }
+ });
+}
+
onDelete(inputName: string) {
this.inputDeleteEvent.emit(inputName);
}