Skip to content

Commit 1665a39

Browse files
committed
Created Style Guides API
1 parent dcdc704 commit 1665a39

11 files changed

Lines changed: 343 additions & 0 deletions

File tree

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> listStyleGuide(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 listStyleGuide(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> listStyleGuide(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 listStyleGuide(params);
110+
}
111+
112+
public ResponseList<StyleGuide> listStyleGuide(ListStyleGuidesParams params) {
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: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.crowdin.client.styleguide;
2+
3+
import com.crowdin.client.core.model.PatchOperation;
4+
import com.crowdin.client.core.model.PatchRequest;
5+
import com.crowdin.client.core.model.ResponseList;
6+
import com.crowdin.client.core.model.ResponseObject;
7+
import com.crowdin.client.framework.RequestMock;
8+
import com.crowdin.client.framework.TestClient;
9+
import com.crowdin.client.styleguide.model.AddStyleGuideRequest;
10+
import com.crowdin.client.styleguide.model.StyleGuide;
11+
import org.apache.http.client.methods.HttpDelete;
12+
import org.apache.http.client.methods.HttpGet;
13+
import org.apache.http.client.methods.HttpPatch;
14+
import org.apache.http.client.methods.HttpPost;
15+
import org.junit.jupiter.api.Test;
16+
17+
import java.util.Arrays;
18+
import java.util.List;
19+
20+
import static java.util.Collections.singletonList;
21+
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
23+
public class StyleGuidesApiTest extends TestClient {
24+
25+
private final Long styleGuideId = 2L;
26+
private final Long storageId = 1L;
27+
private final String name = "Be My Eyes iOS's Style Guide";
28+
private final String aiInstructions = "string";
29+
private final List<String> languageIds = Arrays.asList("uk", "fr", "de");
30+
private final List<Long> projectIds = Arrays.asList(1L, 2L, 3L);
31+
private final Boolean isShared = false;
32+
33+
@Override
34+
public List<RequestMock> getMocks() {
35+
return Arrays.asList(
36+
RequestMock.build(this.url + "/style-guides", HttpGet.METHOD_NAME, "api/styleguide/listStyleGuides.json"),
37+
RequestMock.build(this.url + "/style-guides", HttpPost.METHOD_NAME, "api/styleguide/addStyleGuideRequest.json", "api/styleguide/styleGuide.json"),
38+
RequestMock.build(this.url + "/style-guides/" + styleGuideId, HttpGet.METHOD_NAME, "api/styleguide/styleGuide.json"),
39+
RequestMock.build(this.url + "/style-guides/" + styleGuideId, HttpDelete.METHOD_NAME),
40+
RequestMock.build(this.url + "/style-guides/" + styleGuideId, HttpPatch.METHOD_NAME, "api/glossaries/editGlossary.json", "api/styleguide/styleGuide.json")
41+
);
42+
}
43+
44+
@Test
45+
public void listStyleGuidesTest() {
46+
ResponseList<StyleGuide> styleGuideResponseList = this.getStyleGuidesApi().listStyleGuide(null, null, null);
47+
assertEquals(styleGuideResponseList.getData().size(), 1);
48+
assertEquals(styleGuideResponseList.getData().get(0).getData().getId(), styleGuideId);
49+
assertEquals(styleGuideResponseList.getData().get(0).getData().getName(), name);
50+
}
51+
52+
@Test
53+
public void addStyleGuideTest() {
54+
AddStyleGuideRequest request = new AddStyleGuideRequest();
55+
request.setName(name);
56+
request.setAiInstructions(aiInstructions);
57+
request.setLanguageIds(languageIds);
58+
request.setProjectIds(projectIds);
59+
request.setIsShared(isShared);
60+
request.setStorageId(storageId);
61+
ResponseObject<StyleGuide> styleGuideResponseObject = this.getStyleGuidesApi().addStyleGuide(request);
62+
assertEquals(styleGuideResponseObject.getData().getId(), styleGuideId);
63+
assertEquals(styleGuideResponseObject.getData().getName(), name);
64+
}
65+
66+
@Test
67+
public void getStyleGuideTest() {
68+
ResponseObject<StyleGuide> styleGuideResponseObject = this.getStyleGuidesApi().getStyleGuide(styleGuideId);
69+
assertEquals(styleGuideResponseObject.getData().getId(), styleGuideId);
70+
assertEquals(styleGuideResponseObject.getData().getName(), name);
71+
}
72+
73+
@Test
74+
public void deleteStyleGuideTest() {
75+
this.getStyleGuidesApi().deleteStyleGuide(styleGuideId);
76+
}
77+
78+
@Test
79+
public void editStyleGuideTest() {
80+
PatchRequest request = new PatchRequest();
81+
request.setOp(PatchOperation.REPLACE);
82+
request.setValue(name);
83+
request.setPath("/name");
84+
ResponseObject<StyleGuide> styleGuideResponseObject = this.getStyleGuidesApi().editStyleGuide(styleGuideId, singletonList(request));
85+
assertEquals(styleGuideResponseObject.getData().getId(), styleGuideId);
86+
assertEquals(styleGuideResponseObject.getData().getName(), name);
87+
}
88+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "Be My Eyes iOS's Style Guide",
3+
"aiInstructions": "string",
4+
"languageId": ["uk", "fr", "de"],
5+
"projectIds": [1, 2, 3],
6+
"isShared": false,
7+
"storageId": 1
8+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"data": [
3+
{
4+
"data": {
5+
"id": 2,
6+
"name": "Be My Eyes iOS's Style Guide",
7+
"aiInstructions": "string",
8+
"userId": 2,
9+
"languageId": ["uk", "fr", "de"],
10+
"projectIds": [1, 2, 3],
11+
"isShared": false,
12+
"createdAt": "2019-09-16T13:42:04+00:00"
13+
}
14+
}
15+
],
16+
"pagination": {
17+
"offset": 0,
18+
"limit": 25
19+
}
20+
}

0 commit comments

Comments
 (0)