Commit 094f713d authored by Ikram Haq's avatar Ikram Haq
Browse files

Update the individual Distance Subscriptions

parent 673c4e23
Loading
Loading
Loading
Loading
+211 −202
Original line number Diff line number Diff line
@@ -810,7 +810,7 @@ func checkNotificationDistancePeriodicTrigger1() {
	defer mutex.Unlock()
	//check all that applies
	for subsId, distanceCheck := range distanceSubscriptionMap1 {
		if distanceCheck != nil && distanceCheck.Subscription != nil {
		// if distanceCheck != nil && distanceCheck.Subscription != nil {
		// if distanceCheck.Subscription.Count == 0 || (distanceCheck.Subscription.Count != 0 && distanceCheck.NbNotificationsSent < distanceCheck.Subscription.Count) {
		// 	if distanceCheck.NextTts != 0 {
		// 		distanceCheck.NextTts--
@@ -957,10 +957,6 @@ func checkNotificationDistancePeriodicTrigger1() {
		}
	}
}
}

// }

func checkNotificationDistancePeriodicTrigger() {

	//only check if there is at least one subscription
@@ -2397,19 +2393,27 @@ func distanceSubDelete(w http.ResponseWriter, r *http.Request) {
func distanceSubListGet(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")

	var response InlineNotificationSubscriptionList
	var distanceSubList NotificationSubscriptionList
	distanceSubList.ResourceURL = &LinkType{}
	distanceSubList.ResourceURL.Href = hostUrl.String() + basePath + "subscriptions/distance"
	response.NotificationSubscriptionList = &distanceSubList
	var response []InlineNotificationSubscriptionList
	var subscriptions []Subscription
	// distanceSubList.ResourceURL = &LinkType{}
	// distanceSubList.ResourceURL.Href = hostUrl.String() + basePath + "subscriptions/distance"
	// response.NotificationSubscriptionList = &distanceSubList

	keyName := baseKey + typeDistanceSubscription + "*"
	err := rc.ForEachJSONEntry(keyName, populateDistanceList, &distanceSubList)
	err := rc.ForEachJSONEntry(keyName, populateDistanceList, &subscriptions)
	if err != nil {
		log.Error(err.Error())
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	response = append(response, InlineNotificationSubscriptionList{
		NotificationSubscriptionList: &NotificationSubscriptionList{
			Subscription: subscriptions,
			ResourceURL: &LinkType{
				Href: hostUrl.String() + basePath + "subscriptions/distance",
			},
		},
	})

	jsonResponse, err := json.Marshal(response)
	if err != nil {
@@ -2425,9 +2429,9 @@ func distanceSubGet(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)

	var response InlineDistanceNotificationSubscription
	var distanceSub DistanceNotificationSubscription
	response.DistanceNotificationSubscription = &distanceSub
	var response InlineUserDistanceSubscription
	var distanceSub UserDistanceSubscription
	response.UserDistanceSubscription = &distanceSub

	jsonDistanceSub, _ := rc.JSONGetEntry(baseKey+typeDistanceSubscription+":"+vars["subscriptionId"], ".")
	if jsonDistanceSub == "" {
@@ -2490,6 +2494,7 @@ func distanceSubPOST_test(w http.ResponseWriter, r *http.Request) {
		errHandlerProblemDetails(w, "Mandatory MonitoredAddress parameter not present", http.StatusBadRequest)
		return
	}
	distanceSub.SubscriptionType = "userDistanceSubscription"
	newSubsId := nextDistanceSubscriptionIdAvailable
	nextDistanceSubscriptionIdAvailable++
	subsIdStr := strconv.Itoa(newSubsId)
@@ -2582,9 +2587,9 @@ func distanceSubPost(w http.ResponseWriter, r *http.Request) {
func distanceSubPut(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	vars := mux.Vars(r)
	var response InlineDistanceNotificationSubscription
	var response InlineUserDistanceSubscription

	var body InlineDistanceNotificationSubscription
	var body InlineUserDistanceSubscription
	decoder := json.NewDecoder(r.Body)
	err := decoder.Decode(&body)
	if err != nil {
@@ -2592,7 +2597,7 @@ func distanceSubPut(w http.ResponseWriter, r *http.Request) {
		errHandlerProblemDetails(w, err.Error(), http.StatusInternalServerError)
		return
	}
	distanceSub := body.DistanceNotificationSubscription
	distanceSub := body.UserDistanceSubscription

	if distanceSub == nil {
		log.Error("Body not present")
@@ -2611,11 +2616,6 @@ func distanceSubPut(w http.ResponseWriter, r *http.Request) {
		errHandlerProblemDetails(w, "Mandatory DistanceCriteria parameter not present", http.StatusBadRequest)
		return
	}
	if distanceSub.Frequency == 0 {
		log.Error("Mandatory Frequency parameter not present")
		errHandlerProblemDetails(w, "Mandatory Frequency parameter not present", http.StatusBadRequest)
		return
	}
	if distanceSub.MonitoredAddress == nil {
		log.Error("Mandatory MonitoredAddress parameter not present")
		errHandlerProblemDetails(w, "Mandatory MonitoredAddress parameter not present", http.StatusBadRequest)
@@ -2660,15 +2660,15 @@ func distanceSubPut(w http.ResponseWriter, r *http.Request) {
		return
	}

	_ = rc.JSONSetEntry(baseKey+typeDistanceSubscription+":"+subsIdStr, ".", convertDistanceSubscriptionToJson(distanceSub))
	_ = rc.JSONSetEntry(baseKey+typeDistanceSubscription+":"+subsIdStr, ".", convertDistanceSubscriptionToJson1(distanceSub))

	//store the dynamic states of the subscription
	notifSent := distanceSubscriptionMap[subsId].NbNotificationsSent
	deregisterDistance(subsIdStr)
	registerDistance(distanceSub, subsIdStr)
	registerDistance1(distanceSub, subsIdStr)
	distanceSubscriptionMap[subsId].NbNotificationsSent = notifSent

	response.DistanceNotificationSubscription = distanceSub
	response.UserDistanceSubscription = distanceSub

	jsonResponse, err := json.Marshal(response)
	if err != nil {
@@ -2682,15 +2682,24 @@ func distanceSubPut(w http.ResponseWriter, r *http.Request) {

func populateDistanceList(key string, jsonInfo string, userData interface{}) error {

	distanceList := userData.(*NotificationSubscriptionList)
	var distanceInfo DistanceNotificationSubscription
	subscriptions := userData.(*[]Subscription)
	var distanceInfo UserDistanceSubscription

	// Format response
	err := json.Unmarshal([]byte(jsonInfo), &distanceInfo)
	if err != nil {
		return err
	}
	distanceList.DistanceNotificationSubscription = append(distanceList.DistanceNotificationSubscription, distanceInfo)
	href := ""
	if distanceInfo.Links != nil && distanceInfo.Links.Self != nil {
		href = distanceInfo.Links.Self.Href
	}
	// Create a Subscription instance
	sub := Subscription{
		Href:             href,
		SubscriptionType: distanceInfo.SubscriptionType,
	}
	*subscriptions = append(*subscriptions, sub)
	return nil
}

+1 −1
Original line number Diff line number Diff line
@@ -24,5 +24,5 @@
package server

type InlineUserDistanceNotification struct {
	UserDistanceNotification *UserDistanceNotification `json:"distanceNotificationSubscription,omitempty"`
	UserDistanceNotification *UserDistanceNotification `json:"UserDistanceNotification,omitempty"`
}
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
package server

type UserDistanceSubscription struct {
	Links       *Links `json:"_links,omitempty"`
	ResourceURL string `json:"resourceURL,omitempty"`
	// URI exposed by the client on which to receive notifications via HTTP. See note 1.
	CallbackReference *CallbackReference `json:"callbackReference"`