Catalog alignment

Issue-ID: SDC-2724
Signed-off-by: ys9693 <ys9693@att.com>
Change-Id: I52b4aacb58cbd432ca0e1ff7ff1f7dd52099c6fe
diff --git a/catalog-ui/src/app/models/capability.ts b/catalog-ui/src/app/models/capability.ts
index 4a4f821..f365dc4 100644
--- a/catalog-ui/src/app/models/capability.ts
+++ b/catalog-ui/src/app/models/capability.ts
@@ -7,9 +7,9 @@
  * 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.
@@ -22,30 +22,23 @@
  * Created by obarda on 4/20/2016.
  */
 'use strict';
-import * as _ from "lodash";
-import {PropertyModel} from "./properties";
-import {Requirement} from "./requirement";
+import * as _ from 'lodash';
+import { PropertyModel } from './properties';
 
-export interface RequirementCapabilityModel{};
-//this is an object contains keys, when each key has matching array.
+export interface RequirementCapabilityModel {}
+
+// this is an object contains keys, when each key has matching array.
 // for example: key = tosca.capabilities.network.Linkable and the match array is array of capabilities objects
 export class CapabilitiesGroup {
-    constructor(capabilityGroupObj?:CapabilitiesGroup) {
-        _.forEach(capabilityGroupObj, (capabilitiesArrayObj:Array<Capability>, instance) => {
+    constructor(capabilityGroupObj?: CapabilitiesGroup) {
+        _.forEach(capabilityGroupObj, (capabilitiesArrayObj: Capability[], instance) => {
             this[instance] = [];
-            _.forEach(capabilitiesArrayObj, (capability:Capability):void => {
+            _.forEach(capabilitiesArrayObj, (capability: Capability): void => {
                 this[instance].push(new Capability(capability));
             });
         });
     }
-
-    public findValueByKey(keySubstring:string):Array<Capability> {
-        let key:string = _.find(Object.keys(this), (key)=> {
-            return _.includes(key.toLowerCase(), keySubstring);
-        });
-        return this[key];
-    }
-
+    
     public static getFlattenedCapabilities(capabilitiesGroup: CapabilitiesGroup): Array<Capability> {
         return _.reduce(
             _.toArray(capabilitiesGroup),
@@ -54,29 +47,30 @@
     }
 }
 
-export class Capability implements RequirementCapabilityModel{
+export class Capability implements RequirementCapabilityModel {
 
-    //server data
-    name:string;
-    ownerId:string;
-    ownerName:string;
-    type:string;
-    uniqueId:string;
-    capabilitySources:Array<String>;
-    leftOccurrences:string;
-    minOccurrences: number;
-    maxOccurrences:string;
-    description:string;
-    validSourceTypes:Array<string>;
-    properties:Array<PropertyModel>;
-    //custom
-    selected:boolean;
-    filterTerm:string;
+    // server data
+    name: string;
+    ownerId: string;
+    ownerName: string;
+    type: string;
+    uniqueId: string;
+    capabilitySources: string[];
+    leftOccurrences: string;
+    minOccurrences: string | number;
+    maxOccurrences: string;
+    description: string;
+    validSourceTypes: string[];
+    properties: PropertyModel[];
 
-    constructor(capability?:Capability) {
+    // custom
+    selected: boolean;
+    filterTerm: string;
+
+    constructor(capability?: Capability) {
 
         if (capability) {
-            //server data
+            // server data
             this.name = capability.name;
             this.ownerId = capability.ownerId;
             this.ownerName = capability.ownerName;
@@ -95,41 +89,50 @@
         }
     }
 
-    public getTitle():string {
+    public getTitle(): string {
         return this.ownerName + ': ' + this.name;
     }
 
-    public getFullTitle():string {
-        let maxOccurrences:string = this.maxOccurrences === 'UNBOUNDED' ? '∞' : this.maxOccurrences;
+    public getFullTitle(): string {
+        const maxOccurrences: string = this.maxOccurrences === 'UNBOUNDED' ? '∞' : this.maxOccurrences;
         return this.getTitle() + ': [' + this.minOccurrences + ', ' + maxOccurrences + ']';
     }
 
-    public toJSON = ():any => {
+    public toJSON = (): any => {
         this.selected = undefined;
         this.filterTerm = undefined;
         return this;
-    };
-
-    private initFilterTerm = ():void => {
-        this.filterTerm = this.name + " " +
-            (this.type ? (this.type.replace("tosca.capabilities.", "") + " " ) : "") +
-            (this.description || "") + " " +
-            (this.ownerName || "") + " " +
-            (this.validSourceTypes ? (this.validSourceTypes.join(',') + " ") : "") +
-            this.minOccurrences + "," + this.maxOccurrences;
-        if (this.properties && this.properties.length) {
-            _.forEach(this.properties, (prop:PropertyModel)=> {
-                this.filterTerm += " " + prop.name +
-                    " " + (prop.description || "") +
-                    " " + prop.type +
-                    (prop.schema && prop.schema.property ? (" " + prop.schema.property.type) : "");
-            });
-        }
     }
 
     public isFulfilled() {
         return parseInt(this.leftOccurrences) === 0;
     }
+
+    private initFilterTerm = (): void => {
+        this.filterTerm = this.name + ' ' +
+            (this.type ? (this.type.replace('tosca.capabilities.', '') + ' ' ) : '') +
+            (this.description || '') + ' ' +
+            (this.ownerName || '') + ' ' +
+            (this.validSourceTypes ? (this.validSourceTypes.join(',') + ' ') : '') +
+            this.minOccurrences + ',' + this.maxOccurrences;
+        if (this.properties && this.properties.length) {
+            _.forEach(this.properties, (prop: PropertyModel) => {
+                this.filterTerm += ' ' + prop.name +
+                    ' ' + (prop.description || '') +
+                    ' ' + prop.type +
+                    (prop.schema && prop.schema.property ? (' ' + prop.schema.property.type) : '');
+            });
+        }
+    }
+}
+
+export class CapabilityUI extends Capability {
+    isCreatedManually: boolean;
+
+    constructor(input: Capability, componentUniqueId: string) {
+        super(input);
+        this.isCreatedManually = input.ownerId === componentUniqueId;
+    }
 }