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

wistefan / tmforum-api / #68

24 Oct 2023 01:20PM UTC coverage: 67.773% (-0.4%) from 68.167%
#68

push

web-flow
Make dome working (#37)

* set defaults

* update mapping dep

* add redis as option

3287 of 4850 relevant lines covered (67.77%)

0.68 hits per line

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

0.0
/common/src/main/java/org/fiware/tmforum/common/rest/AbstractSubscriptionApiController.java
1
package org.fiware.tmforum.common.rest;
2

3
import io.micronaut.cache.annotation.CacheInvalidate;
4
import io.micronaut.http.HttpResponse;
5
import lombok.extern.slf4j.Slf4j;
6
import org.fiware.tmforum.common.CommonConstants;
7
import org.fiware.tmforum.common.domain.subscription.Subscription;
8
import org.fiware.tmforum.common.exception.TmForumException;
9
import org.fiware.tmforum.common.exception.TmForumExceptionReason;
10
import org.fiware.tmforum.common.notification.EventHandler;
11
import org.fiware.tmforum.common.querying.QueryParser;
12
import org.fiware.tmforum.common.querying.SubscriptionQuery;
13
import org.fiware.tmforum.common.querying.SubscriptionQueryParser;
14
import org.fiware.tmforum.common.repository.TmForumRepository;
15
import org.fiware.tmforum.common.validation.ReferenceValidationService;
16
import reactor.core.publisher.Mono;
17

18
import java.net.URI;
19
import java.util.List;
20
import java.util.Map;
21
import java.util.UUID;
22

23
import static org.fiware.tmforum.common.CommonConstants.DEFAULT_OFFSET;
24

25
@Slf4j
×
26
public abstract class AbstractSubscriptionApiController extends AbstractApiController<Subscription> {
27
    private final Map<String, String> eventGroupToEntityNameMapping;
28

29
    public AbstractSubscriptionApiController(QueryParser queryParser, ReferenceValidationService validationService, TmForumRepository repository,
30
                                             Map<String, String> eventGroupToEntityNameMapping, EventHandler eventHandler) {
31
        super(queryParser, validationService, repository, eventHandler);
×
32
        this.eventGroupToEntityNameMapping = eventGroupToEntityNameMapping;
×
33
    }
×
34

35
    @CacheInvalidate(value = CommonConstants.SUBSCRIPTIONS_CACHE_NAME, all = true)
36
    protected Mono<Subscription> create(Subscription subscription) {
37
        return findExistingSubscription(subscription)
×
38
                .switchIfEmpty(create(Mono.just(subscription), Subscription.class));
×
39
    }
40

41
    private Mono<Subscription> findExistingSubscription(Subscription subscription) {
42
        String query = String.format(queryParser.toNgsiLdQuery(Subscription.class, "callback=%s&rawQuery=%s"),
×
43
                subscription.getCallback(), subscription.getRawQuery());
×
44

45
        return repository.findEntities(DEFAULT_OFFSET, 1, Subscription.TYPE_SUBSCRIPTION,
×
46
                    Subscription.class, query)
47
                .flatMap(list -> list.isEmpty() ? Mono.empty() :
×
48
                        Mono.error(new TmForumException("Such subscription already exists.", TmForumExceptionReason.CONFLICT)));
×
49
    }
50

51
    protected Subscription buildSubscription(String callback, String query, List<String> eventGroups) {
52
        log.debug(query);
×
53
        SubscriptionQuery subscriptionQuery = SubscriptionQueryParser.parse(query, eventGroups);
×
54

55
        String subId = UUID.randomUUID().toString();
×
56
        Subscription subscription = new Subscription(subId);
×
57
        subscription.setRawQuery(query != null ? query : "");
×
58
        subscription.setEventTypes(subscriptionQuery.getEventTypes());
×
59
        subscription.setEntities(subscriptionQuery.getEventGroups().stream()
×
60
                .map(eventGroup -> {
×
61
                    if (eventGroupToEntityNameMapping.containsKey(eventGroup)) {
×
62
                        return eventGroupToEntityNameMapping.get(eventGroup);
×
63
                    } else {
64
                        throw new TmForumException("Such subscription already exists.",
×
65
                                TmForumExceptionReason.INVALID_DATA);
66
                    }
67
                }).toList());
×
68
        subscription.setQuery(subscriptionQuery.getQuery());
×
69
        subscription.setCallback(URI.create(callback));
×
70
        subscription.setFields(subscriptionQuery.getFields());
×
71
        return subscription;
×
72
    }
73

74
    @Override
75
    @CacheInvalidate(value = CommonConstants.SUBSCRIPTIONS_CACHE_NAME, all = true)
76
    protected Mono<HttpResponse<Object>> delete(String id) {
77
        return super.delete(id);
×
78
    }
79
}
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

© 2025 Coveralls, Inc