Keyboard Shortcut for copy&Paste and delete
[sdc.git] / catalog-ui / src / app / services / components / component-service.ts
index 25203e7..0d4b5bb 100644 (file)
  */
 'use strict';
 import * as _ from "lodash";
-import {ArtifactModel, IFileDownload, InstancesInputsPropertiesMap, InputModel, IValidate, RelationshipModel, PropertyModel, Component, ComponentInstance,
-    AttributeModel, IAppConfigurtaion, Resource, Module, DisplayModule, ArtifactGroupModel, InputsAndProperties} from "app/models";
-import {ComponentInstanceFactory, CommonUtils} from "app/utils";
-import {SharingService} from "../sharing-service";
-import {ComponentMetadata} from "../../models/component-metadata";
+import {
+    ArtifactModel, IFileDownload, InstancesInputsPropertiesMap, InputModel, IValidate, RelationshipModel, PropertyModel, Component, ComponentInstance,
+    AttributeModel, IAppConfigurtaion, Resource, Module, DisplayModule, ArtifactGroupModel, InputsAndProperties
+} from "app/models";
+import { ComponentInstanceFactory, CommonUtils } from "app/utils";
+import { SharingService } from "../sharing-service";
+import { ComponentMetadata } from "../../models/component-metadata";
 
 export interface IComponentService {
 
-    getComponent(id:string);
-    updateComponent(component:Component):ng.IPromise<Component>;
-    changeLifecycleState(component:Component, state:string, userRemarks:any):ng.IPromise<ComponentMetadata> ;
-    validateName(newName:string, subtype?:string):ng.IPromise<IValidate>;
-    createComponent(component:Component):ng.IPromise<Component>;
-    addOrUpdateArtifact(componentId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel>;
-    deleteArtifact(componentId:string, artifact:string, artifactLabel):ng.IPromise<ArtifactModel>;
-    addProperty(componentId:string, property:PropertyModel):ng.IPromise<PropertyModel>;
-    updateProperty(componentId:string, property:PropertyModel):ng.IPromise<PropertyModel>;
-    addAttribute(componentId:string, attribute:AttributeModel):ng.IPromise<AttributeModel>;
-    updateAttribute(componentId:string, attribute:AttributeModel):ng.IPromise<AttributeModel>;
-    deleteProperty(componentId:string, propertyId:string):ng.IPromise<PropertyModel>;
-    deleteAttribute(componentId:string, attributeId:string):ng.IPromise<AttributeModel>;
-    checkResourceInstanceVersionChange(componentId:string, componentInstanceId:string, componentUid:string):ng.IPromise<any>;
-    changeResourceInstanceVersion(componentId:string, componentInstanceId:string, componentUid:string):ng.IPromise<ComponentInstance>;
-    updateInstanceArtifact(componentId:string, instanceId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel>;
-    addInstanceArtifact(componentId:string, instanceId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel>;
-    deleteInstanceArtifact(componentId:string, instanceId:string, artifact:string, artifactLabel):ng.IPromise<ArtifactModel>;
-    createComponentInstance(componentId:string, componentInstance:ComponentInstance):ng.IPromise<ComponentInstance>;
-    updateComponentInstance(componentId:string, componentInstance:ComponentInstance):ng.IPromise<ComponentInstance>;
-    updateMultipleComponentInstances(componentId:string, instances:Array<ComponentInstance>):ng.IPromise< Array<ComponentInstance>>;
-    downloadArtifact(componentId:string, artifactId:string):ng.IPromise<IFileDownload>;
-    uploadInstanceEnvFile(componentId:string, instanceId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel>;
-    downloadInstanceArtifact(componentId:string, instanceId:string, artifactId:string):ng.IPromise<IFileDownload>;
-    deleteComponentInstance(componentId:string, componentInstanceId:string):ng.IPromise<ComponentInstance>;
-    createRelation(componentId:string, link:RelationshipModel):ng.IPromise<RelationshipModel>;
-    deleteRelation(componentId:string, link:RelationshipModel):ng.IPromise<RelationshipModel>;
-    fetchRelation(componentId:string, linkId:string):ng.IPromise<RelationshipModel>;
-    getRequirementsCapabilities(componentId:string):ng.IPromise<any>;
-    updateInstanceProperties(componentId:string, componentInstanceId:string, properties:PropertyModel[]):ng.IPromise<PropertyModel[]>;
-    updateInstanceAttribute(componentId:string, attribute:AttributeModel):ng.IPromise<AttributeModel>;
-    getComponentInstancesFilteredByInputsAndProperties(componentId:string, searchText:string):ng.IPromise<Array<ComponentInstance>>
-    getComponentInstanceInputs(componentId:string, instanceId:string, originComponentUid):ng.IPromise<Array<InputModel>>;
-    getComponentInputs(componentId:string):ng.IPromise<Array<InputModel>>;
-    getComponentInstanceInputProperties(componentId:string, instanceId:string, inputId:string):ng.IPromise<Array<PropertyModel>>;
-    getComponentInstanceProperties(componentId:string, instanceId:string):ng.IPromise<Array<PropertyModel>>;
-    getModuleForDisplay(componentId:string, moduleId:string):ng.IPromise<DisplayModule>;
-    getComponentInstanceModule(componentId:string, componentInstanceId:string, moduleId:string):ng.IPromise<DisplayModule>;
-    updateGroupMetadata(componentId:string, group:Module):ng.IPromise<Module>;
-    getComponentInputInputsAndProperties(serviceId:string, input:string):ng.IPromise<InputsAndProperties>;
-    createInputsFromInstancesInputs(serviceId:string, instancesInputsMap:InstancesInputsPropertiesMap):ng.IPromise<Array<InputModel>>;
-    createInputsFromInstancesInputsProperties(resourceId:string, instanceInputsPropertiesMap:InstancesInputsPropertiesMap):ng.IPromise<Array<PropertyModel>>;
-    deleteComponentInput(serviceId:string, inputId:string):ng.IPromise<InputModel>;
-    getArtifactByGroupType(componentId:string, artifactGroupType:string):ng.IPromise<ArtifactGroupModel>;
-    getComponentInstanceArtifactsByGroupType(componentId:string, componentInstanceId:string, artifactGroupType:string):ng.IPromise<ArtifactGroupModel>;
+    getComponent(id: string);
+    updateComponent(component: Component): ng.IPromise<Component>;
+    changeLifecycleState(component: Component, state: string, userRemarks: any): ng.IPromise<ComponentMetadata>;
+    validateName(newName: string, subtype?: string): ng.IPromise<IValidate>;
+    createComponent(component: Component): ng.IPromise<Component>;
+    addOrUpdateArtifact(componentId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel>;
+    deleteArtifact(componentId: string, artifact: string, artifactLabel): ng.IPromise<ArtifactModel>;
+    addProperty(componentId: string, property: PropertyModel): ng.IPromise<PropertyModel>;
+    updateProperty(componentId: string, property: PropertyModel): ng.IPromise<PropertyModel>;
+    addAttribute(componentId: string, attribute: AttributeModel): ng.IPromise<AttributeModel>;
+    updateAttribute(componentId: string, attribute: AttributeModel): ng.IPromise<AttributeModel>;
+    deleteProperty(componentId: string, propertyId: string): ng.IPromise<PropertyModel>;
+    deleteAttribute(componentId: string, attributeId: string): ng.IPromise<AttributeModel>;
+    checkResourceInstanceVersionChange(componentId: string, componentInstanceId: string, componentUid: string): ng.IPromise<any>;
+    changeResourceInstanceVersion(componentId: string, componentInstanceId: string, componentUid: string): ng.IPromise<ComponentInstance>;
+    updateInstanceArtifact(componentId: string, instanceId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel>;
+    addInstanceArtifact(componentId: string, instanceId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel>;
+    deleteInstanceArtifact(componentId: string, instanceId: string, artifact: string, artifactLabel): ng.IPromise<ArtifactModel>;
+    createComponentInstance(componentId: string, componentInstance: ComponentInstance): ng.IPromise<ComponentInstance>;
+    updateComponentInstance(componentId: string, componentInstance: ComponentInstance): ng.IPromise<ComponentInstance>;
+    updateMultipleComponentInstances(componentId: string, instances: Array<ComponentInstance>): ng.IPromise<Array<ComponentInstance>>;
+    downloadArtifact(componentId: string, artifactId: string): ng.IPromise<IFileDownload>;
+    uploadInstanceEnvFile(componentId: string, instanceId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel>;
+    downloadInstanceArtifact(componentId: string, instanceId: string, artifactId: string): ng.IPromise<IFileDownload>;
+    deleteComponentInstance(componentId: string, componentInstanceId: string): ng.IPromise<ComponentInstance>;
+    createRelation(componentId: string, link: RelationshipModel): ng.IPromise<RelationshipModel>;
+    deleteRelation(componentId: string, link: RelationshipModel): ng.IPromise<RelationshipModel>;
+    fetchRelation(componentId: string, linkId: string): ng.IPromise<RelationshipModel>;
+    getRequirementsCapabilities(componentId: string): ng.IPromise<any>;
+    updateInstanceProperties(componentId: string, componentInstanceId: string, properties: PropertyModel[]): ng.IPromise<PropertyModel[]>;
+    updateInstanceAttribute(componentId: string, attribute: AttributeModel): ng.IPromise<AttributeModel>;
+    getComponentInstancesFilteredByInputsAndProperties(componentId: string, searchText: string): ng.IPromise<Array<ComponentInstance>>
+    getComponentInstanceInputs(componentId: string, instanceId: string, originComponentUid): ng.IPromise<Array<InputModel>>;
+    getComponentInputs(componentId: string): ng.IPromise<Array<InputModel>>;
+    getComponentInstanceInputProperties(componentId: string, instanceId: string, inputId: string): ng.IPromise<Array<PropertyModel>>;
+    getComponentInstanceProperties(componentId: string, instanceId: string): ng.IPromise<Array<PropertyModel>>;
+    getModuleForDisplay(componentId: string, moduleId: string): ng.IPromise<DisplayModule>;
+    getComponentInstanceModule(componentId: string, componentInstanceId: string, moduleId: string): ng.IPromise<DisplayModule>;
+    updateGroupMetadata(componentId: string, group: Module): ng.IPromise<Module>;
+    getComponentInputInputsAndProperties(serviceId: string, input: string): ng.IPromise<InputsAndProperties>;
+    createInputsFromInstancesInputs(serviceId: string, instancesInputsMap: InstancesInputsPropertiesMap): ng.IPromise<Array<InputModel>>;
+    createInputsFromInstancesInputsProperties(resourceId: string, instanceInputsPropertiesMap: InstancesInputsPropertiesMap): ng.IPromise<Array<PropertyModel>>;
+    deleteComponentInput(serviceId: string, inputId: string): ng.IPromise<InputModel>;
+    getArtifactByGroupType(componentId: string, artifactGroupType: string): ng.IPromise<ArtifactGroupModel>;
+    getComponentInstanceArtifactsByGroupType(componentId: string, componentInstanceId: string, artifactGroupType: string): ng.IPromise<ArtifactGroupModel>;
+    batchDeleteComponentInstance(componentId: string, componentInstanceIdList: Array<string>): ng.IPromise<any>;
+    pasteMenuComponentInstance(componentId: string, srcComponentId: string, msg: string): ng.IPromise<string>;
+    batchDeleteRelation(componentId: string, links: Array<RelationshipModel>): ng.IPromise<Array<RelationshipModel>>
+
 }
 
 export class ComponentService implements IComponentService {
@@ -84,12 +90,12 @@ export class ComponentService implements IComponentService {
         '$base64'
     ];
 
-    constructor(protected restangular:restangular.IElement,
-                protected sdcConfig:IAppConfigurtaion,
-                protected sharingService:SharingService,
-                protected $q:ng.IQService,
-                protected $base64:any
-               ) {
+    constructor(protected restangular: restangular.IElement,
+        protected sdcConfig: IAppConfigurtaion,
+        protected sharingService: SharingService,
+        protected $q: ng.IQService,
+        protected $base64: any
+    ) {
 
         this.restangular.setBaseUrl(sdcConfig.api.root + sdcConfig.api.component_api_root);
         this.restangular.setRequestInterceptor(function (elem, operation) {
@@ -102,27 +108,27 @@ export class ComponentService implements IComponentService {
     }
 
     //this function is override by each service, we need to change this method to abstract when updtaing typescript version
-    protected createComponentObject = (component:Component):Component => {
+    protected createComponentObject = (component: Component): Component => {
         return component;
     };
 
-    public getComponent = (id:string):ng.IPromise<Component> => {
+    public getComponent = (id: string): ng.IPromise<Component> => {
         let deferred = this.$q.defer<Component>();
-        this.restangular.one(id).get().then((response:Component) => {
-            let component:Component = this.createComponentObject(response);
+        this.restangular.one(id).get().then((response: Component) => {
+            let component: Component = this.createComponentObject(response);
             //console.log("Component Loaded successfully : ", component);
             deferred.resolve(component);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to load component with ID: " + id);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateComponent = (component:Component):ng.IPromise<Component> => {
+    public updateComponent = (component: Component): ng.IPromise<Component> => {
         // If this is resource
         if (component instanceof Resource) {
-            let resource:Resource = <Resource>component;
+            let resource: Resource = <Resource>component;
             if (resource.importedFile) {
                 // Update resource with payload data.
                 return this.updateResourceWithPayload(resource);
@@ -140,34 +146,34 @@ export class ComponentService implements IComponentService {
         }
     };
 
-    private updateService = (component:Component):ng.IPromise<Component> => {
+    private updateService = (component: Component): ng.IPromise<Component> => {
         let deferred = this.$q.defer<Component>();
-        this.restangular.one(component.uniqueId).one("metadata").customPUT(JSON.stringify(component)).then((response:Component) => {
-            let component:Component = this.createComponentObject(response);
+        this.restangular.one(component.uniqueId).one("metadata").customPUT(JSON.stringify(component)).then((response: Component) => {
+            let component: Component = this.createComponentObject(response);
             deferred.resolve(component);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    private updateResource = (component:Component):ng.IPromise<Component> => {
+    private updateResource = (component: Component): ng.IPromise<Component> => {
         let deferred = this.$q.defer<Component>();
-        this.restangular.one(component.uniqueId).customPUT(JSON.stringify(component)).then((response:Component) => {
-            let component:Component = this.createComponentObject(response);
+        this.restangular.one(component.uniqueId).customPUT(JSON.stringify(component)).then((response: Component) => {
+            let component: Component = this.createComponentObject(response);
             deferred.resolve(component);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    private updateResourceMetadata = (component:Component):ng.IPromise<Component> => {
+    private updateResourceMetadata = (component: Component): ng.IPromise<Component> => {
         let deferred = this.$q.defer<Component>();
-        this.restangular.one(component.uniqueId).one('metadata').customPUT(JSON.stringify(component)).then((response:Component) => {
-            let component:Component = this.createComponentObject(response);
+        this.restangular.one(component.uniqueId).one('metadata').customPUT(JSON.stringify(component)).then((response: Component) => {
+            let component: Component = this.createComponentObject(response);
             deferred.resolve(component);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
@@ -178,109 +184,109 @@ export class ComponentService implements IComponentService {
      * @param component
      * @returns {IPromise<T>}
      */
-    private updateResourceWithPayload = (resource:Resource):ng.IPromise<Component> => {
+    private updateResourceWithPayload = (resource: Resource): ng.IPromise<Component> => {
         let deferred = this.$q.defer<Component>();
 
         resource.payloadData = resource.importedFile.base64;
         resource.payloadName = resource.importedFile.filename;
         let headerObj = this.getHeaderMd5(resource);
 
-        this.restangular.one(resource.uniqueId).customPUT(JSON.stringify(resource), '', {}, headerObj).then((response:Component) => {
-            let componentResult:Component = this.createComponentObject(response);
+        this.restangular.one(resource.uniqueId).customPUT(JSON.stringify(resource), '', {}, headerObj).then((response: Component) => {
+            let componentResult: Component = this.createComponentObject(response);
             deferred.resolve(componentResult);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
 
         return deferred.promise;
     };
 
-    public createComponent = (component:Component):ng.IPromise<Component> => {
+    public createComponent = (component: Component): ng.IPromise<Component> => {
         let deferred = this.$q.defer<Component>();
         let headerObj = this.getHeaderMd5(component);
-        this.restangular.customPOST(JSON.stringify(component), '', {}, headerObj).then((response:Component) => {
-            let component:Component = this.createComponentObject(response);
+        this.restangular.customPOST(JSON.stringify(component), '', {}, headerObj).then((response: Component) => {
+            let component: Component = this.createComponentObject(response);
             deferred.resolve(component);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public validateName = (newName:string, subtype?:string):ng.IPromise<IValidate> => {
+    public validateName = (newName: string, subtype?: string): ng.IPromise<IValidate> => {
         let deferred = this.$q.defer<IValidate>();
-        this.restangular.one("validate-name").one(newName).get({'subtype': subtype}).then((response:any) => {
+        this.restangular.one("validate-name").one(newName).get({ 'subtype': subtype }).then((response: any) => {
             deferred.resolve(response.plain());
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public changeLifecycleState = (component:Component, state:string, userRemarks:any):ng.IPromise<ComponentMetadata> => {
+    public changeLifecycleState = (component: Component, state: string, userRemarks: any): ng.IPromise<ComponentMetadata> => {
         let deferred = this.$q.defer<ComponentMetadata>();
-        this.restangular.one(component.uniqueId).one(state).customPOST(userRemarks).then((response:ComponentMetadata) => {
+        this.restangular.one(component.uniqueId).one(state).customPOST(userRemarks).then((response: ComponentMetadata) => {
             this.sharingService.addUuidValue(response.uniqueId, response.uuid);
-            let component:ComponentMetadata = new ComponentMetadata().deserialize(response);
+            let component: ComponentMetadata = new ComponentMetadata().deserialize(response);
             deferred.resolve(component);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
     // ------------------------------------------------ Artifacts API --------------------------------------------------//
-    public addOrUpdateArtifact = (componentId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel> => {
+    public addOrUpdateArtifact = (componentId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel> => {
         let deferred = this.$q.defer<ArtifactModel>();
         let headerObj = {};
         if (artifact.payloadData) {
             headerObj = this.getHeaderMd5(artifact);
         }
-        this.restangular.one(componentId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response:any) => {
+        this.restangular.one(componentId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response: any) => {
             deferred.resolve(response.plain());
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public downloadArtifact = (componentId:string, artifactId:string):ng.IPromise<IFileDownload> => {
+    public downloadArtifact = (componentId: string, artifactId: string): ng.IPromise<IFileDownload> => {
         let deferred = this.$q.defer<IFileDownload>();
-        this.restangular.one(componentId).one("artifacts").one(artifactId).get().then((response:any) => {
+        this.restangular.one(componentId).one("artifacts").one(artifactId).get().then((response: any) => {
             deferred.resolve(response.plain());
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public deleteArtifact = (componentId:string, artifactId:string, artifactLabel:string):ng.IPromise<ArtifactModel> => {
+    public deleteArtifact = (componentId: string, artifactId: string, artifactLabel: string): ng.IPromise<ArtifactModel> => {
         let deferred = this.$q.defer<ArtifactModel>();
-        this.restangular.one(componentId).one("artifacts").one(artifactId).remove({'operation': artifactLabel}).then((response:ArtifactModel) => {
+        this.restangular.one(componentId).one("artifacts").one(artifactId).remove({ 'operation': artifactLabel }).then((response: ArtifactModel) => {
             deferred.resolve(response);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public getArtifactByGroupType = (componentId:string, artifactGroupType:string):ng.IPromise<ArtifactGroupModel> => {
+    public getArtifactByGroupType = (componentId: string, artifactGroupType: string): ng.IPromise<ArtifactGroupModel> => {
         let deferred = this.$q.defer<ArtifactGroupModel>();
-        this.restangular.one(componentId).one("artifactsByType").one(artifactGroupType).get().then((response:any) => {
-            var artifacts:ArtifactGroupModel = new ArtifactGroupModel(response.plain());
+        this.restangular.one(componentId).one("artifactsByType").one(artifactGroupType).get().then((response: any) => {
+            var artifacts: ArtifactGroupModel = new ArtifactGroupModel(response.plain());
             deferred.resolve(artifacts);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public getComponentInstanceArtifactsByGroupType = (componentId:string, componentInstanceId:string, artifactGroupType:string):ng.IPromise<ArtifactGroupModel> => {
+    public getComponentInstanceArtifactsByGroupType = (componentId: string, componentInstanceId: string, artifactGroupType: string): ng.IPromise<ArtifactGroupModel> => {
         let deferred = this.$q.defer<ArtifactGroupModel>();
-        this.restangular.one(componentId).one("resourceInstances").one(componentInstanceId).one("artifactsByType").one(artifactGroupType).get().then((response:any) => {
-            var artifacts:ArtifactGroupModel = new ArtifactGroupModel(response.plain());
+        this.restangular.one(componentId).one("resourceInstances").one(componentInstanceId).one("artifactsByType").one(artifactGroupType).get().then((response: any) => {
+            var artifacts: ArtifactGroupModel = new ArtifactGroupModel(response.plain());
             deferred.resolve(artifacts);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
@@ -288,66 +294,66 @@ export class ComponentService implements IComponentService {
 
 
     // ------------------------------------------------ Properties API --------------------------------------------------//
-    public addProperty = (componentId:string, property:PropertyModel):ng.IPromise<PropertyModel> => {
+    public addProperty = (componentId: string, property: PropertyModel): ng.IPromise<PropertyModel> => {
         let deferred = this.$q.defer<PropertyModel>();
-        this.restangular.one(componentId).one("properties").customPOST(property.convertToServerObject()).then((response:any) => {
-            let property:PropertyModel = new PropertyModel(response[Object.keys(response)[0]]);
+        this.restangular.one(componentId).one("properties").customPOST(property.convertToServerObject()).then((response: any) => {
+            let property: PropertyModel = new PropertyModel(response[Object.keys(response)[0]]);
             deferred.resolve(property);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateProperty = (componentId:string, property:PropertyModel):ng.IPromise<PropertyModel> => {
+    public updateProperty = (componentId: string, property: PropertyModel): ng.IPromise<PropertyModel> => {
         let deferred = this.$q.defer<PropertyModel>();
-        this.restangular.one(componentId).one("properties").one(property.uniqueId).customPUT(property.convertToServerObject()).then((response:any) => {
-            let property:PropertyModel = new PropertyModel(response[Object.keys(response)[0]]);
+        this.restangular.one(componentId).one("properties").one(property.uniqueId).customPUT(property.convertToServerObject()).then((response: any) => {
+            let property: PropertyModel = new PropertyModel(response[Object.keys(response)[0]]);
             deferred.resolve(property);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public deleteProperty = (componentId:string, propertyId:string):ng.IPromise<PropertyModel> => {
+    public deleteProperty = (componentId: string, propertyId: string): ng.IPromise<PropertyModel> => {
         let deferred = this.$q.defer<PropertyModel>();
-        this.restangular.one(componentId).one("properties").one(propertyId).remove().then((response:any) => {
+        this.restangular.one(componentId).one("properties").one(propertyId).remove().then((response: any) => {
             deferred.resolve(response);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
     // ------------------------------------------------ Attributes API --------------------------------------------------//
-    public addAttribute = (componentId:string, attribute:AttributeModel):ng.IPromise<AttributeModel> => {
+    public addAttribute = (componentId: string, attribute: AttributeModel): ng.IPromise<AttributeModel> => {
         let deferred = this.$q.defer<AttributeModel>();
-        this.restangular.one(componentId).one("attributes").customPOST(attribute.convertToServerObject()).then((response:any) => {
-            let attribute:AttributeModel = new AttributeModel(response);
+        this.restangular.one(componentId).one("attributes").customPOST(attribute.convertToServerObject()).then((response: any) => {
+            let attribute: AttributeModel = new AttributeModel(response);
             deferred.resolve(attribute);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateAttribute = (componentId:string, attribute:AttributeModel):ng.IPromise<AttributeModel> => {
+    public updateAttribute = (componentId: string, attribute: AttributeModel): ng.IPromise<AttributeModel> => {
         let deferred = this.$q.defer<AttributeModel>();
-        this.restangular.one(componentId).one("attributes").one(attribute.uniqueId).customPUT(attribute.convertToServerObject()).then((response:any) => {
-            let attribute:AttributeModel = new AttributeModel(response);
+        this.restangular.one(componentId).one("attributes").one(attribute.uniqueId).customPUT(attribute.convertToServerObject()).then((response: any) => {
+            let attribute: AttributeModel = new AttributeModel(response);
             deferred.resolve(attribute);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public deleteAttribute = (componentId:string, attributeId:string):ng.IPromise<AttributeModel> => {
+    public deleteAttribute = (componentId: string, attributeId: string): ng.IPromise<AttributeModel> => {
         let deferred = this.$q.defer<AttributeModel>();
-        this.restangular.one(componentId).one("attributes").one(attributeId).remove().then((response:any) => {
+        this.restangular.one(componentId).one("attributes").one(attributeId).remove().then((response: any) => {
             deferred.resolve(response);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
@@ -355,64 +361,64 @@ export class ComponentService implements IComponentService {
 
     // ------------------------------------------------ Component Instances API --------------------------------------------------//
 
-    public createComponentInstance = (componentId:string, componentInstance:ComponentInstance):ng.IPromise<ComponentInstance> => {
+    public createComponentInstance = (componentId: string, componentInstance: ComponentInstance): ng.IPromise<ComponentInstance> => {
         let deferred = this.$q.defer<ComponentInstance>();
-        this.restangular.one(componentId).one("resourceInstance").customPOST(JSON.stringify(componentInstance)).then((response:any) => {
-            let componentInstance:ComponentInstance = ComponentInstanceFactory.createComponentInstance(response);
+        this.restangular.one(componentId).one("resourceInstance").customPOST(JSON.stringify(componentInstance)).then((response: any) => {
+            let componentInstance: ComponentInstance = ComponentInstanceFactory.createComponentInstance(response);
             console.log("Component Instance created", componentInstance);
             deferred.resolve(componentInstance);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to create componentInstance. With Name: " + componentInstance.name);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateComponentInstance = (componentId:string, componentInstance:ComponentInstance):ng.IPromise<ComponentInstance> => {
+    public updateComponentInstance = (componentId: string, componentInstance: ComponentInstance): ng.IPromise<ComponentInstance> => {
         let deferred = this.$q.defer<ComponentInstance>();
-        this.restangular.one(componentId).one("resourceInstance").one(componentInstance.uniqueId).customPOST(JSON.stringify(componentInstance)).then((response:any) => {
-            let componentInstance:ComponentInstance = ComponentInstanceFactory.createComponentInstance(response);
+        this.restangular.one(componentId).one("resourceInstance").one(componentInstance.uniqueId).customPOST(JSON.stringify(componentInstance)).then((response: any) => {
+            let componentInstance: ComponentInstance = ComponentInstanceFactory.createComponentInstance(response);
             console.log("Component Instance was updated", componentInstance);
             deferred.resolve(componentInstance);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to update componentInstance. With ID: " + componentInstance.uniqueId + "Name: " + componentInstance.name);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateMultipleComponentInstances = (componentId:string, instances:Array<ComponentInstance>):ng.IPromise<Array<ComponentInstance>> => {
+    public updateMultipleComponentInstances = (componentId: string, instances: Array<ComponentInstance>): ng.IPromise<Array<ComponentInstance>> => {
         let deferred = this.$q.defer<Array<ComponentInstance>>();
-        this.restangular.one(componentId).one("resourceInstance/multipleComponentInstance").customPOST(JSON.stringify(instances)).then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance/multipleComponentInstance").customPOST(JSON.stringify(instances)).then((response: any) => {
             console.log("Multiple Component Instances was updated", response);
-            let updateInstances:Array<ComponentInstance> = new Array<ComponentInstance>();
-            _.forEach(response, (componentInstance:ComponentInstance) => {
-                let updatedComponentInstance:ComponentInstance = ComponentInstanceFactory.createComponentInstance(componentInstance);
+            let updateInstances: Array<ComponentInstance> = new Array<ComponentInstance>();
+            _.forEach(response, (componentInstance: ComponentInstance) => {
+                let updatedComponentInstance: ComponentInstance = ComponentInstanceFactory.createComponentInstance(componentInstance);
                 updateInstances.push(updatedComponentInstance);
             });
             deferred.resolve(updateInstances);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to update Multiple componentInstance.");
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public deleteComponentInstance = (componentId:string, componentInstanceId:string):ng.IPromise<ComponentInstance> => {
+    public deleteComponentInstance = (componentId: string, componentInstanceId: string): ng.IPromise<ComponentInstance> => {
         let deferred = this.$q.defer<ComponentInstance>();
         this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).remove().then(() => {
             console.log("Component Instance was deleted");
             deferred.resolve();
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to delete componentInstance. With ID: " + componentInstanceId);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public checkResourceInstanceVersionChange = (componentId:string, componentInstanceId:string, componentUid:string):ng.IPromise<ComponentInstance> => {
+    public checkResourceInstanceVersionChange = (componentId: string, componentInstanceId: string, componentUid: string): ng.IPromise<ComponentInstance> => {
         let deferred = this.$q.defer<ComponentInstance>();
-        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one(componentUid).one("checkForwardingPathOnVersionChange").get().then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one(componentUid).one("checkForwardingPathOnVersionChange").get().then((response: any) => {
             deferred.resolve(response);
         }, err => {
             deferred.reject(err);
@@ -420,85 +426,85 @@ export class ComponentService implements IComponentService {
         return deferred.promise;
     };
 
-    public changeResourceInstanceVersion = (componentId:string, componentInstanceId:string, componentUid:string):ng.IPromise<ComponentInstance> => {
+    public changeResourceInstanceVersion = (componentId: string, componentInstanceId: string, componentUid: string): ng.IPromise<ComponentInstance> => {
         let deferred = this.$q.defer<ComponentInstance>();
-        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one("changeVersion").customPOST({'componentUid': componentUid}).then((response:any) => {
-            let componentInstance:ComponentInstance = ComponentInstanceFactory.createComponentInstance(response);
+        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one("changeVersion").customPOST({ 'componentUid': componentUid }).then((response: any) => {
+            let componentInstance: ComponentInstance = ComponentInstanceFactory.createComponentInstance(response);
             deferred.resolve(componentInstance);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public downloadInstanceArtifact = (componentId:string, instanceId:string, artifactId:string):ng.IPromise<IFileDownload> => {
+    public downloadInstanceArtifact = (componentId: string, instanceId: string, artifactId: string): ng.IPromise<IFileDownload> => {
         let deferred = this.$q.defer<IFileDownload>();
-        this.restangular.one(componentId).one("resourceInstances").one(instanceId).one("artifacts").one(artifactId).get().then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstances").one(instanceId).one("artifacts").one(artifactId).get().then((response: any) => {
             deferred.resolve(response.plain());
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateInstanceArtifact = (componentId:string, instanceId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel> => {
+    public updateInstanceArtifact = (componentId: string, instanceId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel> => {
         let deferred = this.$q.defer<ArtifactModel>();
         let headerObj = {};
         if (artifact.payloadData) {
             headerObj = this.getHeaderMd5(artifact);
         }
-        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response: any) => {
             let newArtifact = new ArtifactModel(response);
             deferred.resolve(newArtifact);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public addInstanceArtifact = (componentId:string, instanceId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel> => {
+    public addInstanceArtifact = (componentId: string, instanceId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel> => {
         let deferred = this.$q.defer<ArtifactModel>();
         let headerObj = {};
         if (artifact.payloadData) {
             headerObj = this.getHeaderMd5(artifact);
         }
-        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response:any) => {
-            let artifact:ArtifactModel = new ArtifactModel(response.plain());
+        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response: any) => {
+            let artifact: ArtifactModel = new ArtifactModel(response.plain());
             deferred.resolve(artifact);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public deleteInstanceArtifact = (componentId:string, instanceId:string, artifactId:string, artifactLabel:string):ng.IPromise<ArtifactModel> => {
+    public deleteInstanceArtifact = (componentId: string, instanceId: string, artifactId: string, artifactLabel: string): ng.IPromise<ArtifactModel> => {
         let deferred = this.$q.defer<ArtifactModel>();
-        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").one(artifactId).remove({'operation': artifactLabel}).then((response:ArtifactModel) => {
+        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").one(artifactId).remove({ 'operation': artifactLabel }).then((response: ArtifactModel) => {
             deferred.resolve(response);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public uploadInstanceEnvFile = (componentId:string, instanceId:string, artifact:ArtifactModel):ng.IPromise<ArtifactModel> => {
+    public uploadInstanceEnvFile = (componentId: string, instanceId: string, artifact: ArtifactModel): ng.IPromise<ArtifactModel> => {
         let deferred = this.$q.defer<ArtifactModel>();
         let headerObj = {};
         if (artifact.payloadData) {
             headerObj = this.getHeaderMd5(artifact);
         }
-        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("artifacts").customPOST(JSON.stringify(artifact), artifact.uniqueId, {}, headerObj).then((response: any) => {
             let newArtifact = new ArtifactModel(response);
             deferred.resolve(newArtifact);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateInstanceProperties = (componentId:string, componentInstanceId:string, properties:PropertyModel[]):ng.IPromise<PropertyModel[]> => {
+    public updateInstanceProperties = (componentId: string, componentInstanceId: string, properties: PropertyModel[]): ng.IPromise<PropertyModel[]> => {
         let deferred = this.$q.defer<PropertyModel[]>();
-        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one("properties").customPOST(JSON.stringify(properties)).then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one("properties").customPOST(JSON.stringify(properties)).then((response: any) => {
             const newProperties = response.map((res) => {
                 const newProperty = new PropertyModel(res);
                 newProperty.readonly = true;
@@ -506,118 +512,118 @@ export class ComponentService implements IComponentService {
                 return newProperty;
             });
             deferred.resolve(newProperties);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public updateInstanceAttribute = (componentId:string, attribute:AttributeModel):ng.IPromise<AttributeModel> => {
+    public updateInstanceAttribute = (componentId: string, attribute: AttributeModel): ng.IPromise<AttributeModel> => {
         let deferred = this.$q.defer<AttributeModel>();
         let instanceId = attribute.resourceInstanceUniqueId;
-        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("attribute").customPOST(JSON.stringify(attribute)).then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance").one(instanceId).one("attribute").customPOST(JSON.stringify(attribute)).then((response: any) => {
             let newAttribute = new AttributeModel(response);
             newAttribute.readonly = true;
             newAttribute.resourceInstanceUniqueId = instanceId;
             deferred.resolve(newAttribute);
-        }, (err)=> {
+        }, (err) => {
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public createRelation = (componentId:string, link:RelationshipModel):ng.IPromise<RelationshipModel> => {
+    public createRelation = (componentId: string, link: RelationshipModel): ng.IPromise<RelationshipModel> => {
         let deferred = this.$q.defer<RelationshipModel>();
-        const linkPayload:RelationshipModel = new RelationshipModel(link);
+        const linkPayload: RelationshipModel = new RelationshipModel(link);
         linkPayload.relationships.forEach((rel) => {
             delete rel.capability;
             delete rel.requirement;
         });
-        this.restangular.one(componentId).one("resourceInstance").one("associate").customPOST(JSON.stringify(linkPayload)).then((response:any) => {
-            let relation:RelationshipModel = new RelationshipModel(response.plain());
+        this.restangular.one(componentId).one("resourceInstance").one("associate").customPOST(JSON.stringify(linkPayload)).then((response: any) => {
+            let relation: RelationshipModel = new RelationshipModel(response.plain());
             console.log("Link created successfully ", relation);
             deferred.resolve(relation);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to create Link From: " + link.fromNode + "To: " + link.toNode);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public deleteRelation = (componentId:string, link:RelationshipModel):ng.IPromise<RelationshipModel> => {
+    public deleteRelation = (componentId: string, link: RelationshipModel): ng.IPromise<RelationshipModel> => {
         let deferred = this.$q.defer<RelationshipModel>();
-        const linkPayload:RelationshipModel = new RelationshipModel(link);
+        const linkPayload: RelationshipModel = new RelationshipModel(link);
         linkPayload.relationships.forEach((rel) => {
             delete rel.capability;
             delete rel.requirement;
         });
-        this.restangular.one(componentId).one("resourceInstance").one("dissociate").customPUT(JSON.stringify(linkPayload)).then((response:any) => {
-            let relation:RelationshipModel = new RelationshipModel(response);
+        this.restangular.one(componentId).one("resourceInstance").one("dissociate").customPUT(JSON.stringify(linkPayload)).then((response: any) => {
+            let relation: RelationshipModel = new RelationshipModel(response);
             console.log("Link deleted successfully ", relation);
             deferred.resolve(relation);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to delete Link From: " + link.fromNode + "To: " + link.toNode);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public fetchRelation = (componentId:string, linkId:string):ng.IPromise<RelationshipModel> => {
+    public fetchRelation = (componentId: string, linkId: string): ng.IPromise<RelationshipModel> => {
         let deferred = this.$q.defer<RelationshipModel>();
-        this.restangular.one(componentId).one("relationId").one(linkId).get().then((response:any) => {
-            let relation:RelationshipModel = new RelationshipModel(response);
+        this.restangular.one(componentId).one("relationId").one(linkId).get().then((response: any) => {
+            let relation: RelationshipModel = new RelationshipModel(response);
             console.log("Link fetched successfully ", relation);
             deferred.resolve(relation);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to fetch Link Id: " + linkId);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public getRequirementsCapabilities = (componentId:string):ng.IPromise<any> => {
+    public getRequirementsCapabilities = (componentId: string): ng.IPromise<any> => {
         let deferred = this.$q.defer();
-        this.restangular.one(componentId).one("requirmentsCapabilities").get().then((response:any) => {
+        this.restangular.one(componentId).one("requirmentsCapabilities").get().then((response: any) => {
             console.log("Component requirement capabilities recived: ", response);
             deferred.resolve(response);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to get requirements & capabilities");
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public getModuleForDisplay = (componentId:string, moduleId:string):ng.IPromise<DisplayModule> => {
+    public getModuleForDisplay = (componentId: string, moduleId: string): ng.IPromise<DisplayModule> => {
         let deferred = this.$q.defer<DisplayModule>();
-        this.restangular.one(componentId).one("groups").one(moduleId).get().then((response:any) => {
+        this.restangular.one(componentId).one("groups").one(moduleId).get().then((response: any) => {
             console.log("module loaded successfully: ", response);
-            let module:DisplayModule = new DisplayModule(response);
+            let module: DisplayModule = new DisplayModule(response);
             deferred.resolve(module);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to get module with id: ", moduleId);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public getComponentInstanceModule = (componentId:string, componentInstanceId:string, moduleId:string):ng.IPromise<DisplayModule> => {
+    public getComponentInstanceModule = (componentId: string, componentInstanceId: string, moduleId: string): ng.IPromise<DisplayModule> => {
         let deferred = this.$q.defer<DisplayModule>();
-        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one("groupInstance").one(moduleId).get().then((response:any) => {
+        this.restangular.one(componentId).one("resourceInstance").one(componentInstanceId).one("groupInstance").one(moduleId).get().then((response: any) => {
             console.log("module loaded successfully: ", response);
-            let module:DisplayModule = new DisplayModule(response);
+            let module: DisplayModule = new DisplayModule(response);
             deferred.resolve(module);
-        }, (err)=> {
+        }, (err) => {
             console.log("Failed to get module with id: ", moduleId);
             deferred.reject(err);
         });
         return deferred.promise;
     };
 
-    public getComponentInstancesFilteredByInputsAndProperties = (componentId:string, searchText?:string):ng.IPromise<Array<ComponentInstance>> => {
+    public getComponentInstancesFilteredByInputsAndProperties = (componentId: string, searchText?: string): ng.IPromise<Array<ComponentInstance>> => {
         let deferred = this.$q.defer<Array<ComponentInstance>>();
-        this.restangular.one(componentId).one("componentInstances").get({'searchText': searchText}).then((response:any) => {
+        this.restangular.one(componentId).one("componentInstances").get({ 'searchText': searchText }).then((response: any) => {
             console.log("component instances return successfully: ", response);
-            let componentInstances:Array<ComponentInstance> = CommonUtils.initComponentInstances(response);
+            let componentInstances: Array<ComponentInstance> = CommonUtils.initComponentInstances(response);
             deferred.resolve(componentInstances);
         }, (err) => {
             console.log("Failed to get component instances of component with id: " + componentId);
@@ -627,13 +633,13 @@ export class ComponentService implements IComponentService {
         return deferred.promise;
     };
 
-    public getComponentInstanceInputs = (componentId:string, instanceId:string, originComponentUid):ng.IPromise<Array<InputModel>> => {
+    public getComponentInstanceInputs = (componentId: string, instanceId: string, originComponentUid): ng.IPromise<Array<InputModel>> => {
 
         let deferred = this.$q.defer<Array<InputModel>>();
-        this.restangular.one(componentId).one("componentInstances").one(instanceId).one(originComponentUid).one("inputs").get().then((response:any) => {
+        this.restangular.one(componentId).one("componentInstances").one(instanceId).one(originComponentUid).one("inputs").get().then((response: any) => {
             console.log("component instance input return successfully: ", response);
-            let inputsArray:Array<InputModel> = new Array<InputModel>();
-            _.forEach(response, (inputObj:InputModel) => {
+            let inputsArray: Array<InputModel> = new Array<InputModel>();
+            _.forEach(response, (inputObj: InputModel) => {
                 inputsArray.push(new InputModel(inputObj));
             });
             deferred.resolve(inputsArray);
@@ -645,13 +651,13 @@ export class ComponentService implements IComponentService {
         return deferred.promise;
     };
 
-    public getComponentInputs = (componentId:string):ng.IPromise<Array<InputModel>> => {
+    public getComponentInputs = (componentId: string): ng.IPromise<Array<InputModel>> => {
 
         let deferred = this.$q.defer<Array<InputModel>>();
-        this.restangular.one(componentId).one("inputs").get().then((response:any) => {
+        this.restangular.one(componentId).one("inputs").get().then((response: any) => {
             console.log("component inputs return successfully: ", response);
-            let inputsArray:Array<InputModel> = new Array<InputModel>();
-            _.forEach(response, (inputObj:InputModel) => {
+            let inputsArray: Array<InputModel> = new Array<InputModel>();
+            _.forEach(response, (inputObj: InputModel) => {
                 inputsArray.push(new InputModel(inputObj));
             });
             deferred.resolve(inputsArray);
@@ -663,13 +669,13 @@ export class ComponentService implements IComponentService {
         return deferred.promise;
     };
 
-    public getComponentInstanceInputProperties = (componentId:string, instanceId:string, inputId:string):ng.IPromise<Array<PropertyModel>> => {
+    public getComponentInstanceInputProperties = (componentId: string, instanceId: string, inputId: string): ng.IPromise<Array<PropertyModel>> => {
 
         let deferred = this.$q.defer<Array<PropertyModel>>();
-        this.restangular.one(componentId).one("componentInstances").one(instanceId).one(inputId).one("properties").get().then((response:any) => {
+        this.restangular.one(componentId).one("componentInstances").one(instanceId).one(inputId).one("properties").get().then((response: any) => {
             console.log("component instance input properties return successfully: ", response);
-            let propertiesArray:Array<PropertyModel> = new Array<PropertyModel>();
-            _.forEach(response, (propertyObj:PropertyModel) => {
+            let propertiesArray: Array<PropertyModel> = new Array<PropertyModel>();
+            _.forEach(response, (propertyObj: PropertyModel) => {
                 propertiesArray.push(new PropertyModel(propertyObj));
             });
             deferred.resolve(propertiesArray);
@@ -682,13 +688,13 @@ export class ComponentService implements IComponentService {
     };
 
 
-    public getComponentInstanceProperties = (componentId:string, instanceId:string):ng.IPromise<Array<PropertyModel>> => {
+    public getComponentInstanceProperties = (componentId: string, instanceId: string): ng.IPromise<Array<PropertyModel>> => {
 
         let deferred = this.$q.defer<Array<PropertyModel>>();
-        this.restangular.one(componentId).one("componentInstances").one(instanceId).one("properties").get().then((response:any) => {
+        this.restangular.one(componentId).one("componentInstances").one(instanceId).one("properties").get().then((response: any) => {
             console.log("component instance  properties return successfully: ", response);
-            let propertiesArray:Array<PropertyModel> = new Array<PropertyModel>();
-            _.forEach(response, (propertyObj:PropertyModel) => {
+            let propertiesArray: Array<PropertyModel> = new Array<PropertyModel>();
+            _.forEach(response, (propertyObj: PropertyModel) => {
                 propertiesArray.push(new PropertyModel(propertyObj));
             });
             deferred.resolve(propertiesArray);
@@ -700,12 +706,12 @@ export class ComponentService implements IComponentService {
         return deferred.promise;
     };
 
-    public updateGroupMetadata = (componentId:string, group:Module):ng.IPromise<Module> => {
+    public updateGroupMetadata = (componentId: string, group: Module): ng.IPromise<Module> => {
 
         let deferred = this.$q.defer<Module>();
-        this.restangular.one(componentId).one("groups").one(group.uniqueId).one("metadata").customPUT(JSON.stringify(group)).then((response:Module) => {
+        this.restangular.one(componentId).one("groups").one(group.uniqueId).one("metadata").customPUT(JSON.stringify(group)).then((response: Module) => {
             console.log("group metadata updated successfully: ", response);
-            let updatedGroup:Module = new Module(response);
+            let updatedGroup: Module = new Module(response);
 
             deferred.resolve(updatedGroup);
         }, (err) => {
@@ -716,78 +722,128 @@ export class ComponentService implements IComponentService {
         return deferred.promise;
     };
 
-    public getComponentInputInputsAndProperties = (serviceId:string, inputId:string):ng.IPromise<InputsAndProperties> => {
+    public getComponentInputInputsAndProperties = (serviceId: string, inputId: string): ng.IPromise<InputsAndProperties> => {
         let defer = this.$q.defer<InputsAndProperties>();
-        this.restangular.one(serviceId).one("inputs").one(inputId).get().then((response:InputsAndProperties) => {
+        this.restangular.one(serviceId).one("inputs").one(inputId).get().then((response: InputsAndProperties) => {
 
-            let inputsArray:Array<InputModel> = new Array<InputModel>();
-            _.forEach(response.inputs, (inputObj:InputModel) => {
+            let inputsArray: Array<InputModel> = new Array<InputModel>();
+            _.forEach(response.inputs, (inputObj: InputModel) => {
                 inputsArray.push(new InputModel(inputObj));
             });
 
-            let propertiesArray:Array<PropertyModel> = new Array<PropertyModel>();
-            _.forEach(response.properties, (property:PropertyModel) => {
+            let propertiesArray: Array<PropertyModel> = new Array<PropertyModel>();
+            _.forEach(response.properties, (property: PropertyModel) => {
                 propertiesArray.push(new PropertyModel(property));
             });
 
             defer.resolve(new InputsAndProperties(inputsArray, propertiesArray));
-        }, (err)=> {
+        }, (err) => {
             console.log("failed to get inputs of input : ", err);
             defer.reject(err);
         });
         return defer.promise;
     };
 
-    createInputsFromInstancesInputsProperties = (resourceId:string, instancePropertyMap:InstancesInputsPropertiesMap):ng.IPromise<Array<PropertyModel>> => {
+    public batchDeleteComponentInstance = (componentId: string, componentInstanceIdList: Array<string>): ng.IPromise<any> => {
+        let deferred = this.$q.defer();
+        this.restangular.one(componentId).one("batchDeleteResourceInstances").customPOST(JSON.stringify(componentInstanceIdList)).then((response: any) => {
+            deferred.resolve(response.deleteFailedIds);
+        }, (err) => {
+            console.log("Failed to delete componentInstanceIdList. With IDs: " + componentInstanceIdList);
+            deferred.reject(err);
+        });
+        return deferred.promise;
+    };
+
+    public batchDeleteRelation = (componentId: string, links: Array<RelationshipModel>): ng.IPromise<Array<RelationshipModel>> => {
+        let deferred = this.$q.defer<Array<RelationshipModel>>();
+
+        _.forEach(links, (link: RelationshipModel) => {
+            let linkPayload: RelationshipModel = new RelationshipModel(link);
+            linkPayload.relationships.forEach((rel) => {
+                delete rel.capability;
+                delete rel.requirement;
+            });
+        });
+
+        this.restangular.one(componentId).one("resourceInstance").one("batchDissociate").customPUT(JSON.stringify(links)).then((response: any) => {
+            console.log("Link batch deleted successfully result is ", response);
+            let relationshipModelArray: Array<RelationshipModel> = new Array<RelationshipModel>();
+            _.forEach(response, (relationshipModelObj: RelationshipModel) => {
+                relationshipModelArray.push(new RelationshipModel(relationshipModelObj));
+            });
+            deferred.resolve(relationshipModelArray);
+            //deferred.resolve(response);
+        }, (err) => {
+            console.log("Failed to batch delete links", links);
+            deferred.reject(err);
+        });
+        return deferred.promise;
+    }
+
+    public pasteMenuComponentInstance = (componentId: string, srcComponentId: string, msg: string): ng.IPromise<string> => {
+        let deferred = this.$q.defer<string>();
+        this.restangular.one(componentId).one("copyComponentInstance").one(srcComponentId).customPOST(msg).then((response: any) => {
+            deferred.resolve(response);
+        }, (err) => {
+            deferred.reject(err);
+        });
+        return deferred.promise;
+
+    };
+
+
+
+    createInputsFromInstancesInputsProperties = (resourceId: string, instancePropertyMap: InstancesInputsPropertiesMap): ng.IPromise<Array<PropertyModel>> => {
         let defer = this.$q.defer<Array<PropertyModel>>();
-        this.restangular.one(resourceId).one("create/properties").customPOST(instancePropertyMap).then((response:any) => {
-            let inputsArray:Array<PropertyModel> = new Array<PropertyModel>();
-            _.forEach(response, (inputObj:PropertyModel) => {
+        this.restangular.one(resourceId).one("create/properties").customPOST(instancePropertyMap).then((response: any) => {
+            let inputsArray: Array<PropertyModel> = new Array<PropertyModel>();
+            _.forEach(response, (inputObj: PropertyModel) => {
                 inputsArray.push(new PropertyModel(inputObj));
             });
             defer.resolve(inputsArray);
-        }, (err)=> {
+        }, (err) => {
             console.log("failed to create service inputs from VF instances inputs : ", err);
             defer.reject(err);
         });
         return defer.promise;
     };
 
-    createInputsFromInstancesInputs = (serviceId:string, instancesMap:InstancesInputsPropertiesMap):ng.IPromise<Array<InputModel>> => {
+    createInputsFromInstancesInputs = (serviceId: string, instancesMap: InstancesInputsPropertiesMap): ng.IPromise<Array<InputModel>> => {
         let defer = this.$q.defer<Array<InputModel>>();
-        this.restangular.one(serviceId).one("create/inputs").customPOST(instancesMap).then((response:any) => {
-            let inputsArray:Array<InputModel> = new Array<InputModel>();
-            _.forEach(response, (inputObj:InputModel) => {
+        this.restangular.one(serviceId).one("create/inputs").customPOST(instancesMap).then((response: any) => {
+            let inputsArray: Array<InputModel> = new Array<InputModel>();
+            _.forEach(response, (inputObj: InputModel) => {
                 inputsArray.push(new InputModel(inputObj));
             });
             defer.resolve(inputsArray);
-        }, (err)=> {
+        }, (err) => {
             console.log("failed to create service inputs from VF instances inputs : ", err);
             defer.reject(err);
         });
         return defer.promise;
     };
 
-    deleteComponentInput = (serviceId:string, inputId:string):ng.IPromise<InputModel> => {
+    deleteComponentInput = (serviceId: string, inputId: string): ng.IPromise<InputModel> => {
         let defer = this.$q.defer<InputModel>();
-        this.restangular.one(serviceId).one("delete").one(inputId).one("input").remove().then((response:any) => {
+        this.restangular.one(serviceId).one("delete").one(inputId).one("input").remove().then((response: any) => {
             let inputToDelete = new InputModel(response);
             defer.resolve(inputToDelete);
-        }, (err)=> {
+        }, (err) => {
             console.log("failed to delete input from service: ", err);
             defer.reject(err);
         });
         return defer.promise;
     };
 
-    private getHeaderMd5 = (object:any):any => {
+    private getHeaderMd5 = (object: any): any => {
         let headerObj = {};
         // This is ugly workaround!!!
         // The md5 result is not correct if we do not add the line JSON.stringify(resource); twice.
         JSON.stringify(object);
-        let componentString:string = JSON.stringify(object);
+        let componentString: string = JSON.stringify(object);
         let md5Result = md5(componentString).toLowerCase();
-        headerObj = {'Content-MD5': this.$base64.encode(md5Result)};
+        headerObj = { 'Content-MD5': this.$base64.encode(md5Result) };
         return headerObj;
     };