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
37 changes: 37 additions & 0 deletions src/main/java/com/crowdin/client/core/http/HttpRequestConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,41 @@ public static <T extends Optional> Map<String, T> buildUrlParams(String k1, T v1
put(k12, v12);
}};
}

public static <T extends Optional> Map<String, T> buildUrlParams(String k1, T v1, String k2, T v2, String k3, T v3, String k4, T v4, String k5, T v5, String k6, T v6, String k7, T v7, String k8, T v8, String k9, T v9, String k10, T v10, String k11, T v11, String k12, T v12, String k13, T v13) {
return new HashMap<String, T>() {{
put(k1, v1);
put(k2, v2);
put(k3, v3);
put(k4, v4);
put(k5, v5);
put(k6, v6);
put(k7, v7);
put(k8, v8);
put(k9, v9);
put(k10, v10);
put(k11, v11);
put(k12, v12);
put(k13, v13);
}};
}

public static <T extends Optional> Map<String, T> buildUrlParams(String k1, T v1, String k2, T v2, String k3, T v3, String k4, T v4, String k5, T v5, String k6, T v6, String k7, T v7, String k8, T v8, String k9, T v9, String k10, T v10, String k11, T v11, String k12, T v12, String k13, T v13, String k14, T v14) {
return new HashMap<String, T>() {{
put(k1, v1);
put(k2, v2);
put(k3, v3);
put(k4, v4);
put(k5, v5);
put(k6, v6);
put(k7, v7);
put(k8, v8);
put(k9, v9);
put(k10, v10);
put(k11, v11);
put(k12, v12);
put(k13, v13);
put(k14, v14);
}};
}
}
39 changes: 39 additions & 0 deletions src/main/java/com/crowdin/client/teams/TeamsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class TeamsApi extends CrowdinApi {
public TeamsApi(Credentials credentials) {
Expand Down Expand Up @@ -134,6 +135,44 @@ public ResponseList<Team> listTeams(Integer limit, Integer offset, List<OrderByF
return TeamResponseList.to(teamResponseList);
}

/**
* @param params ListTeamsParams
* @return list of teams
* @see <ul>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.teams.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseList<Team> listTeams(ListTeamsParams params) throws HttpException, HttpBadRequestException {
ListTeamsParams query = Optional.ofNullable(params).orElse(new ListTeamsParams());

Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
"search", Optional.ofNullable(query.getSearch()),
"projectIds", Optional.ofNullable(
query.getProjectIds() == null ? null : query.getProjectIds().stream()
.map(String::valueOf)
.collect(Collectors.joining(","))
),
"projectRoles", Optional.ofNullable(
query.getProjectRoles() == null ? null : query.getProjectRoles().stream()
.map(projectRole -> projectRole.to(projectRole))
.collect(Collectors.joining(","))
),
"languageIds", Optional.ofNullable(
query.getLanguageIds() == null ? null : String.join(",", query.getLanguageIds())
),
"groupIds", Optional.ofNullable(
query.getGroupIds() == null ? null : query.getGroupIds().stream()
.map(String::valueOf)
.collect(Collectors.joining(","))
),
"orderBy", Optional.ofNullable(OrderByField.generateSortParam(query.getOrderBy())),
"limit", Optional.ofNullable(query.getLimit()),
"offset", Optional.ofNullable(query.getOffset())
);
TeamResponseList teamResponseList = this.httpClient.get(this.url + "/teams", new HttpRequestConfig(queryParams), TeamResponseList.class);
return TeamResponseList.to(teamResponseList);
}

/**
* @param request request object
* @return newly created team
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/com/crowdin/client/teams/model/ListTeamsParams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.crowdin.client.teams.model;

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

import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
public class ListTeamsParams extends Pagination {
private String search;
private List<Long> projectIds;
private List<ProjectRoles> projectRoles;
private List<String> languageIds;
private List<Long> groupIds;
private List<OrderByField> orderBy;
}
16 changes: 16 additions & 0 deletions src/main/java/com/crowdin/client/teams/model/ProjectRoles.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.crowdin.client.teams.model;

import com.crowdin.client.core.model.EnumConverter;

public enum ProjectRoles implements EnumConverter<ProjectRoles> {
MANAGER, DEVELOPER, TRANSLATOR, PROOFREADER, LANGUAGE_COORDINATOR, MEMBER;

public static ProjectRoles from(String value) {
return ProjectRoles.valueOf(value.toUpperCase());
}

@Override
public String to(ProjectRoles v) {
return v.name().toLowerCase();
}
}
49 changes: 49 additions & 0 deletions src/main/java/com/crowdin/client/users/UsersApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class UsersApi extends CrowdinApi {
public UsersApi(Credentials credentials) {
Expand Down Expand Up @@ -243,6 +244,54 @@ public ResponseList<User> listUsers(Status status, String search, TwoFactor twoF
return UserResponseList.to(userResponseList);
}

/**
* @param params ListUsersParams
* @return list of teams
* @see <ul>
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
* </ul>
*/
public ResponseList<User> listUsers(ListUsersParams params) throws HttpException, HttpBadRequestException {
ListUsersParams query = Optional.ofNullable(params).orElse(new ListUsersParams());

Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
"status", Optional.ofNullable(query.getStatus()),
"search", Optional.ofNullable(query.getSearch()),
"twoFactor", Optional.ofNullable(query.getTwoFactor()),
"limit", Optional.ofNullable(query.getLimit()),
"offset", Optional.ofNullable(query.getOffset()),
"orderBy", Optional.ofNullable(OrderByField.generateSortParam(query.getOrderBy())),
"organizationRoles", Optional.ofNullable(
query.getOrganizationRoles() == null ? null : query.getOrganizationRoles().stream()
.map(organizationRole -> organizationRole.to(organizationRole))
.collect(Collectors.joining(","))
),
"teamId", Optional.ofNullable(query.getTeamId()),
"projectIds", Optional.ofNullable(
query.getProjectIds() == null ? null : query.getProjectIds().stream()
.map(String::valueOf)
.collect(Collectors.joining(","))
),
"projectRoles", Optional.ofNullable(
query.getProjectRoles() == null ? null : query.getProjectRoles().stream()
.map(projectRole -> projectRole.to(projectRole))
.collect(Collectors.joining(","))
),
"languageIds", Optional.ofNullable(
query.getLanguageIds() == null ? null : String.join(",", query.getLanguageIds())
),
"groupIds", Optional.ofNullable(
query.getGroupIds() == null ? null : query.getGroupIds().stream()
.map(String::valueOf)
.collect(Collectors.joining(","))
),
"lastSeenFrom", Optional.ofNullable(query.getLastSeenFrom()),
"lastSeenTo", Optional.ofNullable(query.getLastSeenTo())
);
UserResponseList userResponseList = this.httpClient.get(this.url + "/users", new HttpRequestConfig(queryParams), UserResponseList.class);
return UserResponseList.to(userResponseList);
}

/**
* @param request request object
* @return invited user
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/com/crowdin/client/users/model/ListUsersParams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.crowdin.client.users.model;

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

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

@Data
@EqualsAndHashCode(callSuper = true)
public class ListUsersParams extends Pagination {
private List<OrderByField> orderBy;
private Status status;
private String search;
private TwoFactor twoFactor;
private List<OrganizationRoles> organizationRoles;
private Long teamId;
private List<Long> projectIds;
private List<ProjectRoles> projectRoles;
private List<String> languageIds;
private List<Long> groupIds;
private Date lastSeenFrom;
private Date lastSeenTo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.crowdin.client.users.model;

import com.crowdin.client.core.model.EnumConverter;

public enum OrganizationRoles implements EnumConverter<OrganizationRoles> {
ADMIN, MANAGER, VENDOR, CLIENT;

public static OrganizationRoles from(String value){
return OrganizationRoles.valueOf(value.toUpperCase());
}

@Override
public String to(OrganizationRoles v) {
return v.name().toLowerCase();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,21 @@ public void listTeamsTest_orderByIdAsc() {
assertEquals(team2Id, teamResponseList.getData().get(1).getData().getId());
assertEquals(name2, teamResponseList.getData().get(1).getData().getName());
}

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

ListTeamsParams query = new ListTeamsParams();
query.setOrderBy(singletonList(orderBy));

ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(null, null, singletonList(orderBy));
assertEquals(2, teamResponseList.getData().size());
assertEquals(teamId, teamResponseList.getData().get(0).getData().getId());
assertEquals(name, teamResponseList.getData().get(0).getData().getName());
assertEquals(team2Id, teamResponseList.getData().get(1).getData().getId());
assertEquals(name2, teamResponseList.getData().get(1).getData().getName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.crowdin.client.core.model.SortOrder;
import com.crowdin.client.framework.RequestMock;
import com.crowdin.client.framework.TestClient;
import com.crowdin.client.teams.model.ListTeamsParams;
import com.crowdin.client.teams.model.Team;
import org.apache.http.client.methods.HttpGet;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -46,4 +47,21 @@ public void listTeamsTest_orderByIdDesc() {
assertEquals(name, teamResponseList.getData().get(1).getData().getName());

}

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

ListTeamsParams query = new ListTeamsParams();
query.setOrderBy(singletonList(orderById));

ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(query);
assertEquals(2, teamResponseList.getData().size());
assertEquals(team2Id, teamResponseList.getData().get(0).getData().getId());
assertEquals(name2, teamResponseList.getData().get(0).getData().getName());
assertEquals(teamId, teamResponseList.getData().get(1).getData().getId());
assertEquals(name, teamResponseList.getData().get(1).getData().getName());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.crowdin.client.teams;

import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.framework.RequestMock;
import com.crowdin.client.framework.TestClient;
import com.crowdin.client.teams.model.ListTeamsParams;
import com.crowdin.client.teams.model.Team;
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 org.junit.jupiter.api.Assertions.assertEquals;

public class TeamsApiListTeamsSearchByGroupIdTest extends TestClient {

private final Long teamId = 1L;
private final Long team2Id = 2L;

@Override
public List<RequestMock> getMocks() {
return Arrays.asList(
RequestMock.build(this.url + "/teams", HttpGet.METHOD_NAME, "api/teams/listTeamsOrderByIdAsc.json", new HashMap<String, String>() {{
put("projectIds", "1,2,3");
}})
);
}

@Test
public void listTeamsTest_searchByGroupId() {
List<Long> groupIds = Arrays.asList(1L, 2L, 3L);
ListTeamsParams query = new ListTeamsParams();
query.setProjectIds(groupIds);

ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(query);
assertEquals(2, teamResponseList.getData().size());
assertEquals(teamId, teamResponseList.getData().get(0).getData().getId());
assertEquals(team2Id, teamResponseList.getData().get(1).getData().getId());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.crowdin.client.teams;

import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.framework.RequestMock;
import com.crowdin.client.framework.TestClient;
import com.crowdin.client.teams.model.ListTeamsParams;
import com.crowdin.client.teams.model.Team;
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 org.junit.jupiter.api.Assertions.assertEquals;

public class TeamsApiListTeamsSearchByNameTest extends TestClient {

private final Long teamId = 1L;
private final String name = "French";

@Override
public List<RequestMock> getMocks() {
return Arrays.asList(
RequestMock.build(this.url + "/teams", HttpGet.METHOD_NAME, "api/teams/listTeams.json", new HashMap<String, String>() {{
put("search", "French");
}})
);
}

@Test
public void listTeamsTest_searchByName() {
ListTeamsParams query = new ListTeamsParams();
query.setSearch("French");

ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(query);
assertEquals(1, teamResponseList.getData().size());
assertEquals(teamId, teamResponseList.getData().get(0).getData().getId());
assertEquals(name, teamResponseList.getData().get(0).getData().getName());

}
}
Loading
Loading