/
sazonovim
/
init-spring
Обзор
Документация
Войти
/
sazonovim
/
init-spring
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/main/java/pro/nikolaev/initspring/client/InitializrClient.java
113 строк
6 KB
Nikolaev Ilya V
Initial commit
08 дек 2025, 13:06
08 дек 2025, 13:06
955de02
Код
Авторство
О чём код?
/* * Copyright 2025 Ilya Nikolaev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pro.nikolaev.initspring.client; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import java.net.URI; import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.stream.Collectors; import pro.nikolaev.initspring.dto.initializr.Metadata; import pro.nikolaev.initspring.settings.PluginSettings; public final class InitializrClient { private static final String METADATA_URL = "/metadata/client"; private static final String INITIALIZR_CONTENT_TYPE = "application/vnd.initializr.v2.3+json"; private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); public static byte[] downloadProject(String action, String type, String language, String bootVersion, String baseDir, String groupId, String artifactId, String name, String description, String packageName, String packaging, String javaVersion, String configurationFileFormat, List<String> dependencies) { String queryParams = createDownloadParamsString( type, language, bootVersion, baseDir, groupId, artifactId, name, description, packageName, packaging, javaVersion, configurationFileFormat, dependencies); try (HttpClient client = HttpClient.newHttpClient()) { String downloadUrl = PluginSettings.getInstance().getInitializrUrl() + action; HttpRequest request = HttpRequest.newBuilder().uri(URI.create(downloadUrl + queryParams)).build(); HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); if (response.statusCode() != 200) { return null; } return response.body(); } catch (Exception e) { return null; } } public static Metadata fetchMetadata(String url) { try (HttpClient client = HttpClient.newHttpClient()) { String metadataUrl = url + METADATA_URL; HttpRequest request = HttpRequest.newBuilder().uri(URI.create(metadataUrl)) .header("Accept", INITIALIZR_CONTENT_TYPE).build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() != 200) { return Metadata.defaultMetadata(); } return OBJECT_MAPPER.readValue(response.body(), Metadata.class); } catch (Exception e) { return Metadata.defaultMetadata(); } } private static String createDownloadParamsString(String type, String language, String bootVersion, String baseDir, String groupId, String artifactId, String name, String description, String packageName, String packaging, String javaVersion, String configurationFileFormat, List<String> dependencies) { // @formatter:off String queryParams = "?type=" + URLEncoder.encode(type, StandardCharsets.UTF_8) + "&language=" + URLEncoder.encode(language, StandardCharsets.UTF_8) + "&bootVersion=" + URLEncoder.encode(bootVersion, StandardCharsets.UTF_8) + "&baseDir=" + URLEncoder.encode(baseDir, StandardCharsets.UTF_8) + "&groupId=" + URLEncoder.encode(groupId, StandardCharsets.UTF_8) + "&artifactId=" + URLEncoder.encode(artifactId, StandardCharsets.UTF_8) + "&name=" + URLEncoder.encode(name, StandardCharsets.UTF_8) + "&description=" + URLEncoder.encode(description, StandardCharsets.UTF_8) + "&packageName=" + URLEncoder.encode(packageName, StandardCharsets.UTF_8) + "&packaging=" + URLEncoder.encode(packaging, StandardCharsets.UTF_8) + "&javaVersion=" + URLEncoder.encode(javaVersion, StandardCharsets.UTF_8) + "&version=" + URLEncoder.encode("0.0.1-SNAPSHOT", StandardCharsets.UTF_8); // @formatter:on if (configurationFileFormat != null) { queryParams += "&configurationFileFormat=" + URLEncoder.encode(configurationFileFormat, StandardCharsets.UTF_8); } if (dependencies != null && !dependencies.isEmpty()) { queryParams += "&dependencies=" + dependencies.stream() .map(d -> URLEncoder.encode(d, StandardCharsets.UTF_8)).collect(Collectors.joining(",")); } return queryParams; } private InitializrClient() { } }