/*-
* ============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=========================================================
*/
/**
* Created by obarda on 2/3/2016.
*/
///
module Sdc.Models.Components {
'use strict';
export class Resource extends Component {
public interfaces: any;
public derivedFrom:Array;
public componentService: Services.Components.IResourceService;
public resourceType:string;
public payloadData:string;
public payloadName:string;
public importedFile: Sdc.Directives.FileUploadModel;
// Onboarding parameters
public csarUUID:string;
public csarVersion:string;
public csarPackageType:string;
public packageId:string;
constructor(componentService: Services.Components.IResourceService, $q: ng.IQService, component?:Resource) {
super(componentService, $q, component);
if(component) {
this.interfaces = component.interfaces;
this.derivedFrom = component.derivedFrom;
this.payloadData = component.payloadData ? component.payloadData : undefined;
this.payloadName = component.payloadName ? component.payloadName : undefined;
this.resourceType = component.resourceType;
this.csarUUID = component.csarUUID;
this.csarVersion = component.csarVersion;
this.filterTerm = this.name + ' ' + this.description + ' ' + (this.tags ? this.tags.toString() : '') + ' ' + this.version + ' ' + this.resourceType;
if (component.categories && component.categories[0] && component.categories[0].subcategories && component.categories[0].subcategories[0]) {
component.mainCategory = component.categories[0].name;
component.subCategory = component.categories[0].subcategories[0].name;
this.selectedCategory = component.mainCategory + "_#_" + component.subCategory;
this.importedFile = component.importedFile;
}
} else {
this.resourceType = Utils.Constants.ResourceType.VF;
}
this.componentService = componentService;
this.iconSprite = "sprite-resource-icons";
}
public getComponentSubType = ():string => {
return this.resourceType;
};
public isComplex = ():boolean => {
return this.resourceType === Utils.Constants.ResourceType.VF;
};
public isVl = ():boolean => {
return Utils.Constants.ResourceType.VL == this.resourceType;
};
public isCsarComponent = ():boolean => {
return !!this.csarUUID;
};
public createComponentOnServer = ():ng.IPromise => {
let deferred = this.$q.defer();
let onSuccess = (component:Models.Components.Resource):void => {
this.payloadData = undefined;
this.payloadName = undefined;
deferred.resolve(component);
};
let onError = (error:any):void => {
deferred.reject(error);
};
this.handleTags();
if(this.importedFile){
this.payloadData = this.importedFile.base64;
this.payloadName = this.importedFile.filename;
}
this.componentService.createComponent(this).then(onSuccess, onError);
return deferred.promise;
};
/* we need to change the name of the input to vfInstanceName + input name before sending to server in order to create the inputs on the service
* we also need to remove already selected inputs (the inputs that already create on server, and disabled in the view - but they are selected so they are still in the view model
*/
public createInputsFormInstances = (instanceInputsPropertiesMap:Models.InstanceInputsPropertiesMapData):ng.IPromise> => {
let deferred = this.$q.defer();
/*
let instanceInputsPropertiesMapToCreate: Models.InstanceInputsPropertiesMapData = new Models.InstanceInputsPropertiesMapData();
_.forEach(instanceInputsPropertiesMap, (properties:Array, instanceId:string) => {
if(properties && properties.length > 0) {
let componentInstance:Models.ComponentsInstances.ComponentInstance = _.find(this.componentInstances, (instace:Models.ComponentsInstances.ComponentInstance) => {
return instace.uniqueId === instanceId;
});
instanceInputsPropertiesMapToCreate[instanceId] = new Array();
_.forEach(properties, (property:Models.PropertyModel) => {
if(!property.isAlreadySelected) {
let newInput = new Models.PropertyModel(property);
newInput.name = componentInstance.normalizedName + '_' + property.name;
instanceInputsPropertiesMapToCreate[instanceId].push(newInput);
}
});
if( instanceInputsPropertiesMapToCreate[instanceId].length === 0) {
delete instanceInputsPropertiesMapToCreate[instanceId];
}
} else {
delete instanceInputsPropertiesMapToCreate[instanceId];
}
});
if(Object.keys(instanceInputsPropertiesMapToCreate).length > 0) {
let deferred = this.$q.defer();
let onSuccess = (propertiesCreated: Array):void => {
this.inputs = propertiesCreated.concat(this.inputs);
deferred.resolve(propertiesCreated);
};
let onFailed = (error:any): void => {
deferred.reject(error);
};
this.componentService.createInputsFromInstancesInputsProperties(this.uniqueId, new Models.InstanceInputsPropertiesMap(instanceInputsPropertiesMapToCreate)).then(onSuccess, onFailed);
}
*/
return deferred.promise;
};
// we need to change the name of the input to vfInstanceName + input name before sending to server in order to create the inputs on the service
public getResourceInputInputs = (inputId:string):ng.IPromise> => {
let deferred = this.$q.defer();
let onSuccess = (inputInputs: Array):void => {
let input: Models.InputModel = _.find(this.inputs, (input:Models.InputModel) => {
return input.uniqueId === inputId;
});
input.inputs = inputInputs;
deferred.resolve(inputInputs);
};
let onFailed = (error:any): void => {
deferred.reject(error);
};
this.componentService.getComponentInputInputs(this.uniqueId, inputId).then(onSuccess, onFailed);
return deferred.promise;
};
public toJSON = ():any => {
this.componentService = undefined;
this.filterTerm = undefined;
this.iconSprite = undefined;
this.mainCategory = undefined;
this.subCategory = undefined;
this.selectedInstance = undefined;
this.showMenu = undefined;
this.$q = undefined;
this.selectedCategory = undefined;
this.importedFile = undefined;
return this;
};
}
}