diff --git a/build.gradle b/build.gradle index af60d83..89b2185 100644 --- a/build.gradle +++ b/build.gradle @@ -32,8 +32,8 @@ dependencies { implementation 'com.epam.reportportal:service-api' annotationProcessor 'com.epam.reportportal:service-api' } else { - implementation 'com.github.reportportal:service-api:0141b9e' - annotationProcessor 'com.github.reportportal:service-api:0141b9e' + implementation 'com.github.reportportal:service-api:7969602' + annotationProcessor 'com.github.reportportal:service-api:7969602' } testRuntimeOnly 'org.junit.platform:junit-platform-launcher' diff --git a/src/main/java/com/epam/reportportal/extension/gitlab/GitlabExtension.java b/src/main/java/com/epam/reportportal/extension/gitlab/GitlabExtension.java index 5252370..eca8bcd 100644 --- a/src/main/java/com/epam/reportportal/extension/gitlab/GitlabExtension.java +++ b/src/main/java/com/epam/reportportal/extension/gitlab/GitlabExtension.java @@ -1,5 +1,15 @@ package com.epam.reportportal.extension.gitlab; +import com.epam.reportportal.base.core.events.domain.PluginUploadedEvent; +import com.epam.reportportal.base.infrastructure.persistence.binary.DataStoreService; +import com.epam.reportportal.base.infrastructure.persistence.dao.IntegrationRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.IntegrationTypeRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.LogRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.ProjectRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.ProjectUserRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.TestItemRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.organization.OrganizationRepository; +import com.epam.reportportal.base.infrastructure.persistence.dao.organization.OrganizationUserRepository; import com.epam.reportportal.extension.CommonPluginCommand; import com.epam.reportportal.extension.IntegrationGroupEnum; import com.epam.reportportal.extension.NamedPluginCommand; @@ -7,7 +17,6 @@ import com.epam.reportportal.extension.ReportPortalExtensionPoint; import com.epam.reportportal.extension.command.ExtensionCommand; import com.epam.reportportal.extension.common.IntegrationTypeProperties; -import com.epam.reportportal.base.core.events.domain.PluginUploadedEvent; import com.epam.reportportal.extension.gitlab.client.GitlabClientProvider; import com.epam.reportportal.extension.gitlab.command.DescriptionBuilderService; import com.epam.reportportal.extension.gitlab.command.GetIssueCommand; @@ -24,18 +33,9 @@ import com.epam.reportportal.extension.gitlab.command.TestConnectionCommand; import com.epam.reportportal.extension.gitlab.event.plugin.PluginLoadedEventListener; import com.epam.reportportal.extension.gitlab.info.impl.PluginInfoProviderImpl; -import com.epam.reportportal.extension.gitlab.utils.GitlabObjectMapperProvider; import com.epam.reportportal.extension.gitlab.utils.MemoizingSupplier; import com.epam.reportportal.extension.util.RequestEntityConverter; -import com.epam.reportportal.base.infrastructure.persistence.binary.DataStoreService; -import com.epam.reportportal.base.infrastructure.persistence.dao.IntegrationRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.IntegrationTypeRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.LogRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.ProjectRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.ProjectUserRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.TestItemRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.organization.OrganizationRepository; -import com.epam.reportportal.base.infrastructure.persistence.dao.organization.OrganizationUserRepository; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; import java.util.ArrayList; import java.util.HashMap; @@ -64,7 +64,7 @@ public class GitlabExtension implements ReportPortalExtensionPoint, DisposableBe private static final String DOCUMENTATION_LINK_FIELD = "documentationLink"; private static final String DOCUMENTATION_LINK = "https://reportportal.io/docs/plugins/GitLab/"; private final String resourcesDir; - private final RequestEntityConverter requestEntityConverter; + private final Supplier requestEntityConverterSupplier; private final Supplier> pluginLoadedListenerSupplier; private final Supplier gitlabClientProviderSupplier; private final Supplier descriptionBuilderServiceSupplier; @@ -95,6 +95,8 @@ public class GitlabExtension implements ReportPortalExtensionPoint, DisposableBe @Autowired private BasicTextEncryptor textEncryptor; @Autowired + private ObjectMapper objectMapper; + @Autowired @Qualifier("attachmentDataStoreService") private DataStoreService dataStoreService; @@ -108,9 +110,8 @@ public GitlabExtension(Map initParams) { )); gitlabClientProviderSupplier = new MemoizingSupplier<>( - () -> new GitlabClientProvider(textEncryptor)); - requestEntityConverter = new RequestEntityConverter( - new GitlabObjectMapperProvider().getObjectMapper()); + () -> new GitlabClientProvider(textEncryptor, objectMapper)); + requestEntityConverterSupplier = new MemoizingSupplier<>(() -> new RequestEntityConverter(objectMapper)); descriptionBuilderServiceSupplier = new MemoizingSupplier<>( () -> new DescriptionBuilderService(logRepository, testItemRepository, dataStoreService)); } @@ -198,7 +199,7 @@ public Map> getIntegrationExtensionCommands() { commands.add(new GetIssueFieldsCommand(projectRepository, organizationUserRepository, organizationRepository, projectUserRepository)); commands.add(new PostTicketCommand(projectRepository, gitlabClientProviderSupplier.get(), - requestEntityConverter, descriptionBuilderServiceSupplier.get(), organizationUserRepository, + requestEntityConverterSupplier.get(), descriptionBuilderServiceSupplier.get(), organizationUserRepository, organizationRepository, projectUserRepository)); return commands.stream().collect(Collectors.toMap(NamedPluginCommand::getName, it -> it)); } diff --git a/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClient.java b/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClient.java index db2be86..ab1e567 100644 --- a/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClient.java +++ b/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClient.java @@ -8,7 +8,6 @@ import com.epam.reportportal.extension.gitlab.dto.ProjectDto; import com.epam.reportportal.extension.gitlab.dto.UploadsLinkDto; import com.epam.reportportal.extension.gitlab.dto.UserDto; -import com.epam.reportportal.extension.gitlab.utils.GitlabObjectMapperProvider; import com.epam.reportportal.base.infrastructure.persistence.entity.attachment.Attachment; import com.epam.reportportal.base.infrastructure.rules.exception.ErrorType; import com.epam.reportportal.base.infrastructure.rules.exception.ReportPortalException; @@ -24,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import lombok.RequiredArgsConstructor; import org.jooq.tools.json.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.core.ParameterizedTypeReference; @@ -42,6 +42,7 @@ * @author Zsolt Nagyaghy */ @Slf4j +@RequiredArgsConstructor public class GitlabClient { private static final Integer DEFAULT_PAGE_SIZE = 100; @@ -64,12 +65,7 @@ public class GitlabClient { private final String baseUrl; private final String token; - ObjectMapper objectMapper = new GitlabObjectMapperProvider().getObjectMapper(); - - public GitlabClient(String baseUrl, String token) { - this.baseUrl = baseUrl; - this.token = token; - } + private final ObjectMapper objectMapper; public ProjectDto getProject(String projectId) { String pathUrl = String.format(BASE_PATH, baseUrl, projectId); diff --git a/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClientProvider.java b/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClientProvider.java index ad26a6e..b05c571 100644 --- a/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClientProvider.java +++ b/src/main/java/com/epam/reportportal/extension/gitlab/client/GitlabClientProvider.java @@ -1,21 +1,21 @@ package com.epam.reportportal.extension.gitlab.client; -import com.epam.reportportal.extension.gitlab.command.GitlabProperties; import com.epam.reportportal.base.infrastructure.persistence.entity.integration.IntegrationParams; import com.epam.reportportal.base.infrastructure.rules.exception.ErrorType; import com.epam.reportportal.base.infrastructure.rules.exception.ReportPortalException; +import com.epam.reportportal.extension.gitlab.command.GitlabProperties; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; import org.jasypt.util.text.BasicTextEncryptor; /** * @author Zsolt Nagyaghy */ +@RequiredArgsConstructor public class GitlabClientProvider { - protected BasicTextEncryptor textEncryptor; - - public GitlabClientProvider(BasicTextEncryptor textEncryptor) { - this.textEncryptor = textEncryptor; - } + private final BasicTextEncryptor textEncryptor; + private final ObjectMapper objectMapper; public GitlabClient get(IntegrationParams integrationParams) { String credentials = textEncryptor.decrypt( @@ -27,6 +27,6 @@ public GitlabClient get(IntegrationParams integrationParams) { () -> new ReportPortalException(ErrorType.UNABLE_INTERACT_WITH_INTEGRATION, "Url to the GitLab is not specified." )); - return new GitlabClient(url, credentials); + return new GitlabClient(url, credentials, objectMapper); } } diff --git a/src/main/java/com/epam/reportportal/extension/gitlab/dto/IssueDto.java b/src/main/java/com/epam/reportportal/extension/gitlab/dto/IssueDto.java index bc99525..7339bb9 100644 --- a/src/main/java/com/epam/reportportal/extension/gitlab/dto/IssueDto.java +++ b/src/main/java/com/epam/reportportal/extension/gitlab/dto/IssueDto.java @@ -15,7 +15,9 @@ */ package com.epam.reportportal.extension.gitlab.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; /** @@ -23,14 +25,12 @@ */ @Setter @Getter +@NoArgsConstructor public class IssueDto { private Long iid; private String title; private String state; + @JsonProperty("web_url") private String webUrl; - - public IssueDto() { - } - } diff --git a/src/main/java/com/epam/reportportal/extension/gitlab/utils/GitlabObjectMapperProvider.java b/src/main/java/com/epam/reportportal/extension/gitlab/utils/GitlabObjectMapperProvider.java deleted file mode 100644 index 1f3a456..0000000 --- a/src/main/java/com/epam/reportportal/extension/gitlab/utils/GitlabObjectMapperProvider.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.epam.reportportal.extension.gitlab.utils; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.SerializationFeature; - -/** - * @author Zsolt Nagyaghy - */ -public class GitlabObjectMapperProvider { - - private final ObjectMapper objectMapper; - - public GitlabObjectMapperProvider() { - this.objectMapper = new ObjectMapper(); - - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); - - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true); - } - - public ObjectMapper getObjectMapper() { - return objectMapper; - } -}