-
Notifications
You must be signed in to change notification settings - Fork 28
/
KontentConfiguration.java
86 lines (74 loc) · 3.57 KB
/
KontentConfiguration.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package kontent.ai.delivery.sample.dancinggoat.springboot;
import kontent.ai.delivery.ContentLinkUrlResolver;
import kontent.ai.delivery.DeliveryClient;
import kontent.ai.delivery.DeliveryOptions;
import kontent.ai.delivery.Header;
import kontent.ai.delivery.InlineContentItemsResolver;
import kontent.ai.delivery.Link;
import kontent.ai.delivery.sample.dancinggoat.models.Tweet;
import org.springframework.boot.json.JsonParserFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.thymeleaf.extras.java8time.dialect.Java8TimeDialect;
import java.util.Arrays;
import java.util.Map;
@Configuration
public class KontentConfiguration {
// https://github.com/kontent-ai/kontent-ai.github.io/blob/main/docs/articles/Guidelines-for-Kontent.ai-related-tools.md
private static final String TRACKING_HEADER_NAME = "X-KC-SOURCE";
private static final String TRACKING_HEADER_VALUE = "kontent.ai.delivery.sample.dancinggoat.java.springboot;2.0.0";
@Bean
public Java8TimeDialect java8TimeDialect() {
return new Java8TimeDialect();
}
@Bean
public DeliveryClient deliveryClient() {
DeliveryClient client = new DeliveryClient(
DeliveryOptions
.builder()
.projectId("975bf280-fd91-488c-994c-2f04416e5ee3")
.customHeaders(Arrays.asList(
new Header(TRACKING_HEADER_NAME, TRACKING_HEADER_VALUE)))
.build());
client.scanClasspathForMappings("kontent.ai.delivery.sample.dancinggoat.models");
client.registerInlineContentItemsResolver(new InlineContentItemsResolver<Tweet>() {
@Override
public String resolve(Tweet item) {
String theme = item.getTheme().get(0).getName().toLowerCase();
Boolean hideThread = item
.getDisplayOptions()
.stream()
.filter(o -> o.getCodename().equals("hide_thread"))
.findFirst()
.isPresent();
Boolean hideMedia = item
.getDisplayOptions()
.stream()
.filter(o -> o.getCodename().equals("hide_media"))
.findFirst()
.isPresent();
String options = String.format("&hide_thread=%b&hide_media=%b", hideThread, hideMedia);
String tweetLink = item.getTweetLink();
String url = String.format("https://publish.twitter.com/oembed?url=%s&theme=%s%s", tweetLink, theme,
options);
RestTemplate restTemplate = new RestTemplate();
String responseBody = restTemplate.getForObject(url, String.class);
Map<String, Object> object = JsonParserFactory.getJsonParser().parseMap(responseBody);
return (String) object.get("html");
}
});
client.setContentLinkUrlResolver(new ContentLinkUrlResolver() {
@Override
public String resolveLinkUrl(Link link) {
switch (link.getType()) {
case "article":
return "/articles/" + link.getUrlSlug();
default:
return "";
}
}
});
return client;
}
}