Skip to content
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
4 changes: 4 additions & 0 deletions src/main/java/com/crowdin/client/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.crowdin.client.stringcomments.StringCommentsApi;
import com.crowdin.client.stringcorrections.StringCorrectionsApi;
import com.crowdin.client.stringtranslations.StringTranslationsApi;
import com.crowdin.client.styleguide.StyleGuidesApi;
import com.crowdin.client.tasks.TasksApi;
import com.crowdin.client.teams.TeamsApi;
import com.crowdin.client.translationmemory.TranslationMemoryApi;
Expand Down Expand Up @@ -76,6 +77,7 @@ public class Client extends CrowdinApi {
private final BranchesApi branchesApi;
private final AIApi aiApi;
private final StringCorrectionsApi stringCorrectionsApi;
private final StyleGuidesApi styleGuidesApi;

public Client(Credentials credentials) {
super(credentials);
Expand Down Expand Up @@ -113,6 +115,7 @@ public Client(Credentials credentials) {
this.branchesApi = new BranchesApi(credentials);
this.aiApi = new AIApi(credentials);
this.stringCorrectionsApi = new StringCorrectionsApi(credentials);
this.styleGuidesApi = new StyleGuidesApi(credentials);
}

public Client(Credentials credentials, ClientConfig clientConfig) {
Expand Down Expand Up @@ -151,6 +154,7 @@ public Client(Credentials credentials, ClientConfig clientConfig) {
this.branchesApi = new BranchesApi(credentials, clientConfig);
this.aiApi = new AIApi(credentials, clientConfig);
this.stringCorrectionsApi = new StringCorrectionsApi(credentials, clientConfig);
this.styleGuidesApi = new StyleGuidesApi(credentials, clientConfig);
}

}
128 changes: 128 additions & 0 deletions src/main/java/com/crowdin/client/styleguide/StyleGuidesApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package com.crowdin.client.styleguide;

import com.crowdin.client.core.CrowdinApi;
import com.crowdin.client.core.http.HttpRequestConfig;
import com.crowdin.client.core.http.exceptions.HttpBadRequestException;
import com.crowdin.client.core.http.exceptions.HttpException;
import com.crowdin.client.core.model.*;
import com.crowdin.client.styleguide.model.*;

import java.util.List;
import java.util.Map;
import java.util.Optional;

public class StyleGuidesApi extends CrowdinApi {
public StyleGuidesApi(Credentials credentials) {
super(credentials);
}

public StyleGuidesApi(Credentials credentials, ClientConfig clientConfig) {
super(credentials, clientConfig);
}

/**
* @param styleGuideId style guide identifier
* @see <ul>
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.delete" target="_blank"><b>API Documentation</b></a></li>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.delete" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public void deleteStyleGuide(Long styleGuideId) throws HttpException, HttpBadRequestException {
this.httpClient.delete(this.url + "/style-guides/" + styleGuideId, new HttpRequestConfig(), Void.class);
}

/**
* @param styleGuideId style guide identifier
* @param request request object
* @return updated style guide
* @see <ul>
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.patch" target="_blank"><b>API Documentation</b></a></li>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.patch" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseObject<StyleGuide> editStyleGuide(Long styleGuideId, List<PatchRequest> request) throws HttpException, HttpBadRequestException {
StyleGuideResponseObject styleGuideResponseObject = this.httpClient.patch(this.url + "/style-guides/" + styleGuideId, request, new HttpRequestConfig(), StyleGuideResponseObject.class);
return ResponseObject.of(styleGuideResponseObject.getData());
}

/**
* @param styleGuideId style guide identifier
* @return style guide
* @see <ul>
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.get" target="_blank"><b>API Documentation</b></a></li>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.get" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseObject<StyleGuide> getStyleGuide(Long styleGuideId) throws HttpException, HttpBadRequestException {
StyleGuideResponseObject styleGuideResponseObject = this.httpClient.get(this.url + "/style-guides/" + styleGuideId, new HttpRequestConfig(), StyleGuideResponseObject.class);
return ResponseObject.of(styleGuideResponseObject.getData());
}

/**
* @param request request object
* @return newly created style guide
* @see <ul>
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.post" target="_blank"><b>API Documentation</b></a></li>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.post" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseObject<StyleGuide> addStyleGuide(AddStyleGuideRequest request) throws HttpException, HttpBadRequestException {
StyleGuideResponseObject styleGuideResponseObject = this.httpClient.post(this.url + "/style-guides", request, new HttpRequestConfig(), StyleGuideResponseObject.class);
return ResponseObject.of(styleGuideResponseObject.getData());
}

/**
* @param userId user identifier
* @param limit maximum number of items to retrieve (default 25)
* @param offset starting offset in the collection (default 0)
* @return list of style guides
* @see <ul>
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>API Documentation</b></a></li>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseList<StyleGuide> listStyleGuides(Long userId, Integer limit, Integer offset) throws HttpException, HttpBadRequestException {
ListStyleGuidesParams params = new ListStyleGuidesParams();
params.setUserId(userId);
params.setLimit(limit);
params.setOffset(offset);
return listStyleGuides(params);
}

/**
* @param userId user identifier
* @param limit maximum number of items to retrieve (default 25)
* @param offset starting offset in the collection (default 0)
* @param orderBy list of OrderByField
* @return list of style guides
* @see <ul>
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>API Documentation</b></a></li>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseList<StyleGuide> listStyleGuides(Long userId, Integer limit, Integer offset, List<OrderByField> orderBy) throws HttpException, HttpBadRequestException {
ListStyleGuidesParams params = new ListStyleGuidesParams();
params.setUserId(userId);
params.setLimit(limit);
params.setOffset(offset);
params.setOrderByList(orderBy);
return listStyleGuides(params);
}

public ResponseList<StyleGuide> listStyleGuides(ListStyleGuidesParams params) throws HttpException, HttpBadRequestException {
ListStyleGuidesParams query = Optional.ofNullable(params).orElse(new ListStyleGuidesParams());

String orderBy = query.getOrderByList() != null
? OrderByField.generateSortParam(query.getOrderByList())
: query.getOrderBy();

Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
"userId", Optional.ofNullable(query.getUserId()),
"limit", Optional.ofNullable(query.getLimit()),
"offset", Optional.ofNullable(query.getOffset()),
"orderBy", Optional.ofNullable(orderBy)
);
StyleGuideResponseList styleGuideResponseList = this.httpClient.get(this.url + "/style-guides", new HttpRequestConfig(queryParams), StyleGuideResponseList.class);
return StyleGuideResponseList.to(styleGuideResponseList);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.crowdin.client.styleguide.model;

import lombok.Data;

import java.util.List;

@Data
public class AddStyleGuideRequest {
private String name;
private String aiInstructions;
private List<String> languageIds;
private List<Long> projectIds;
private Boolean isShared;
private Long storageId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.crowdin.client.styleguide.model;

import com.crowdin.client.core.model.OrderByField;
import com.crowdin.client.core.model.Pagination;
import lombok.Data;

import java.util.List;

@Data
public class ListStyleGuidesParams extends Pagination {
private Long userId;
private String orderBy;
private List<OrderByField> orderByList;
}
21 changes: 21 additions & 0 deletions src/main/java/com/crowdin/client/styleguide/model/StyleGuide.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.crowdin.client.styleguide.model;

import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
public class StyleGuide {
private Long id;
private String name;
private String aiInstructions;
private Long userId;
private List<String> languageIds;
private List<Long> projectIds;
private Boolean isShared;
private String webUrl;
private String downloadLink;
private Date createdAt;
private Date updatedAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.crowdin.client.styleguide.model;

import com.crowdin.client.core.model.Pagination;
import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.core.model.ResponseObject;
import lombok.Data;

import java.util.List;
import java.util.stream.Collectors;

@Data
public class StyleGuideResponseList {
private List<StyleGuideResponseObject> data;
private Pagination pagination;

public static ResponseList<StyleGuide> to(StyleGuideResponseList styleGuideResponseList) {
return ResponseList.of(
styleGuideResponseList.getData().stream()
.map(StyleGuideResponseObject::getData)
.map(ResponseObject::of)
.collect(Collectors.toList()),
styleGuideResponseList.getPagination()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.crowdin.client.styleguide.model;

import lombok.Data;

@Data
public class StyleGuideResponseObject {
private StyleGuide data;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.crowdin.client.styleguide;

import com.crowdin.client.core.model.OrderByField;
import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.core.model.SortOrder;
import com.crowdin.client.framework.RequestMock;
import com.crowdin.client.framework.TestClient;
import com.crowdin.client.styleguide.model.StyleGuide;
import org.apache.http.client.methods.HttpGet;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class StyleGuidesApiStyleGuidesOrderByIdAscTest extends TestClient {

private final Long styleGuideId = 2L;
private final Long styleGuide2Id = 3L;

@Override
public List<RequestMock> getMocks() {
return Arrays.asList(
RequestMock.build(this.url + "/style-guides", HttpGet.METHOD_NAME, "api/styleguide/listStyleGuidesOrderByIdAsc.json", new HashMap<String, String>() {{
put("orderBy", "id%20asc");
}})
);
}

@Test
public void listStyleGuidesTest_orderByIdNull() {
OrderByField orderById = new OrderByField();
orderById.setFieldName("id");

ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuides(null, null, null, singletonList(orderById));
assertEquals(2, styleGuideResponseList.getData().size());
assertEquals(styleGuideId, styleGuideResponseList.getData().get(0).getData().getId());
assertEquals(styleGuide2Id, styleGuideResponseList.getData().get(1).getData().getId());
}

@Test
public void listStyleGuidesTest_orderByIdAsc() {
OrderByField orderById = new OrderByField();
orderById.setFieldName("id");
orderById.setOrderBy(SortOrder.ASC);

ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuides(null, null, null, singletonList(orderById));
assertEquals(2, styleGuideResponseList.getData().size());
assertEquals(styleGuideId, styleGuideResponseList.getData().get(0).getData().getId());
assertEquals(styleGuide2Id, styleGuideResponseList.getData().get(1).getData().getId());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.crowdin.client.styleguide;

import com.crowdin.client.core.model.OrderByField;
import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.core.model.SortOrder;
import com.crowdin.client.framework.RequestMock;
import com.crowdin.client.framework.TestClient;
import com.crowdin.client.styleguide.model.StyleGuide;
import org.apache.http.client.methods.HttpGet;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class StyleGuidesApiStyleGuidesOrderByIdDescTest extends TestClient {

private final Long styleGuideId = 2L;
private final Long styleGuide2Id = 3L;

@Override
public List<RequestMock> getMocks() {
return Arrays.asList(
RequestMock.build(this.url + "/style-guides", HttpGet.METHOD_NAME, "api/styleguide/listStyleGuidesOrderByIdDesc.json", new HashMap<String, String>() {{
put("orderBy", "id%20desc");
}})
);
}

@Test
public void listStyleGuidesTest_orderByIdDesc() {
OrderByField orderById = new OrderByField();
orderById.setFieldName("id");
orderById.setOrderBy(SortOrder.DESC);

ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuides(null, null, null, singletonList(orderById));
assertEquals(2, styleGuideResponseList.getData().size());
assertEquals(styleGuide2Id, styleGuideResponseList.getData().get(0).getData().getId());
assertEquals(styleGuideId, styleGuideResponseList.getData().get(1).getData().getId());
}
}
Loading
Loading