From 5282d54fcd9d819d138ca217d1cd7154f04fc61d Mon Sep 17 00:00:00 2001 From: Darko Date: Mon, 9 Dec 2024 11:10:07 -0400 Subject: [PATCH] I18N-1323 Update Mojito CLI to use OpenAPI spec for rest calls Fixed schemas' issues --- .../cli/apiclient/AssetWsApiHelper.java | 32 +++++++++ .../mojito/cli/command/RepoViewCommand.java | 70 +++++++++++-------- .../cli/command/TMExportCommandTest.java | 19 +++-- .../box/l10n/mojito/CustomModelResolver.java | 12 ++-- 4 files changed, 88 insertions(+), 45 deletions(-) create mode 100644 cli/src/main/java/com/box/l10n/mojito/cli/apiclient/AssetWsApiHelper.java diff --git a/cli/src/main/java/com/box/l10n/mojito/cli/apiclient/AssetWsApiHelper.java b/cli/src/main/java/com/box/l10n/mojito/cli/apiclient/AssetWsApiHelper.java new file mode 100644 index 0000000000..1b997debfe --- /dev/null +++ b/cli/src/main/java/com/box/l10n/mojito/cli/apiclient/AssetWsApiHelper.java @@ -0,0 +1,32 @@ +package com.box.l10n.mojito.cli.apiclient; + +import com.box.l10n.mojito.cli.command.CommandException; +import com.box.l10n.mojito.cli.model.AssetAssetSummary; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +@Component +public class AssetWsApiHelper { + @Autowired AssetWsApi assetClient; + + public AssetAssetSummary getAssetByPathAndRepositoryId(String path, Long repositoryId) + throws CommandException { + Assert.notNull(path, "path must not be null"); + Assert.notNull(repositoryId, "repository must not be null"); + + List assets; + try { + assets = this.assetClient.getAssets(repositoryId, path, null, null, null); + } catch (ApiException e) { + throw new RuntimeException(e); + } + if (!assets.isEmpty()) { + return assets.getFirst(); + } else { + throw new CommandException( + "Could not find asset with path = [" + path + "] at repo id [" + repositoryId + "]"); + } + } +} diff --git a/cli/src/main/java/com/box/l10n/mojito/cli/command/RepoViewCommand.java b/cli/src/main/java/com/box/l10n/mojito/cli/command/RepoViewCommand.java index f79eb8f8e8..84b1ff5944 100644 --- a/cli/src/main/java/com/box/l10n/mojito/cli/command/RepoViewCommand.java +++ b/cli/src/main/java/com/box/l10n/mojito/cli/command/RepoViewCommand.java @@ -2,17 +2,18 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; +import com.box.l10n.mojito.cli.apiclient.RepositoryWsApiHelper; import com.box.l10n.mojito.cli.command.param.Param; -import com.box.l10n.mojito.rest.client.exception.RepositoryNotFoundException; -import com.box.l10n.mojito.rest.entity.IntegrityChecker; -import com.box.l10n.mojito.rest.entity.Repository; -import com.box.l10n.mojito.rest.entity.RepositoryLocale; +import com.box.l10n.mojito.cli.model.AssetIntegrityCheckerRepository; +import com.box.l10n.mojito.cli.model.RepositoryLocaleRepository; +import com.box.l10n.mojito.cli.model.RepositoryRepository; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.fusesource.jansi.Ansi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -38,35 +39,40 @@ public class RepoViewCommand extends RepoCommand { description = Param.REPOSITORY_NAME_DESCRIPTION) String nameParam; + @Autowired RepositoryWsApiHelper repositoryWsApiHelper; + @Override public void execute() throws CommandException { consoleWriter.a("View repository: ").fg(Ansi.Color.CYAN).a(nameParam).println(); - try { - Repository repository = repositoryClient.getRepositoryByName(nameParam); - consoleWriter - .newLine() - .a("Repository id --> ") - .fg(Ansi.Color.MAGENTA) - .a(repository.getId()) - .println(); - printIntegrityChecker(repository); - printLocales(repository); - consoleWriter.println(); - } catch (RepositoryNotFoundException ex) { - throw new CommandException(ex.getMessage(), ex); - } + RepositoryRepository repository = this.repositoryWsApiHelper.findRepositoryByName(nameParam); + consoleWriter + .newLine() + .a("Repository id --> ") + .fg(Ansi.Color.MAGENTA) + .a(repository.getId()) + .println(); + printIntegrityChecker(repository); + printLocales(repository); + consoleWriter.println(); } - private void printIntegrityChecker(Repository repository) { - if (repository.getIntegrityCheckers() != null && !repository.getIntegrityCheckers().isEmpty()) { - List integrityCheckers = new ArrayList<>(); - integrityCheckers.addAll(repository.getIntegrityCheckers()); - Collections.sort(integrityCheckers, IntegrityChecker.getComparator()); + private void printIntegrityChecker(RepositoryRepository repository) { + if (repository.getAssetIntegrityCheckers() != null + && !repository.getAssetIntegrityCheckers().isEmpty()) { + List integrityCheckers = new ArrayList<>(); + integrityCheckers.addAll(repository.getAssetIntegrityCheckers()); + Collections.sort( + integrityCheckers, + (integrityChecker1, integrityChecker2) -> { + String extension1 = integrityChecker1.getAssetExtension(); + String extension2 = integrityChecker2.getAssetExtension(); + return extension1.compareTo(extension2); + }); consoleWriter.newLine().a("Integrity checkers --> ").fg(Ansi.Color.MAGENTA); for (int i = 0; i < integrityCheckers.size(); i++) { - IntegrityChecker integrityChecker = integrityCheckers.get(i); + AssetIntegrityCheckerRepository integrityChecker = integrityCheckers.get(i); consoleWriter .a(integrityChecker.getAssetExtension()) .a(":") @@ -80,20 +86,26 @@ private void printIntegrityChecker(Repository repository) { } } - private void printLocales(Repository repository) { + private void printLocales(RepositoryRepository repository) { if (repository.getRepositoryLocales() != null && !repository.getRepositoryLocales().isEmpty()) { - List repositoryLocales = new ArrayList<>(); + List repositoryLocales = new ArrayList<>(); repositoryLocales.addAll(repository.getRepositoryLocales()); - Collections.sort(repositoryLocales, RepositoryLocale.getComparator()); + Collections.sort( + repositoryLocales, + (repositoryLocale1, repositoryLocale2) -> { + String bcp47Tag1 = repositoryLocale1.getLocale().getBcp47Tag(); + String bcp47Tag2 = repositoryLocale2.getLocale().getBcp47Tag(); + return bcp47Tag1.compareTo(bcp47Tag2); + }); consoleWriter.newLine().a("Repository locales --> ").fg(Ansi.Color.MAGENTA); for (int j = 0; j < repositoryLocales.size(); j++) { - RepositoryLocale repositoryLocale = repositoryLocales.get(j); + RepositoryLocaleRepository repositoryLocale = repositoryLocales.get(j); String bcp47Tag = repositoryLocale.getLocale().getBcp47Tag(); if (repositoryLocale.isToBeFullyTranslated()) { consoleWriter.a(bcp47Tag).a(" "); } else { - RepositoryLocale parentRepositoryLocale = repositoryLocale.getParentLocale(); + RepositoryLocaleRepository parentRepositoryLocale = repositoryLocale.getParentLocale(); if (parentRepositoryLocale != null) { String parentBcp47Tag = parentRepositoryLocale.getLocale().getBcp47Tag(); diff --git a/cli/src/test/java/com/box/l10n/mojito/cli/command/TMExportCommandTest.java b/cli/src/test/java/com/box/l10n/mojito/cli/command/TMExportCommandTest.java index ddbb9d362e..9abe48285d 100644 --- a/cli/src/test/java/com/box/l10n/mojito/cli/command/TMExportCommandTest.java +++ b/cli/src/test/java/com/box/l10n/mojito/cli/command/TMExportCommandTest.java @@ -1,10 +1,9 @@ package com.box.l10n.mojito.cli.command; import com.box.l10n.mojito.cli.CLITestBase; +import com.box.l10n.mojito.cli.apiclient.AssetWsApiHelper; +import com.box.l10n.mojito.cli.model.AssetAssetSummary; import com.box.l10n.mojito.entity.Repository; -import com.box.l10n.mojito.rest.client.AssetClient; -import com.box.l10n.mojito.rest.client.RepositoryClient; -import com.box.l10n.mojito.rest.entity.Asset; import com.box.l10n.mojito.test.XliffUtils; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -14,9 +13,7 @@ */ public class TMExportCommandTest extends CLITestBase { - @Autowired RepositoryClient repositoryClient; - - @Autowired AssetClient assetClient; + @Autowired AssetWsApiHelper assetWsApiHelper; @Test public void export() throws Exception { @@ -31,13 +28,15 @@ public void export() throws Exception { "-s", getInputResourcesTestDir("source").getAbsolutePath()); - Asset asset = - assetClient.getAssetByPathAndRepositoryId("source-xliff.xliff", repository.getId()); + AssetAssetSummary asset = + this.assetWsApiHelper.getAssetByPathAndRepositoryId( + "source-xliff.xliff", repository.getId()); importTranslations(asset.getId(), "source-xliff_", "fr-FR"); importTranslations(asset.getId(), "source-xliff_", "ja-JP"); - Asset asset2 = - assetClient.getAssetByPathAndRepositoryId("source2-xliff.xliff", repository.getId()); + AssetAssetSummary asset2 = + this.assetWsApiHelper.getAssetByPathAndRepositoryId( + "source2-xliff.xliff", repository.getId()); importTranslations(asset2.getId(), "source2-xliff_", "fr-FR"); importTranslations(asset2.getId(), "source2-xliff_", "ja-JP"); diff --git a/webapp/src/main/java/com/box/l10n/mojito/CustomModelResolver.java b/webapp/src/main/java/com/box/l10n/mojito/CustomModelResolver.java index 84f01243c4..f30119ff81 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/CustomModelResolver.java +++ b/webapp/src/main/java/com/box/l10n/mojito/CustomModelResolver.java @@ -59,13 +59,13 @@ public Schema resolve( new BooleanSchema())); return objectSchema; } - if (annotatedType.getJsonViewAnnotation() != null) { - if (this.hasAnnotation(annotatedType, RequestBody.class)) { - annotatedType.jsonViewAnnotation(null); - return super.resolve(annotatedType, context, next); - } + if (annotatedType.getJsonViewAnnotation() != null + && this.hasAnnotation(annotatedType, RequestBody.class)) { + annotatedType.jsonViewAnnotation(null); + return super.resolve(annotatedType, context, next); } - if (this.hasAnnotation(annotatedType, JsonBackReference.class)) { + if (this.hasAnnotation(annotatedType, JsonBackReference.class) + && !this.hasAnnotation(annotatedType, io.swagger.v3.oas.annotations.media.Schema.class)) { return null; } return super.resolve(annotatedType, context, next);