|
11 | 11 | import java.util.Optional;
|
12 | 12 | import java.util.concurrent.ConcurrentHashMap;
|
13 | 13 | import java.util.concurrent.ConcurrentMap;
|
| 14 | +import java.util.function.Function; |
| 15 | +import java.util.stream.Collectors; |
14 | 16 |
|
15 | 17 | import org.apache.commons.collections4.CollectionUtils;
|
16 | 18 | import org.apache.commons.collections4.MapUtils;
|
|
24 | 26 | import org.springframework.web.bind.annotation.RestController;
|
25 | 27 | import org.springframework.web.reactive.function.client.ExchangeStrategies;
|
26 | 28 |
|
| 29 | +import com.fasterxml.jackson.core.type.TypeReference; |
27 | 30 | import com.google.common.cache.CacheBuilder;
|
28 | 31 | import com.google.common.cache.CacheLoader;
|
29 | 32 | import com.google.common.cache.LoadingCache;
|
30 | 33 | import com.openblocks.api.framework.view.ResponseView;
|
31 | 34 | import com.openblocks.infra.constant.NewUrl;
|
32 | 35 | import com.openblocks.infra.localcache.ReloadableCache;
|
| 36 | +import com.openblocks.sdk.util.JsonUtils; |
33 | 37 | import com.openblocks.sdk.webclient.WebClientBuildHelper;
|
34 | 38 |
|
35 | 39 | import lombok.Builder;
|
@@ -63,19 +67,25 @@ public Mono<JsLibraryMeta> load(@NotNull String key) {
|
63 | 67 | .build();
|
64 | 68 |
|
65 | 69 | static {
|
66 |
| - try (InputStream is = JsLibraryController.class.getClassLoader().getResourceAsStream("recommendedJsLibraries")) { |
| 70 | + try (InputStream is = JsLibraryController.class.getClassLoader().getResourceAsStream("recommendedJsLibraries.json")) { |
67 | 71 | if (is != null) {
|
68 |
| - List<String> names = IOUtils.readLines(is, Charset.defaultCharset()); |
69 |
| - log.info("find recommended js library names: {}", names); |
70 |
| - for (String libName : names) { |
| 72 | + String content = IOUtils.toString(is, Charset.defaultCharset()); |
| 73 | + List<Map<String, Object>> recommendedJsLibraries = JsonUtils.fromJsonSafely(content, new TypeReference<>() { |
| 74 | + }, Collections.emptyList()); |
| 75 | + Map<String, Map<String, Object>> recommendedJsLibraryMap = recommendedJsLibraries.stream() |
| 76 | + .collect(Collectors.toMap(map -> MapUtils.getString(map, "name"), Function.identity())); |
| 77 | + |
| 78 | + log.info("find recommended js library names: {}", recommendedJsLibraryMap.keySet()); |
| 79 | + for (String libName : recommendedJsLibraryMap.keySet()) { |
71 | 80 | ReloadableCache<JsLibraryMeta> reloadableCache = ReloadableCache.<JsLibraryMeta> newBuilder()
|
72 | 81 | .setName(libName)
|
73 | 82 | .setInterval(Duration.ofDays(1))
|
74 |
| - .setFactory(() -> { |
75 |
| - Mono<JsLibraryMeta> fetch = fetch(libName); |
76 |
| - log.info("reloaded recommended js library: {}", libName); |
77 |
| - return fetch; |
78 |
| - }) |
| 83 | + .setFactory(() -> fetch(libName) |
| 84 | + .doOnNext(jsLibraryMeta -> { |
| 85 | + Map<String, Object> map = recommendedJsLibraryMap.get(libName); |
| 86 | + jsLibraryMeta.setDownloadUrl(MapUtils.getString(map, "downloadUrl")); |
| 87 | + }) |
| 88 | + .doOnNext(jsLibraryMeta -> log.info("reloaded recommended js library: {}", JsonUtils.toJson(jsLibraryMeta)))) |
79 | 89 | .build();
|
80 | 90 | RECOMMENDED_JS_LIB_META_CACHE.put(libName, reloadableCache);
|
81 | 91 | }
|
@@ -154,5 +164,6 @@ public static class JsLibraryMeta {
|
154 | 164 | private String latestVersion;
|
155 | 165 | private String homepage;
|
156 | 166 | private String description;
|
| 167 | + private String downloadUrl; |
157 | 168 | }
|
158 | 169 | }
|
0 commit comments