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

FIWARE / contract-management / #67

27 Oct 2025 12:33PM UTC coverage: 1.686% (+0.04%) from 1.651%
#67

Pull #12

wistefan
wait for the policy
Pull Request #12: Support for central marketplace and policy creation

117 of 1238 new or added lines in 31 files covered. (9.45%)

5 existing lines in 2 files now uncovered.

587 of 34807 relevant lines covered (1.69%)

0.02 hits per line

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

0.0
/src/main/java/org/fiware/iam/management/ContractManagementController.java
1
package org.fiware.iam.management;
2

3
import io.micronaut.context.annotation.Requires;
4
import io.micronaut.http.HttpResponse;
5
import io.micronaut.http.HttpResponseFactory;
6
import io.micronaut.http.HttpStatus;
7
import io.micronaut.http.annotation.Controller;
8
import jakarta.annotation.PostConstruct;
9
import lombok.RequiredArgsConstructor;
10
import lombok.extern.slf4j.Slf4j;
11
import org.fiware.iam.pap.PAPAdapter;
12
import org.fiware.iam.cm.api.OrderApi;
13
import org.fiware.iam.cm.model.OrderEventVO;
14
import org.fiware.iam.configuration.GeneralProperties;
15
import org.fiware.iam.domain.ContractManagement;
16
import org.fiware.iam.til.TrustedIssuersListAdapter;
17
import org.fiware.iam.til.model.CredentialsVO;
18
import org.fiware.iam.tmforum.CredentialsConfigResolver;
19
import reactor.core.publisher.Mono;
20

21
import java.util.ArrayList;
22
import java.util.Arrays;
23
import java.util.List;
24

25
@Requires(condition = GeneralProperties.CentralMarketplaceCondition.class)
NEW
26
@Slf4j
×
27
@Controller("${general.basepath:/}")
28
@RequiredArgsConstructor
29
public class ContractManagementController implements OrderApi {
30

31
    private final TrustedIssuersListAdapter trustedIssuersListAdapter;
32
    private final PAPAdapter papAdapter;
33
    private final CMMapper cmMapper;
34

35
    @Override
36
    public Mono<HttpResponse<Object>> handleOrderStart(OrderEventVO orderVO) {
37

NEW
38
        List<Mono<Boolean>> creationResults = orderVO.getPolicies()
×
NEW
39
                .stream()
×
NEW
40
                .map(policy -> papAdapter.createPolicy(orderVO.getCustomerId(), orderVO.getOrderId(), policy.getAdditionalProperties()))
×
NEW
41
                .toList();
×
NEW
42
        List<CredentialsVO> credentialsVOS = orderVO.getCredentialsConfig().stream().map(cmMapper::map).toList();
×
NEW
43
        Mono<Boolean> tilResult = trustedIssuersListAdapter
×
NEW
44
                .allowIssuer(orderVO.getCustomerId(), List.of(new CredentialsConfigResolver.CredentialConfig(new ContractManagement(true), credentialsVOS)));
×
45

NEW
46
        List<Mono<Boolean>> successList = new ArrayList<>(creationResults);
×
NEW
47
        successList.add(tilResult);
×
48

NEW
49
        return toResponse(successList);
×
50
    }
51

52
    @Override
53
    public Mono<HttpResponse<Object>> handleOrderStop(OrderEventVO orderStopEventVO) {
NEW
54
        CredentialsConfigResolver.CredentialConfig credentialConfig = new CredentialsConfigResolver.CredentialConfig(
×
55
                new ContractManagement(true),
NEW
56
                orderStopEventVO.getCredentialsConfig()
×
NEW
57
                        .stream()
×
NEW
58
                        .map(cmMapper::map)
×
NEW
59
                        .toList());
×
60

NEW
61
        String orderId = orderStopEventVO.getOrderId();
×
NEW
62
        String issuerId = orderStopEventVO.getCustomerId();
×
NEW
63
        List<Mono<Boolean>> policyDeleteResults = orderStopEventVO.getPolicies()
×
NEW
64
                .stream()
×
NEW
65
                .map(odrlPolicyJsonVO -> papAdapter.deletePolicy(orderId, odrlPolicyJsonVO.getAdditionalProperties()))
×
NEW
66
                .toList();
×
NEW
67
        Mono<Boolean> issuerDenyResult = trustedIssuersListAdapter.denyIssuer(issuerId,
×
NEW
68
                        List.of(credentialConfig))
×
NEW
69
                .map(HttpResponse::getStatus)
×
NEW
70
                .map(HttpStatus::getCode)
×
NEW
71
                .map(code -> code > 199 && code < 300);
×
NEW
72
        List<Mono<Boolean>> successList = new ArrayList<>(policyDeleteResults);
×
NEW
73
        successList.add(issuerDenyResult);
×
74

NEW
75
        return toResponse(successList);
×
76
    }
77

78
    private Mono<HttpResponse<Object>> toResponse(List<Mono<Boolean>> successList) {
NEW
79
        return Mono.zip(successList, results ->
×
NEW
80
                Arrays.stream(results)
×
NEW
81
                        .filter(Boolean.class::isInstance)
×
NEW
82
                        .map(Boolean.class::cast)
×
NEW
83
                        .filter(isSuccessfull -> !isSuccessfull)
×
NEW
84
                        .findAny()
×
85
                        // if something is wrong -> bad gateway
NEW
86
                        .map(b -> HttpResponseFactory.INSTANCE.status(HttpStatus.BAD_GATEWAY))
×
NEW
87
                        .orElse(HttpResponseFactory.INSTANCE.status(HttpStatus.OK))
×
88
        );
89
    }
90
}
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