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

wistefan / tmforum-api / #61

18 Oct 2023 12:35PM UTC coverage: 67.631% (+0.1%) from 67.488%
#61

push

web-flow
Configurable NGSI-LD Query format (#32)

* Build different NGSI queries depending if the attr is relationship or property

* Add tests to validate query parser with relationships

* Add missing testing class

* Fix bug removing well known attributes in query parser using fixed-size list

* Use scorpio OR queries

* Fix the type of product spec bundle references

* Update the type of product specs relationships

* Fix errors mapping categories and product specs as references

* Fix config issues with ProductOfferingTerm

* Allow to configure NGSI-LD query options

* Add default NGSI-LD query configuration

* fix config

* fix test call

* fix it

---------

Co-authored-by: Stefan Wiedemann <wistefan@googlemail.com>

65 of 65 new or added lines in 47 files covered. (100.0%)

2804 of 4146 relevant lines covered (67.63%)

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.domain.subscription.Subscription;
7
import org.fiware.tmforum.common.exception.TmForumException;
8
import org.fiware.tmforum.common.exception.TmForumExceptionReason;
9
import org.fiware.tmforum.common.notification.EventHandler;
10
import org.fiware.tmforum.common.querying.QueryParser;
11
import org.fiware.tmforum.common.querying.SubscriptionQuery;
12
import org.fiware.tmforum.common.querying.SubscriptionQueryParser;
13
import org.fiware.tmforum.common.repository.TmForumRepository;
14
import org.fiware.tmforum.common.validation.ReferenceValidationService;
15
import reactor.core.publisher.Mono;
16

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

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

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

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

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

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

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

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

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

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