Skip to content

Commit 9105e6e

Browse files
authored
feat: add Style Guides API (#369)
1 parent dcdc704 commit 9105e6e

16 files changed

Lines changed: 529 additions & 0 deletions

src/main/java/com/crowdin/client/Client.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.crowdin.client.stringcomments.StringCommentsApi;
2828
import com.crowdin.client.stringcorrections.StringCorrectionsApi;
2929
import com.crowdin.client.stringtranslations.StringTranslationsApi;
30+
import com.crowdin.client.styleguide.StyleGuidesApi;
3031
import com.crowdin.client.tasks.TasksApi;
3132
import com.crowdin.client.teams.TeamsApi;
3233
import com.crowdin.client.translationmemory.TranslationMemoryApi;
@@ -76,6 +77,7 @@ public class Client extends CrowdinApi {
7677
private final BranchesApi branchesApi;
7778
private final AIApi aiApi;
7879
private final StringCorrectionsApi stringCorrectionsApi;
80+
private final StyleGuidesApi styleGuidesApi;
7981

8082
public Client(Credentials credentials) {
8183
super(credentials);
@@ -113,6 +115,7 @@ public Client(Credentials credentials) {
113115
this.branchesApi = new BranchesApi(credentials);
114116
this.aiApi = new AIApi(credentials);
115117
this.stringCorrectionsApi = new StringCorrectionsApi(credentials);
118+
this.styleGuidesApi = new StyleGuidesApi(credentials);
116119
}
117120

118121
public Client(Credentials credentials, ClientConfig clientConfig) {
@@ -151,6 +154,7 @@ public Client(Credentials credentials, ClientConfig clientConfig) {
151154
this.branchesApi = new BranchesApi(credentials, clientConfig);
152155
this.aiApi = new AIApi(credentials, clientConfig);
153156
this.stringCorrectionsApi = new StringCorrectionsApi(credentials, clientConfig);
157+
this.styleGuidesApi = new StyleGuidesApi(credentials, clientConfig);
154158
}
155159

156160
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package com.crowdin.client.styleguide;
2+
3+
import com.crowdin.client.core.CrowdinApi;
4+
import com.crowdin.client.core.http.HttpRequestConfig;
5+
import com.crowdin.client.core.http.exceptions.HttpBadRequestException;
6+
import com.crowdin.client.core.http.exceptions.HttpException;
7+
import com.crowdin.client.core.model.*;
8+
import com.crowdin.client.styleguide.model.*;
9+
10+
import java.util.List;
11+
import java.util.Map;
12+
import java.util.Optional;
13+
14+
public class StyleGuidesApi extends CrowdinApi {
15+
public StyleGuidesApi(Credentials credentials) {
16+
super(credentials);
17+
}
18+
19+
public StyleGuidesApi(Credentials credentials, ClientConfig clientConfig) {
20+
super(credentials, clientConfig);
21+
}
22+
23+
/**
24+
* @param styleGuideId style guide identifier
25+
* @see <ul>
26+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.delete" target="_blank"><b>API Documentation</b></a></li>
27+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.delete" target="_blank"><b>Enterprise API Documentation</b></a></li>
28+
* </ul>
29+
*/
30+
public void deleteStyleGuide(Long styleGuideId) throws HttpException, HttpBadRequestException {
31+
this.httpClient.delete(this.url + "/style-guides/" + styleGuideId, new HttpRequestConfig(), Void.class);
32+
}
33+
34+
/**
35+
* @param styleGuideId style guide identifier
36+
* @param request request object
37+
* @return updated style guide
38+
* @see <ul>
39+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.patch" target="_blank"><b>API Documentation</b></a></li>
40+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.patch" target="_blank"><b>Enterprise API Documentation</b></a></li>
41+
* </ul>
42+
*/
43+
public ResponseObject<StyleGuide> editStyleGuide(Long styleGuideId, List<PatchRequest> request) throws HttpException, HttpBadRequestException {
44+
StyleGuideResponseObject styleGuideResponseObject = this.httpClient.patch(this.url + "/style-guides/" + styleGuideId, request, new HttpRequestConfig(), StyleGuideResponseObject.class);
45+
return ResponseObject.of(styleGuideResponseObject.getData());
46+
}
47+
48+
/**
49+
* @param styleGuideId style guide identifier
50+
* @return style guide
51+
* @see <ul>
52+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.get" target="_blank"><b>API Documentation</b></a></li>
53+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.get" target="_blank"><b>Enterprise API Documentation</b></a></li>
54+
* </ul>
55+
*/
56+
public ResponseObject<StyleGuide> getStyleGuide(Long styleGuideId) throws HttpException, HttpBadRequestException {
57+
StyleGuideResponseObject styleGuideResponseObject = this.httpClient.get(this.url + "/style-guides/" + styleGuideId, new HttpRequestConfig(), StyleGuideResponseObject.class);
58+
return ResponseObject.of(styleGuideResponseObject.getData());
59+
}
60+
61+
/**
62+
* @param request request object
63+
* @return newly created style guide
64+
* @see <ul>
65+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.post" target="_blank"><b>API Documentation</b></a></li>
66+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.post" target="_blank"><b>Enterprise API Documentation</b></a></li>
67+
* </ul>
68+
*/
69+
public ResponseObject<StyleGuide> addStyleGuide(AddStyleGuideRequest request) throws HttpException, HttpBadRequestException {
70+
StyleGuideResponseObject styleGuideResponseObject = this.httpClient.post(this.url + "/style-guides", request, new HttpRequestConfig(), StyleGuideResponseObject.class);
71+
return ResponseObject.of(styleGuideResponseObject.getData());
72+
}
73+
74+
/**
75+
* @param userId user identifier
76+
* @param limit maximum number of items to retrieve (default 25)
77+
* @param offset starting offset in the collection (default 0)
78+
* @return list of style guides
79+
* @see <ul>
80+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>API Documentation</b></a></li>
81+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
82+
* </ul>
83+
*/
84+
public ResponseList<StyleGuide> listStyleGuides(Long userId, Integer limit, Integer offset) throws HttpException, HttpBadRequestException {
85+
ListStyleGuidesParams params = new ListStyleGuidesParams();
86+
params.setUserId(userId);
87+
params.setLimit(limit);
88+
params.setOffset(offset);
89+
return listStyleGuides(params);
90+
}
91+
92+
/**
93+
* @param userId user identifier
94+
* @param limit maximum number of items to retrieve (default 25)
95+
* @param offset starting offset in the collection (default 0)
96+
* @param orderBy list of OrderByField
97+
* @return list of style guides
98+
* @see <ul>
99+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>API Documentation</b></a></li>
100+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.style-guides.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
101+
* </ul>
102+
*/
103+
public ResponseList<StyleGuide> listStyleGuides(Long userId, Integer limit, Integer offset, List<OrderByField> orderBy) throws HttpException, HttpBadRequestException {
104+
ListStyleGuidesParams params = new ListStyleGuidesParams();
105+
params.setUserId(userId);
106+
params.setLimit(limit);
107+
params.setOffset(offset);
108+
params.setOrderByList(orderBy);
109+
return listStyleGuides(params);
110+
}
111+
112+
public ResponseList<StyleGuide> listStyleGuides(ListStyleGuidesParams params) throws HttpException, HttpBadRequestException {
113+
ListStyleGuidesParams query = Optional.ofNullable(params).orElse(new ListStyleGuidesParams());
114+
115+
String orderBy = query.getOrderByList() != null
116+
? OrderByField.generateSortParam(query.getOrderByList())
117+
: query.getOrderBy();
118+
119+
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
120+
"userId", Optional.ofNullable(query.getUserId()),
121+
"limit", Optional.ofNullable(query.getLimit()),
122+
"offset", Optional.ofNullable(query.getOffset()),
123+
"orderBy", Optional.ofNullable(orderBy)
124+
);
125+
StyleGuideResponseList styleGuideResponseList = this.httpClient.get(this.url + "/style-guides", new HttpRequestConfig(queryParams), StyleGuideResponseList.class);
126+
return StyleGuideResponseList.to(styleGuideResponseList);
127+
}
128+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.crowdin.client.styleguide.model;
2+
3+
import lombok.Data;
4+
5+
import java.util.List;
6+
7+
@Data
8+
public class AddStyleGuideRequest {
9+
private String name;
10+
private String aiInstructions;
11+
private List<String> languageIds;
12+
private List<Long> projectIds;
13+
private Boolean isShared;
14+
private Long storageId;
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.crowdin.client.styleguide.model;
2+
3+
import com.crowdin.client.core.model.OrderByField;
4+
import com.crowdin.client.core.model.Pagination;
5+
import lombok.Data;
6+
7+
import java.util.List;
8+
9+
@Data
10+
public class ListStyleGuidesParams extends Pagination {
11+
private Long userId;
12+
private String orderBy;
13+
private List<OrderByField> orderByList;
14+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.crowdin.client.styleguide.model;
2+
3+
import lombok.Data;
4+
5+
import java.util.Date;
6+
import java.util.List;
7+
8+
@Data
9+
public class StyleGuide {
10+
private Long id;
11+
private String name;
12+
private String aiInstructions;
13+
private Long userId;
14+
private List<String> languageIds;
15+
private List<Long> projectIds;
16+
private Boolean isShared;
17+
private String webUrl;
18+
private String downloadLink;
19+
private Date createdAt;
20+
private Date updatedAt;
21+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.crowdin.client.styleguide.model;
2+
3+
import com.crowdin.client.core.model.Pagination;
4+
import com.crowdin.client.core.model.ResponseList;
5+
import com.crowdin.client.core.model.ResponseObject;
6+
import lombok.Data;
7+
8+
import java.util.List;
9+
import java.util.stream.Collectors;
10+
11+
@Data
12+
public class StyleGuideResponseList {
13+
private List<StyleGuideResponseObject> data;
14+
private Pagination pagination;
15+
16+
public static ResponseList<StyleGuide> to(StyleGuideResponseList styleGuideResponseList) {
17+
return ResponseList.of(
18+
styleGuideResponseList.getData().stream()
19+
.map(StyleGuideResponseObject::getData)
20+
.map(ResponseObject::of)
21+
.collect(Collectors.toList()),
22+
styleGuideResponseList.getPagination()
23+
);
24+
}
25+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.crowdin.client.styleguide.model;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class StyleGuideResponseObject {
7+
private StyleGuide data;
8+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.crowdin.client.styleguide;
2+
3+
import com.crowdin.client.core.model.OrderByField;
4+
import com.crowdin.client.core.model.ResponseList;
5+
import com.crowdin.client.core.model.SortOrder;
6+
import com.crowdin.client.framework.RequestMock;
7+
import com.crowdin.client.framework.TestClient;
8+
import com.crowdin.client.styleguide.model.StyleGuide;
9+
import org.apache.http.client.methods.HttpGet;
10+
import org.junit.jupiter.api.Test;
11+
12+
import java.util.Arrays;
13+
import java.util.HashMap;
14+
import java.util.List;
15+
16+
import static java.util.Collections.singletonList;
17+
import static org.junit.jupiter.api.Assertions.assertEquals;
18+
19+
public class StyleGuidesApiStyleGuidesOrderByIdAscTest extends TestClient {
20+
21+
private final Long styleGuideId = 2L;
22+
private final Long styleGuide2Id = 3L;
23+
24+
@Override
25+
public List<RequestMock> getMocks() {
26+
return Arrays.asList(
27+
RequestMock.build(this.url + "/style-guides", HttpGet.METHOD_NAME, "api/styleguide/listStyleGuidesOrderByIdAsc.json", new HashMap<String, String>() {{
28+
put("orderBy", "id%20asc");
29+
}})
30+
);
31+
}
32+
33+
@Test
34+
public void listStyleGuidesTest_orderByIdNull() {
35+
OrderByField orderById = new OrderByField();
36+
orderById.setFieldName("id");
37+
38+
ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuides(null, null, null, singletonList(orderById));
39+
assertEquals(2, styleGuideResponseList.getData().size());
40+
assertEquals(styleGuideId, styleGuideResponseList.getData().get(0).getData().getId());
41+
assertEquals(styleGuide2Id, styleGuideResponseList.getData().get(1).getData().getId());
42+
}
43+
44+
@Test
45+
public void listStyleGuidesTest_orderByIdAsc() {
46+
OrderByField orderById = new OrderByField();
47+
orderById.setFieldName("id");
48+
orderById.setOrderBy(SortOrder.ASC);
49+
50+
ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuides(null, null, null, singletonList(orderById));
51+
assertEquals(2, styleGuideResponseList.getData().size());
52+
assertEquals(styleGuideId, styleGuideResponseList.getData().get(0).getData().getId());
53+
assertEquals(styleGuide2Id, styleGuideResponseList.getData().get(1).getData().getId());
54+
}
55+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.crowdin.client.styleguide;
2+
3+
import com.crowdin.client.core.model.OrderByField;
4+
import com.crowdin.client.core.model.ResponseList;
5+
import com.crowdin.client.core.model.SortOrder;
6+
import com.crowdin.client.framework.RequestMock;
7+
import com.crowdin.client.framework.TestClient;
8+
import com.crowdin.client.styleguide.model.StyleGuide;
9+
import org.apache.http.client.methods.HttpGet;
10+
import org.junit.jupiter.api.Test;
11+
12+
import java.util.Arrays;
13+
import java.util.HashMap;
14+
import java.util.List;
15+
16+
import static java.util.Collections.singletonList;
17+
import static org.junit.jupiter.api.Assertions.assertEquals;
18+
19+
public class StyleGuidesApiStyleGuidesOrderByIdDescTest extends TestClient {
20+
21+
private final Long styleGuideId = 2L;
22+
private final Long styleGuide2Id = 3L;
23+
24+
@Override
25+
public List<RequestMock> getMocks() {
26+
return Arrays.asList(
27+
RequestMock.build(this.url + "/style-guides", HttpGet.METHOD_NAME, "api/styleguide/listStyleGuidesOrderByIdDesc.json", new HashMap<String, String>() {{
28+
put("orderBy", "id%20desc");
29+
}})
30+
);
31+
}
32+
33+
@Test
34+
public void listStyleGuidesTest_orderByIdDesc() {
35+
OrderByField orderById = new OrderByField();
36+
orderById.setFieldName("id");
37+
orderById.setOrderBy(SortOrder.DESC);
38+
39+
ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuides(null, null, null, singletonList(orderById));
40+
assertEquals(2, styleGuideResponseList.getData().size());
41+
assertEquals(styleGuide2Id, styleGuideResponseList.getData().get(0).getData().getId());
42+
assertEquals(styleGuideId, styleGuideResponseList.getData().get(1).getData().getId());
43+
}
44+
}

0 commit comments

Comments
 (0)