Skip to content

Commit 6176590

Browse files
committed
Add preview mode & support for auto-translation options
1 parent af1b2ff commit 6176590

File tree

11 files changed

+92
-17
lines changed

11 files changed

+92
-17
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>io.simplelocalize</groupId>
66
<artifactId>simplelocalize-cli</artifactId>
7-
<version>2.8.0</version>
7+
<version>2.9.0</version>
88
<packaging>jar</packaging>
99
<name>simplelocalize-cli</name>
1010
<description>Official SimpleLocalize Command Line Interface</description>

src/main/java/io/simplelocalize/cli/SimplelocalizeCliCommand.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,10 @@ public void upload(
9494
@Option(names = {"--uploadNamespace", "--namespace"}, description = "(Optional) Specify namespace for single file upload (cannot be used with {ns} in uploadPath)") String namespace,
9595
@Option(names = {"--uploadLanguageKey", "--languageKey"}, description = "(Optional) Specify language key for single file upload (cannot be used with {lang} in uploadPath)") String languageKey,
9696
@Option(names = {"--uploadCustomerId", "--customerId"}, description = "(Optional) Assign customerId to uploaded translations") String customerId,
97-
@Option(names = {"--overwrite"}, description = "(Optional) Overwrite existing translations", defaultValue = "false") Boolean overwrite,
97+
@Option(names = {"--overwrite", "--replace", "--update"}, description = "(Optional) Update existing translations", defaultValue = "false") Boolean updateTranslations,
9898
@Option(names = {"--delete"}, description = "(Optional) Delete translations which are not present in uploaded file", defaultValue = "false") Boolean delete,
9999
@Option(names = {"--dryRun"}, description = "(Optional) Dry run mode. Do not upload anything to SimpleLocalize", defaultValue = "false") Boolean dryRun,
100+
@Option(names = {"--preview"}, description = "(Optional) Preview changes before importing files", defaultValue = "false") Boolean preview,
100101
@Option(names = {"--baseUrl"}, description = "(Optional) Set custom server URL") String baseUrl
101102
)
102103
{
@@ -150,7 +151,7 @@ public void upload(
150151
effectiveUploadOptions = new ArrayList<>(uploadOptions);
151152
}
152153

153-
if (Boolean.TRUE.equals(overwrite))
154+
if (Boolean.TRUE.equals(updateTranslations))
154155
{
155156
effectiveUploadOptions.add("REPLACE_TRANSLATION_IF_FOUND");
156157
}
@@ -166,6 +167,11 @@ public void upload(
166167
configuration.setDryRun(true);
167168
}
168169

170+
if (Boolean.TRUE.equals(preview))
171+
{
172+
configuration.setPreview(true);
173+
}
174+
169175
this.effectiveCommandConfiguration = configuration;
170176
SimpleLocalizeClient client = SimpleLocalizeClient.create(configuration.getBaseUrl(), configuration.getApiKey());
171177
UploadCommand uploadCommand = new UploadCommand(client, configuration);
@@ -310,6 +316,8 @@ public void pull(
310316
public void autoTranslate(
311317
@Option(names = {"--apiKey"}, description = "Project API Key") String apiKey,
312318
@Option(names = {"--autoTranslateLanguageKey", "--languageKey", "--languageKeys"}, description = "(Optional) Project language keys to auto-translate", split = ",") List<String> languageKeys,
319+
@Option(names = {"--force"}, description = "(Optional) Force auto-translation for all translations") Boolean forceAutoTranslate,
320+
@Option(names = {"--autoTranslateOptions", "--options"}, description = "(Optional) Auto-translate options") List<String> autoTranslateOptions,
313321
@Option(names = {"--baseUrl"}, description = "(Optional) Set custom server URL") String baseUrl
314322
)
315323
{
@@ -332,6 +340,19 @@ public void autoTranslate(
332340
configuration.setAutoTranslateLanguageKeys(languageKeys);
333341
}
334342

343+
List<String> effectiveAutoTranslateOptions = new ArrayList<>();
344+
if (autoTranslateOptions != null && !autoTranslateOptions.isEmpty())
345+
{
346+
effectiveAutoTranslateOptions.addAll(autoTranslateOptions);
347+
}
348+
349+
if (Boolean.TRUE.equals(forceAutoTranslate))
350+
{
351+
effectiveAutoTranslateOptions.add("FORCE_REPLACE");
352+
}
353+
configuration.setAutoTranslateOptions(effectiveAutoTranslateOptions);
354+
355+
configuration.setAutoTranslateOptions(autoTranslateOptions);
335356
this.effectiveCommandConfiguration = configuration;
336357
SimpleLocalizeClient client = SimpleLocalizeClient.create(configuration.getBaseUrl(), configuration.getApiKey());
337358
AutoTranslationCommand command = new AutoTranslationCommand(client, configuration);

src/main/java/io/simplelocalize/cli/Version.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public class Version
44
{
55

6-
public static final String NUMBER = "2.8.0";
6+
public static final String NUMBER = "2.9.0";
77

88
private Version()
99
{

src/main/java/io/simplelocalize/cli/client/ClientBodyBuilders.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ static HttpRequest.BodyPublisher ofKeysBody(Collection<String> keys) throws Json
3333
return HttpRequest.BodyPublishers.ofString(jsonString);
3434
}
3535

36-
static HttpRequest.BodyPublisher ofStartAutoTranslation(Collection<String> languageKeys) throws JsonProcessingException
36+
static HttpRequest.BodyPublisher ofStartAutoTranslation(Collection<String> languageKeys, Collection<String> options) throws JsonProcessingException
3737
{
38-
StartAutoTranslationRequest request = new StartAutoTranslationRequest(languageKeys, "CLI");
38+
StartAutoTranslationRequest request = new StartAutoTranslationRequest(languageKeys, "CLI", options);
3939
String jsonString = ObjectMapperSingleton.getInstance().writeValueAsString(request);
4040
return HttpRequest.BodyPublishers.ofString(jsonString);
4141
}

src/main/java/io/simplelocalize/cli/client/SimpleLocalizeClient.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.simplelocalize.cli.client;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.jayway.jsonpath.DocumentContext;
45
import com.jayway.jsonpath.JsonPath;
56
import com.jayway.jsonpath.Option;
67
import io.simplelocalize.cli.client.dto.ExportRequest;
@@ -68,12 +69,22 @@ public static String loadApiKeyFromEnvironmentVariable()
6869

6970
public void uploadFile(UploadRequest uploadRequest) throws IOException, InterruptedException
7071
{
71-
URI uri = uriFactory.buildUploadUri(uploadRequest);
72+
URI uri = uriFactory.buildUploadUri(uploadRequest, false);
7273
HttpRequest httpRequest = httpRequestFactory.createUploadFileRequest(uri, uploadRequest);
7374
HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
7475
throwOnError(httpResponse);
7576
}
7677

78+
public String previewFile(UploadRequest uploadRequest) throws IOException, InterruptedException
79+
{
80+
URI uri = uriFactory.buildUploadUri(uploadRequest, true);
81+
HttpRequest httpRequest = httpRequestFactory.createUploadFileRequest(uri, uploadRequest);
82+
HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
83+
throwOnError(httpResponse);
84+
DocumentContext json = JsonPath.parse(httpResponse.body());
85+
return json.read("$.data", String.class);
86+
}
87+
7788
public List<DownloadableFile> exportFiles(ExportRequest exportRequest) throws IOException, InterruptedException
7889
{
7990
URI downloadUri = uriFactory.buildDownloadUri(exportRequest);
@@ -130,12 +141,12 @@ public String getAutoTranslationJobs() throws IOException, InterruptedException
130141
return httpResponse.body();
131142
}
132143

133-
public void startAutoTranslation(List<String> languageKeys) throws IOException, InterruptedException
144+
public void startAutoTranslation(List<String> languageKeys, List<String> options) throws IOException, InterruptedException
134145
{
135146
URI startAutoTranslationUri = uriFactory.buildStartAutoTranslationUri();
136147
HttpRequest httpRequest = httpRequestFactory.createBaseRequest(startAutoTranslationUri)
137148
.header("Content-Type", "application/json; charset=utf-8")
138-
.POST(ClientBodyBuilders.ofStartAutoTranslation(languageKeys)).build();
149+
.POST(ClientBodyBuilders.ofStartAutoTranslation(languageKeys, options)).build();
139150
HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
140151
throwOnError(httpResponse);
141152
}

src/main/java/io/simplelocalize/cli/client/SimpleLocalizeUriFactory.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,16 @@ URI buildDownloadUri(ExportRequest exportRequest)
5454
return URI.create(endpointUrl);
5555
}
5656

57-
58-
URI buildUploadUri(UploadRequest uploadRequest)
57+
URI buildUploadUri(UploadRequest uploadRequest, boolean isPreviewMode)
5958
{
60-
String endpointUrl = baseUrl + "/cli/v2/upload?uploadFormat=" + uploadRequest.format();
59+
String command = "upload";
60+
if (isPreviewMode)
61+
{
62+
command = "upload-preview";
63+
}
64+
65+
String endpointUrl = baseUrl + "/cli/v2/" + command + "?uploadFormat=" + uploadRequest.format();
66+
6167
String languageKey = uploadRequest.languageKey();
6268
if (StringUtils.isNotEmpty(languageKey))
6369
{

src/main/java/io/simplelocalize/cli/client/dto/proxy/Configuration.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ public class Configuration
5555
@Builder.Default
5656
private Boolean dryRun = false;
5757

58+
@Builder.Default
59+
private Boolean preview = false;
60+
5861
/**
5962
* Download command
6063
*/
@@ -75,6 +78,8 @@ public class Configuration
7578
* Auto-translate command
7679
*/
7780
private List<String> autoTranslateLanguageKeys = new ArrayList<>();
81+
@Builder.Default
82+
private List<String> autoTranslateOptions = new ArrayList<>();
7883

7984
/**
8085
* Pull & Publish command

src/main/java/io/simplelocalize/cli/client/dto/proxy/StartAutoTranslationRequest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ public record StartAutoTranslationRequest(
1111
@JsonProperty("languageKeys")
1212
Collection<String> languageKeys,
1313
@JsonProperty("source")
14-
String source)
14+
String source,
15+
@JsonProperty("options")
16+
Collection<String> options
17+
)
1518
{
1619
}

src/main/java/io/simplelocalize/cli/command/AutoTranslationCommand.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,16 @@ public void invoke() throws IOException, InterruptedException
4343
{
4444
log.info("Starting auto-translation for languages: {}", languageKeys);
4545
}
46-
client.startAutoTranslation(languageKeys);
46+
List<String> autoTranslateOptions = Optional.of(configuration)
47+
.map(Configuration::getAutoTranslateOptions)
48+
.orElse(List.of());
49+
50+
if (!autoTranslateOptions.isEmpty())
51+
{
52+
log.info("Auto-translation options: {}", autoTranslateOptions);
53+
}
54+
55+
client.startAutoTranslation(languageKeys, autoTranslateOptions);
4756
log.info("Auto-translation started");
4857
Thread.sleep(5_000);
4958

src/main/java/io/simplelocalize/cli/command/UploadCommand.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ public void invoke() throws IOException, InterruptedException
4040
log.info("Dry run mode enabled, no files will be uploaded");
4141
}
4242

43+
final boolean isPreviewMode = Boolean.TRUE.equals(configuration.getPreview());
44+
if (isPreviewMode)
45+
{
46+
log.info("Preview mode enabled");
47+
}
48+
4349
String uploadPath = configuration.getUploadPath();
4450
if (SystemUtils.isWindows())
4551
{
@@ -145,7 +151,21 @@ public void invoke() throws IOException, InterruptedException
145151
{
146152
continue;
147153
}
148-
client.uploadFile(uploadRequest);
154+
155+
if (isPreviewMode)
156+
{
157+
String output = client.previewFile(uploadRequest);
158+
log.info("{}", output);
159+
} else
160+
{
161+
client.uploadFile(uploadRequest);
162+
}
163+
}
164+
165+
if (isPreviewMode)
166+
{
167+
log.info("Preview completed. No files were imported. To import files, run the command without --preview flag.");
168+
return;
149169
}
150170

151171
if (isDryRun)

0 commit comments

Comments
 (0)