adding operations for kms.company and kms.company_developer
diff --git a/listener.go b/listener.go
index de80a9b..ade4e1d 100644
--- a/listener.go
+++ b/listener.go
@@ -248,6 +248,107 @@
 }
 
 /*
+ * Performs Bulk insert of Company Developers
+ */
+func insertCompanyDevelopers(rows []common.Row, txn *sql.Tx) bool {
+	var scope, EntityIdentifier, DeveloperId, tenantId, CreatedBy, LastModifiedBy string
+	var CreatedAt, LastModifiedAt int64
+
+	prep, err := txn.Prepare("INSERT INTO COMPANY_DEVELOPER (_change_selector,id,tenant_id,developer_id,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
+	if err != nil {
+		log.Error("INSERT COMPANY_DEVELOPER Failed: ", err)
+		return false
+	}
+	defer prep.Close()
+	for _, ele := range rows {
+
+		ele.Get("_change_selector", &scope)
+		ele.Get("id", &EntityIdentifier)
+		ele.Get("tenant_id", &tenantId)
+		ele.Get("developer_id", &DeveloperId)
+		ele.Get("created_at", &CreatedAt)
+		ele.Get("created_by", &CreatedBy)
+		ele.Get("updated_at", &LastModifiedAt)
+		ele.Get("updated_by", &LastModifiedBy)
+
+		/* Mandatory params check */
+		if EntityIdentifier == "" || scope == "" || tenantId == "" {
+			log.Error("INSERT COMPANY_DEVELOPER: i/p args missing")
+			return false
+		}
+		_, err = txn.Stmt(prep).Exec(
+			scope,
+			EntityIdentifier,
+			tenantId,
+			CreatedAt,
+			CreatedBy,
+			LastModifiedAt,
+			LastModifiedBy)
+
+		if err != nil {
+			log.Error("INSERT COMPANY_DEVELOPER Failed: (", EntityIdentifier, ", ", scope, ")", err)
+			return false
+		} else {
+			log.Debug("INSERT COMPANY_DEVELOPER Success: (", EntityIdentifier, ", ", scope, ")")
+		}
+	}
+	return true
+}
+
+/*
+ * Performs Bulk insert of Companies
+ */
+func insertCompanies(rows []common.Row, txn *sql.Tx) bool {
+	var scope, EntityIdentifier, Name, DisplayName, Status, tenantId, CreatedBy, LastModifiedBy string
+	var CreatedAt, LastModifiedAt int64
+
+	prep, err := txn.Prepare("INSERT INTO COMAPNY (_change_selector,id,tenant_id,status,name,display_name,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10);")
+	if err != nil {
+		log.Error("INSERT COMPANY Failed: ", err)
+		return false
+	}
+	defer prep.Close()
+	for _, ele := range rows {
+
+		ele.Get("_change_selector", &scope)
+		ele.Get("id", &EntityIdentifier)
+		ele.Get("tenant_id", &tenantId)
+		ele.Get("status", &Status)
+		ele.Get("name", &Name)
+		ele.Get("display_name", &DisplayName)
+		ele.Get("created_at", &CreatedAt)
+		ele.Get("created_by", &CreatedBy)
+		ele.Get("updated_at", &LastModifiedAt)
+		ele.Get("updated_by", &LastModifiedBy)
+
+		/* Mandatory params check */
+		if EntityIdentifier == "" || scope == "" || tenantId == "" {
+			log.Error("INSERT COMPANY: i/p args missing")
+			return false
+		}
+		_, err = txn.Stmt(prep).Exec(
+			scope,
+			EntityIdentifier,
+			tenantId,
+			Status,
+			Name,
+			DisplayName,
+			CreatedAt,
+			CreatedBy,
+			LastModifiedAt,
+			LastModifiedBy)
+
+		if err != nil {
+			log.Error("INSERT COMPANY Failed: (", EntityIdentifier, ", ", scope, ")", err)
+			return false
+		} else {
+			log.Debug("INSERT COMPANY Success: (", EntityIdentifier, ", ", scope, ")")
+		}
+	}
+	return true
+}
+
+/*
  * Performs Bulk insert of API products
  */
 func insertAPIproducts(rows []common.Row, txn *sql.Tx) bool {
@@ -404,7 +505,34 @@
 			case common.Delete:
 				ok = deleteObject("APP", payload.OldRow, txn)
 			}
+		case "kms.company":
+			switch payload.Operation {
+			case common.Insert:
+				rows = append(rows, payload.NewRow)
+				ok = insertApplications(rows, txn)
 
+			case common.Update:
+				ok = deleteObject("COMPANY", payload.OldRow, txn)
+				rows = append(rows, payload.NewRow)
+				ok = insertApplications(rows, txn)
+
+			case common.Delete:
+				ok = deleteObject("COMPANY", payload.OldRow, txn)
+			}
+		case "kms.company_developer":
+			switch payload.Operation {
+			case common.Insert:
+				rows = append(rows, payload.NewRow)
+				ok = insertApplications(rows, txn)
+
+			case common.Update:
+				ok = deleteObject("COMPANY_DEVELOPER", payload.OldRow, txn)
+				rows = append(rows, payload.NewRow)
+				ok = insertApplications(rows, txn)
+
+			case common.Delete:
+				ok = deleteObject("COMPANY_DEVELOPER", payload.OldRow, txn)
+			}
 		case "kms.app_credential":
 			switch payload.Operation {
 			case common.Insert:
diff --git a/listener_test.go b/listener_test.go
index 8305836..c1d66d5 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -50,6 +50,45 @@
 				},
 			}
 
+			companyItems := common.Row{
+				"id": {
+					Value: "ch_company_id_2",
+				},
+				"status": {
+					Value: "Active",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+				"name": {
+					Value: "test_company_name0",
+				},
+				"display_name": {
+					Value: "test_company_display_name0",
+				},
+			}
+
+			companyDeveloperItems := common.Row{
+				"id": {
+					Value: "ch_developer_id_2",
+				},
+				"tenant_id": {
+					Value: "tenant_id_0",
+				},
+				"_change_selector": {
+					Value: "test_org0",
+				},
+				"company_id": {
+					Value: "ch_company_id_2",
+				},
+				"developer_id": {
+					Value: "ch_developer_id_2",
+				},
+			}
+
 			/* APP */
 			appItems := common.Row{
 				"id": {
@@ -136,6 +175,16 @@
 					NewRow:    mpItems,
 					Operation: 1,
 				},
+				{
+					Table:     "kms.company",
+					NewRow:    companyItems,
+					Operation: 1,
+				},
+				{
+					Table:     "kms.company_developer",
+					NewRow:    companyDeveloperItems,
+					Operation: 1,
+				},
 			}
 
 			h := &test_handler{
@@ -231,6 +280,45 @@
 			},
 		}
 
+		companyItemsOld := common.Row{
+			"id": {
+				Value: "ch_company_id_0",
+			},
+			"status": {
+				Value: "Active",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+			"name": {
+				Value: "test_company_name0",
+			},
+			"display_name": {
+				Value: "test_company_display_name0",
+			},
+		}
+
+		companyDeveloperItemsOld := common.Row{
+			"id": {
+				Value: "ch_developer_id_0",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+			"company_id": {
+				Value: "ch_company_id_0",
+			},
+			"developer_id": {
+				Value: "ch_developer_id_0",
+			},
+		}
+
 		/* CRED */
 		credItemsOld := common.Row{
 			"id": {
@@ -308,6 +396,45 @@
 			},
 		}
 
+		companyItemsNew := common.Row{
+			"id": {
+				Value: "ch_company_id_1",
+			},
+			"status": {
+				Value: "Active",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+			"name": {
+				Value: "test_company_name0",
+			},
+			"display_name": {
+				Value: "test_company_display_name0",
+			},
+		}
+
+		companyDeveloperItemsNew := common.Row{
+			"id": {
+				Value: "ch_developer_id_1",
+			},
+			"tenant_id": {
+				Value: "tenant_id_0",
+			},
+			"_change_selector": {
+				Value: "test_org0",
+			},
+			"company_id": {
+				Value: "ch_company_id_1",
+			},
+			"developer_id": {
+				Value: "ch_developer_id_1",
+			},
+		}
+
 		/* APP */
 		appItemsNew := common.Row{
 			"id": {
@@ -380,6 +507,16 @@
 				Operation: 1,
 			},
 			{
+				Table:     "kms.company",
+				NewRow:    companyItemsOld,
+				Operation: 1,
+			},
+			{
+				Table:     "kms.company_developer",
+				NewRow:    companyDeveloperItemsOld,
+				Operation: 1,
+			},
+			{
 				Table:     "kms.app",
 				NewRow:    appItemsOld,
 				Operation: 1,
@@ -410,6 +547,18 @@
 				Operation: 2,
 			},
 			{
+				Table:     "kms.company",
+				OldRow:    companyItemsOld,
+				NewRow:    companyItemsNew,
+				Operation: 2,
+			},
+			{
+				Table:     "kms.company_developer",
+				OldRow:    companyDeveloperItemsOld,
+				NewRow:    companyDeveloperItemsNew,
+				Operation: 2,
+			},
+			{
 				Table:     "kms.app",
 				OldRow:    appItemsOld,
 				NewRow:    appItemsNew,
@@ -461,7 +610,6 @@
 		apid.Events().Emit("ApigeeSync", &event2)
 		apid.Events().Emit("ApigeeSync", &common.ChangeList{})
 	})
-
 })
 
 type test_handler struct {