Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: strings based project functionality #714

Merged
merged 5 commits into from
Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions src/main/java/com/crowdin/cli/client/ClientDistribution.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.crowdin.cli.client;

import com.crowdin.client.distributions.model.AddDistributionRequest;
import com.crowdin.client.distributions.model.Distribution;
import com.crowdin.client.distributions.model.DistributionRelease;
import com.crowdin.client.distributions.model.*;

import java.util.List;

Expand All @@ -12,7 +10,13 @@ public interface ClientDistribution extends Client {

Distribution addDistribution(AddDistributionRequest request);

Distribution addDistributionStringsBased(AddDistributionStringsBasedRequest request);

DistributionRelease release(String hash);

DistributionStringsBasedRelease releaseStringsBased(String hash);

DistributionRelease getDistributionRelease(String hash);

DistributionStringsBasedRelease getDistributionStringsBasedRelease(String hash);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.crowdin.cli.client;

import com.crowdin.client.distributions.model.AddDistributionRequest;
import com.crowdin.client.distributions.model.Distribution;
import com.crowdin.client.distributions.model.DistributionRelease;
import com.crowdin.client.distributions.model.*;

import java.util.List;

Expand All @@ -29,18 +27,38 @@ public Distribution addDistribution(AddDistributionRequest distributionRequest)
.getData());
}

@Override
public Distribution addDistributionStringsBased(AddDistributionStringsBasedRequest distributionRequest) {
return executeRequest(() -> this.client.getDistributionsApi()
.addDistributionStringsBased(Long.valueOf(projectId), distributionRequest)
.getData());
}

@Override
public DistributionRelease release(String hash) {
return executeRequest(() -> this.client.getDistributionsApi()
.createDistributionRelease(Long.valueOf(projectId), hash)
.getData());
}

@Override
public DistributionStringsBasedRelease releaseStringsBased(String hash) {
return executeRequest(() -> this.client.getDistributionsApi()
.createDistributionStringsBasedRelease(Long.valueOf(projectId), hash)
.getData());
}

@Override
public DistributionRelease getDistributionRelease(String hash) {
return executeRequest(() -> this.client.getDistributionsApi()
.getDistributionRelease(Long.valueOf(projectId), hash)
.getData());
}

@Override
public DistributionStringsBasedRelease getDistributionStringsBasedRelease(String hash) {
return executeRequest(() -> this.client.getDistributionsApi()
.getDistributionStringsBasedRelease(Long.valueOf(projectId), hash)
.getData());
}
}
22 changes: 17 additions & 5 deletions src/main/java/com/crowdin/cli/client/CrowdinProjectClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@
import com.crowdin.client.projectsgroups.model.ProjectSettings;
import com.crowdin.client.projectsgroups.model.Type;
import com.crowdin.client.sourcefiles.model.*;
import com.crowdin.client.sourcestrings.model.AddSourceStringRequest;
import com.crowdin.client.sourcestrings.model.SourceString;
import com.crowdin.client.sourcestrings.model.UploadStringsProgress;
import com.crowdin.client.sourcestrings.model.UploadStringsRequest;
import com.crowdin.client.sourcestrings.model.*;
import com.crowdin.client.storage.model.Storage;
import com.crowdin.client.stringcomments.model.AddStringCommentRequest;
import com.crowdin.client.stringcomments.model.StringComment;
Expand Down Expand Up @@ -67,7 +64,8 @@ private void populateProjectWithStructure(CrowdinProjectFull project, String bra
.ifPresent(project::setBranch);
Long branchId = Optional.ofNullable(project.getBranch()).map(Branch::getId).orElse(null);

if (Objects.equals(project.getType(), Type.STRINGS_BASED)) {
boolean isStringsBasedProject = Objects.equals(project.getType(), Type.STRINGS_BASED);
if (isStringsBasedProject) {
return;
}
project.setFiles(executeRequestFullList((limit, offset) -> this.client.getSourceFilesApi()
Expand Down Expand Up @@ -328,6 +326,13 @@ public SourceString addSourceString(AddSourceStringRequest request) {
.getData());
}

@Override
public SourceString addSourceStringStringsBased(AddSourceStringStringsBasedRequest request) {
return executeRequest(() -> this.client.getSourceStringsApi()
.addSourceStringStringsBased(this.projectId, request)
.getData());
}

@Override
public List<SourceString> listSourceString(Long fileId, Long branchId, String labelIds, String filter, String croql) {
return executeRequestFullList((limit, offset) -> this.client.getSourceStringsApi()
Expand Down Expand Up @@ -391,6 +396,13 @@ public PreTranslationStatus startPreTranslation(ApplyPreTranslationRequest reque
.getData());
}

@Override
public PreTranslationStatus startPreTranslationStringsBased(ApplyPreTranslationStringsBasedRequest request) {
return executeRequest(() ->this.client.getTranslationsApi()
.applyPreTranslationStringsBased(this.projectId, request)
.getData());
}

@Override
public PreTranslationStatus checkPreTranslation(String preTranslationId) {
return executeRequest(() -> this.client.getTranslationsApi()
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/com/crowdin/cli/client/ProjectClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@
import com.crowdin.client.labels.model.AddLabelRequest;
import com.crowdin.client.labels.model.Label;
import com.crowdin.client.sourcefiles.model.*;
import com.crowdin.client.sourcestrings.model.AddSourceStringRequest;
import com.crowdin.client.sourcestrings.model.SourceString;
import com.crowdin.client.sourcestrings.model.UploadStringsProgress;
import com.crowdin.client.sourcestrings.model.UploadStringsRequest;
import com.crowdin.client.sourcestrings.model.*;
import com.crowdin.client.stringcomments.model.AddStringCommentRequest;
import com.crowdin.client.stringcomments.model.StringComment;
import com.crowdin.client.translations.model.*;
Expand Down Expand Up @@ -83,6 +80,8 @@ default CrowdinProjectFull downloadFullProject() {

SourceString addSourceString(AddSourceStringRequest request);

SourceString addSourceStringStringsBased(AddSourceStringStringsBasedRequest request);

List<SourceString> listSourceString(Long fileId, Long branchId, String labelIds, String filter, String croql);

void deleteSourceString(Long id);
Expand All @@ -101,5 +100,7 @@ default CrowdinProjectFull downloadFullProject() {

PreTranslationStatus startPreTranslation(ApplyPreTranslationRequest request);

PreTranslationStatus startPreTranslationStringsBased(ApplyPreTranslationStringsBasedRequest request);

PreTranslationStatus checkPreTranslation(String preTranslationId);
}
4 changes: 2 additions & 2 deletions src/main/java/com/crowdin/cli/commands/Actions.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ NewAction<ProjectProperties, ProjectClient> status(
boolean noProgress, String branchName, String languageId, String file, String directory, boolean isVerbose, boolean showTranslated, boolean showApproved, boolean failIfIncomplete);

NewAction<ProjectProperties, ProjectClient> stringAdd(
boolean noProgress, String text, String identifier, Integer maxLength, String context, List<String> files, List<String> labelNames, Boolean hidden);
boolean noProgress, String text, String identifier, Integer maxLength, String context, List<String> files, List<String> labelNames, String branch, Boolean hidden);

NewAction<ProjectProperties, ProjectClient> stringComment(boolean plainView,
boolean noProgress, String text, String stringId, String language, String type, String issueType);
Expand Down Expand Up @@ -97,7 +97,7 @@ NewAction<ProjectProperties, ClientTask> taskAdd(

NewAction<ProjectProperties, ClientDistribution> distributionAdd(boolean noProgress, boolean plainView, String name, ExportMode exportMode, List<String> files, List<Integer> bundleIds, String branch, ProjectClient projectClient);

NewAction<ProjectProperties, ClientDistribution> distributionRelease(boolean noProgress, boolean plainView, String hash);
NewAction<ProjectProperties, ClientDistribution> distributionRelease(boolean noProgress, boolean plainView, String hash, ProjectClient projectClient);

NewAction<ProjectProperties, ClientComment> commentList(boolean plainView, boolean isVerbose, String stringId, com.crowdin.client.stringcomments.model.Type type, com.crowdin.client.issues.model.Type issueType, IssueStatus status);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ public NewAction<ProjectProperties, ProjectClient> status(

@Override
public NewAction<ProjectProperties, ProjectClient> stringAdd(
boolean noProgress, String text, String identifier, Integer maxLength, String context, List<String> files, List<String> labelNames, Boolean hidden
boolean noProgress, String text, String identifier, Integer maxLength, String context, List<String> files, List<String> labelNames, String branch, Boolean hidden
) {
return new StringAddAction(noProgress, text, identifier, maxLength, context, files, labelNames, hidden);
return new StringAddAction(noProgress, text, identifier, maxLength, context, files, labelNames, branch, hidden);
}
@Override
public NewAction<ProjectProperties, ProjectClient> stringComment(boolean plainView,
Expand Down Expand Up @@ -189,8 +189,8 @@ public NewAction<ProjectProperties, ClientDistribution> distributionAdd(boolean
}

@Override
public NewAction<ProjectProperties, ClientDistribution> distributionRelease(boolean noProgress, boolean plainView, String hash) {
return new DistributionReleaseAction(noProgress, plainView, hash);
public NewAction<ProjectProperties, ClientDistribution> distributionRelease(boolean noProgress, boolean plainView, String hash, ProjectClient projectClient) {
return new DistributionReleaseAction(noProgress, plainView, hash, projectClient);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,24 @@
import com.crowdin.cli.utils.Utils;
import com.crowdin.cli.utils.console.ConsoleSpinner;
import com.crowdin.client.distributions.model.AddDistributionRequest;
import com.crowdin.client.distributions.model.AddDistributionStringsBasedRequest;
import com.crowdin.client.distributions.model.Distribution;
import com.crowdin.client.distributions.model.ExportMode;
import com.crowdin.client.projectsgroups.model.Type;
import com.crowdin.client.sourcefiles.model.Branch;
import com.crowdin.client.sourcefiles.model.FileInfo;
import lombok.AllArgsConstructor;

import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

import static com.crowdin.cli.BaseCli.RESOURCE_BUNDLE;
import static com.crowdin.cli.utils.console.ExecutionStatus.OK;
import static com.crowdin.client.distributions.model.ExportMode.DEFAULT;

@AllArgsConstructor
class DistributionAddAction implements NewAction<ProjectProperties, ClientDistribution> {
Expand All @@ -47,8 +51,13 @@ public void act(Outputter out, ProjectProperties pb, ClientDistribution client)
this.plainView,
() -> this.projectClient.downloadFullProject(this.branch)
);
boolean isStringsBasedProject = Objects.equals(project.getType(), Type.STRINGS_BASED);

List<Long> fileIds = null;
if (files != null) {
if (isStringsBasedProject) {
throw new RuntimeException(RESOURCE_BUNDLE.getString("message.no_file_string_project"));
}
Map<String, Long> projectBranches = project.getBranches().values().stream()
.collect(Collectors.toMap(Branch::getName, Branch::getId));
List<String> projectFiles = project.getFiles().stream()
Expand All @@ -74,19 +83,36 @@ public void act(Outputter out, ProjectProperties pb, ClientDistribution client)
.filter(file -> files.contains(file.getPath()))
.map(FileInfo::getId)
.collect(Collectors.toList());
} else if (exportMode == DEFAULT && !isStringsBasedProject) {
throw new RuntimeException(RESOURCE_BUNDLE.getString("error.distribution.empty_file"));
}

Distribution distribution;
AddDistributionRequest addDistributionRequest = RequestBuilder.addDistribution(name, exportMode, fileIds, bundleIds);
Optional.ofNullable(name).ifPresent(addDistributionRequest::setName);
Optional.ofNullable(exportMode).ifPresent(addDistributionRequest::setExportMode);
Optional.ofNullable(fileIds).ifPresent(addDistributionRequest::setFileIds);
Optional.ofNullable(bundleIds).ifPresent(addDistributionRequest::setBundleIds);
Distribution distribution = null;
if (!isStringsBasedProject) {
AddDistributionRequest addDistributionRequest = RequestBuilder.addDistribution(name, exportMode, fileIds, bundleIds);
Optional.ofNullable(name).ifPresent(addDistributionRequest::setName);
Optional.ofNullable(exportMode).ifPresent(addDistributionRequest::setExportMode);
Optional.ofNullable(fileIds).ifPresent(addDistributionRequest::setFileIds);
Optional.ofNullable(bundleIds).ifPresent(addDistributionRequest::setBundleIds);

try {
distribution = client.addDistribution(addDistributionRequest);
} catch (Exception e) {
throw new RuntimeException(String.format(RESOURCE_BUNDLE.getString("error.distribution_is_not_added"), addDistributionRequest), e);
}
} else if (isStringsBasedProject) {
AddDistributionStringsBasedRequest addDistributionRequest = new AddDistributionStringsBasedRequest();
addDistributionRequest.setName(name);
if (Objects.isNull(bundleIds)) {
throw new RuntimeException(RESOURCE_BUNDLE.getString("error.distribution.empty_bundle_ids"));
}
addDistributionRequest.setBundleIds(bundleIds);

try {
distribution = client.addDistribution(addDistributionRequest);
} catch (Exception e) {
throw new RuntimeException(String.format(RESOURCE_BUNDLE.getString("error.distribution_is_not_added"), addDistributionRequest), e);
try {
distribution = client.addDistributionStringsBased(addDistributionRequest);
} catch (Exception e) {
throw new RuntimeException(String.format(RESOURCE_BUNDLE.getString("error.distribution_is_not_added"), addDistributionRequest), e);
}
}

if (!plainView) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package com.crowdin.cli.commands.actions;

import com.crowdin.cli.client.ClientDistribution;
import com.crowdin.cli.client.CrowdinProjectInfo;
import com.crowdin.cli.client.ProjectClient;
import com.crowdin.cli.commands.NewAction;
import com.crowdin.cli.commands.Outputter;
import com.crowdin.cli.properties.ProjectProperties;
import com.crowdin.cli.utils.console.ConsoleSpinner;
import com.crowdin.client.distributions.model.DistributionRelease;
import com.crowdin.client.distributions.model.DistributionStringsBasedRelease;
import com.crowdin.client.projectsgroups.model.Type;
import lombok.AllArgsConstructor;

import java.util.Objects;

import static com.crowdin.cli.BaseCli.RESOURCE_BUNDLE;
import static com.crowdin.cli.utils.console.ExecutionStatus.OK;

Expand All @@ -18,13 +24,28 @@ class DistributionReleaseAction implements NewAction<ProjectProperties, ClientDi
private boolean plainView;
private String hash;

private ProjectClient projectClient;

@Override
public void act(Outputter out, ProjectProperties pb, ClientDistribution client) {
this.releaseDistribution(out, client);
CrowdinProjectInfo project = ConsoleSpinner.execute(
out,
"message.spinner.fetching_project_info", "error.collect_project_info",
this.noProgress,
this.plainView,
() -> this.projectClient.downloadProjectInfo()
);
boolean isStringsBasedProject = Objects.equals(project.getType(), Type.STRINGS_BASED);

if (!isStringsBasedProject) {
this.releaseDistributionFilesBased(out, client);
} else {
this.releaseDistributionStringsBased(out, client);
}
out.println(OK.withIcon(String.format(RESOURCE_BUNDLE.getString("message.distribution.released"), hash)));
}

private DistributionRelease releaseDistribution(Outputter out, ClientDistribution client) {
private DistributionRelease releaseDistributionFilesBased(Outputter out, ClientDistribution client) {
return ConsoleSpinner.execute(
out,
"message.spinner.releasing_distribution",
Expand All @@ -43,7 +64,37 @@ private DistributionRelease releaseDistribution(Outputter out, ClientDistributio
release = client.getDistributionRelease(hash);

if ("failed".equalsIgnoreCase(release.getStatus())) {
throw new RuntimeException(RESOURCE_BUNDLE.getString("message.spinner.build_has_failed"));
throw new RuntimeException(RESOURCE_BUNDLE.getString("error.distribution_failed"));
}
}

ConsoleSpinner.update(String.format(RESOURCE_BUNDLE.getString("message.spinner.releasing_distribution_percents"), 100));

return release;
}
);
}

private DistributionStringsBasedRelease releaseDistributionStringsBased(Outputter out, ClientDistribution client) {
return ConsoleSpinner.execute(
out,
"message.spinner.releasing_distribution",
"error.distribution_is_not_released",
this.noProgress,
false,
() -> {
DistributionStringsBasedRelease release = client.releaseStringsBased(hash);

while (!"success".equalsIgnoreCase(release.getStatus())) {
ConsoleSpinner.update(
String.format(RESOURCE_BUNDLE.getString("message.spinner.releasing_distribution_percents"),
release.getProgress()));
Thread.sleep(1000);

release = client.getDistributionStringsBasedRelease(hash);

if ("failed".equalsIgnoreCase(release.getStatus())) {
throw new RuntimeException(RESOURCE_BUNDLE.getString("error.distribution_failed"));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ public void act(Outputter out, ProjectProperties properties, ProjectClient clien
CrowdinProjectFull project = ConsoleSpinner
.execute(out, "message.spinner.fetching_project_info", "error.collect_project_info",
true, true, client::downloadFullProject);
if (Objects.equals(project.getType(), Type.STRINGS_BASED)) {
boolean isStringsBasedProject = Objects.equals(project.getType(), Type.STRINGS_BASED);
if (isStringsBasedProject) {
out.println(SKIPPED.withIcon(RESOURCE_BUNDLE.getString("message.no_file_string_project")));
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ public void act(Outputter out, ProjectProperties properties, ProjectClient clien
CrowdinProjectFull project = ConsoleSpinner
.execute(out, "message.spinner.fetching_project_info", "error.collect_project_info",
false, false, () -> client.downloadFullProject(branch));
if (Objects.equals(project.getType(), Type.STRINGS_BASED)) {
boolean isStringsBasedProject = Objects.equals(project.getType(), Type.STRINGS_BASED);
if (isStringsBasedProject) {
out.println(WARNING.withIcon(RESOURCE_BUNDLE.getString("message.no_file_string_project")));
return;
}
Expand Down
Loading
Loading