• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

FIWARE / contract-management / #26

28 Jan 2025 10:59AM UTC coverage: 0.982% (-0.6%) from 1.629%
#26

push

web-flow
Merge pull request #3 from FIWARE/tpp-integration

Tpp integration

99 of 500 new or added lines in 14 files covered. (19.8%)

4 existing lines in 3 files now uncovered.

281 of 28625 relevant lines covered (0.98%)

0.01 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

36.67
/src/main/java/org/fiware/iam/tmforum/NotificationSubscriber.java
1
package org.fiware.iam.tmforum;
2

3
import io.micronaut.context.annotation.Context;
4
import io.micronaut.context.annotation.Value;
5
import io.micronaut.http.HttpMethod;
6
import io.micronaut.http.HttpRequest;
7
import io.micronaut.http.HttpStatus;
8
import io.micronaut.http.client.exceptions.HttpClientResponseException;
9
import io.micronaut.http.client.netty.DefaultHttpClient;
10
import io.micronaut.runtime.event.annotation.EventListener;
11
import io.micronaut.runtime.server.event.ServerStartupEvent;
12
import io.micronaut.scheduling.TaskScheduler;
13
import lombok.RequiredArgsConstructor;
14
import lombok.extern.slf4j.Slf4j;
15
import org.fiware.iam.configuration.NotificationProperties;
16
import org.fiware.iam.tmforum.party.model.EventSubscriptionInputVO;
17
import org.fiware.iam.tmforum.party.model.EventSubscriptionVO;
18
import reactor.core.publisher.Mono;
19

20
import java.time.Duration;
21
import java.util.List;
22
import java.util.Optional;
23

24

25
@Context
26
@RequiredArgsConstructor
27
@Slf4j
1✔
28
public class NotificationSubscriber {
29

30
        private static final List<String> EVENT_TYPES = List.of("CreateEvent");//, "DeleteEvent", "StateChangeEvent");
1✔
31
        private static final String QUERY_TEMPLATE = "eventType=%s%s";
32
        private static final String LISTENER_ADDRESS_TEMPLATE = "%s/hub";
33
        private static final String LISTENER_PATH = "/listener/event";
34

35
        private final SubscriptionHealthIndicator subscriptionHealthIndicator;
36
        private final NotificationProperties notificationProperties;
37
        private final DefaultHttpClient httpClient;
38
        private final TaskScheduler taskScheduler;
39

40
        @Value("${general.basepath:}")
41
        private String controllerPath;
42

43
        @Value("${micronaut.server.port:8080}")
44
        private String servicePort;
45

46
        @Value("${general.host:contract-management}")
47
        private String serviceUrl;
48

49
        @EventListener
50
        public void onApplicationEvent(ServerStartupEvent e) {
51

52
                notificationProperties.getEntities()
1✔
53
                                .forEach(tmForumEntity ->
1✔
54
                                                Optional.ofNullable(tmForumEntity.getEventTypes())
1✔
55
                                                                .orElse(List.of())
1✔
56
                                                                .forEach(eventType -> {
1✔
57
                                                                        subscriptionHealthIndicator.initiateSubscriptionInMap(tmForumEntity.getEntityType() + eventType.getValue());
1✔
58
                                                                        taskScheduler.scheduleAtFixedRate(Duration.ofSeconds(5), Duration.ofSeconds(10), () -> createSubscription(tmForumEntity.getEntityType(), eventType.getValue(), tmForumEntity.getApiAddress()));
1✔
59
                                                                }));
1✔
60
        }
1✔
61

62
        public void createSubscription(String entityType, String eventType, String apiAddress) {
NEW
63
                String callbackUrl = String.format("http://%s:%s%s%s", serviceUrl, servicePort, controllerPath, LISTENER_PATH);
×
NEW
64
                log.debug("Attempting to register subscription with callback {}", callbackUrl);
×
65

NEW
66
                EventSubscriptionInputVO subscription = new EventSubscriptionInputVO()
×
NEW
67
                                .callback(callbackUrl)
×
NEW
68
                                .query(String.format(QUERY_TEMPLATE, entityType, eventType));
×
69

NEW
70
                HttpRequest<?> request = HttpRequest.create(HttpMethod.POST, String.format(LISTENER_ADDRESS_TEMPLATE, apiAddress)).body(subscription);
×
71

NEW
72
                Mono.from(httpClient.exchange(request, EventSubscriptionVO.class))
×
NEW
73
                                .doOnSuccess(res -> subscriptionHealthIndicator.setSubscriptionHealthy(entityType + eventType))
×
NEW
74
                                .onErrorResume(t -> {
×
NEW
75
                                        if (t instanceof HttpClientResponseException e) {
×
NEW
76
                                                if (e.getStatus() == HttpStatus.CONFLICT) {
×
NEW
77
                                                        subscriptionHealthIndicator.setSubscriptionHealthy(entityType + eventType);
×
78
                                                }
NEW
79
                                                if (e.getStatus() != HttpStatus.CONFLICT) {
×
NEW
80
                                                        log.info("Event registration failed for {} at {} - Cause: {} : {}", entityType, request.getUri(), e.getStatus(), e.getMessage());
×
81
                                                }
NEW
82
                                                return Mono.empty();
×
83
                                        }
NEW
84
                                        log.info("Could not create subscription for {} in TM Forum API", entityType, t);
×
NEW
85
                                        return Mono.empty();
×
NEW
86
                                }).subscribe();
×
87

NEW
88
        }
×
89
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc