Passed
Pull Request — master (#24)
by Filip
02:53
created

com.hltech.vaunt.generator.domain.representation.RepresentationExtractor   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
eloc 21
dl 0
loc 33
c 1
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A extractExpectations(String) 0 12 2
A extractCapabilities(String) 0 10 2
A extractServiceRepresentation(String,String) 0 2 1
1
package com.hltech.vaunt.generator.domain.representation;
2
3
import com.fasterxml.jackson.databind.JsonMappingException;
4
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
5
import com.google.common.collect.ArrayListMultimap;
6
import com.google.common.collect.Multimap;
7
import com.hltech.vaunt.generator.domain.representation.annotation.Consumer;
8
import com.hltech.vaunt.generator.domain.representation.annotation.Provider;
9
import com.hltech.vaunt.generator.domain.representation.model.Capabilities;
10
import com.hltech.vaunt.generator.domain.representation.model.Contract;
11
import com.hltech.vaunt.generator.domain.representation.model.Expectations;
12
import com.hltech.vaunt.generator.domain.representation.model.Service;
13
import lombok.RequiredArgsConstructor;
14
import org.reflections.Reflections;
15
16
import java.util.ArrayList;
17
import java.util.List;
18
19
@RequiredArgsConstructor
20
public class RepresentationExtractor {
21
22
    private final JsonSchemaGenerator jsonSchemaGenerator;
23
24
    public Service extractServiceRepresentation(String packageRoot, String serviceName) throws JsonMappingException {
25
        return new Service(serviceName, extractCapabilities(packageRoot), extractExpectations(packageRoot));
26
    }
27
28
    private Capabilities extractCapabilities(String packageRoot) throws JsonMappingException {
29
        List<Contract> providerContracts = new ArrayList<>();
30
        for (Class<?> providerMessage : new Reflections(packageRoot).getTypesAnnotatedWith(Provider.class)) {
31
            providerContracts.add(new Contract(
32
                    providerMessage.getAnnotation(Provider.class).destinationType(),
33
                    providerMessage.getAnnotation(Provider.class).destinationName(),
34
                    jsonSchemaGenerator.generateSchema(providerMessage)));
35
        }
36
37
        return new Capabilities(providerContracts);
38
    }
39
40
    private Expectations extractExpectations(String packageRoot) throws JsonMappingException {
41
        Multimap<String, Contract> providerNameToContracts = ArrayListMultimap.create();
42
        for (Class<?> consumerMessage : new Reflections(packageRoot).getTypesAnnotatedWith(Consumer.class)) {
43
            Contract contract = new Contract(
44
                    consumerMessage.getAnnotation(Consumer.class).destinationType(),
45
                    consumerMessage.getAnnotation(Consumer.class).destinationName(),
46
                    jsonSchemaGenerator.generateSchema(consumerMessage));
47
48
            providerNameToContracts.put(consumerMessage.getAnnotation(Consumer.class).providerName(), contract);
49
        }
50
51
        return new Expectations(providerNameToContracts);
52
    }
53
}
54