Skip to content

Commit

Permalink
Merge pull request #17 from ExclamationLabs/2024/01/NDSU-1_fix_getAll…
Browse files Browse the repository at this point in the history
…_for_large_datasets

NDSU-1 enable Pagination for datasets larger than 300 users
  • Loading branch information
Stephenglfox authored Jan 29, 2024
2 parents 036b558 + 11a03f4 commit 67f8a6a
Show file tree
Hide file tree
Showing 6 changed files with 222 additions and 66 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# connector-zoom

## Change Log
+ **4.1.5** - Enable Pagination for datasets larger than 300 users NDSU-1 (01/29/2023)
+ **4.1.4** - Fix Uid/Name settings in adapter FIN-11094 (10/31/2023)
+ **4.1.3** - Snyk vulnerabilities update FIN-11094 (10/30/2023)
+ **4.1.2** - Resolve user and group update issues FIN-10857 (08/02/2023)
Expand Down
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ plugins {
id 'maven-publish'
id 'com.google.cloud.artifactregistry.gradle-plugin' version '2.2.0'
id 'com.github.sherter.google-java-format' version '0.9'
id 'idea'
}

repositories {
Expand All @@ -32,6 +33,12 @@ googleJavaFormat {
exclude 'generatedConfig/**/*.java'
}

idea {
module {
downloadJavadoc = true
downloadSources = true
}
}
apply plugin: 'com.exclamationlabs.connid.base.config.plugin'

sourceCompatibility = '1.8'
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
project_version=4.1.4
base_connector_version=4.1.4
project_version=4.1.5
base_connector_version=4.1.11
config_plugin_version=3.0.5
test_connector_version=3.0.1
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

import com.exclamationlabs.connid.base.connector.driver.DriverInvocator;
import com.exclamationlabs.connid.base.connector.driver.rest.RestRequest;
import com.exclamationlabs.connid.base.connector.driver.rest.RestResponseData;
import com.exclamationlabs.connid.base.connector.filter.FilterType;
import com.exclamationlabs.connid.base.connector.logging.Logger;
import com.exclamationlabs.connid.base.connector.results.ResultsFilter;
import com.exclamationlabs.connid.base.connector.results.ResultsPaginator;
Expand All @@ -39,16 +41,14 @@ public String create(ZoomDriver zoomDriver, ZoomUser zoomUser) throws ConnectorE
UserCreationRequest requestData =
new UserCreationRequest(UserCreationType.CREATE.getZoomName(), zoomUser);

ZoomUser newUser =
zoomDriver
.executeRequest(
new RestRequest.Builder<>(ZoomUser.class)
.withPost()
.withRequestUri("/users")
.withRequestBody(requestData)
.build())
.getResponseObject();

RestRequest request =
new RestRequest.Builder<>(ZoomUser.class)
.withPost()
.withRequestUri("/users")
.withRequestBody(requestData)
.build();
RestResponseData<ZoomUser> data = zoomDriver.executeRequest(request);
ZoomUser newUser = data.getResponseObject();
if (newUser == null) {
throw new ConnectorException("Response from user creation was invalid");
}
Expand Down Expand Up @@ -96,12 +96,76 @@ public Set<ZoomUser> getAll(
ZoomDriver zoomDriver, ResultsFilter filter, ResultsPaginator paginator, Integer forceNumber)
throws ConnectorException {

Set<ZoomUser> allUsers = getUsersByStatus(zoomDriver, "active");
allUsers.addAll(getUsersByStatus(zoomDriver, "inactive"));
String status = null;
Set<ZoomUser> allUsers = null;
Set<ZoomUser> inactiveUsers = null;
Set<ZoomUser> activeUsers = null;
if (filter != null
&& filter.hasFilter()
&& filter.getFilterType() == FilterType.EqualsFilter
&& filter.getAttribute() != null
&& filter.getAttribute().equalsIgnoreCase("status")) {

status = filter.getValue();
allUsers = getUsersByStatus(zoomDriver, status, paginator);
} else if (paginator.hasPagination()) {

if (paginator.getTokenAsString() == null
|| paginator.getTokenAsString().trim().length() == 0) {
paginator.setToken("active");
}
status = paginator.getTokenAsString();
if (status.trim().equalsIgnoreCase("active")) {
activeUsers = getUsersByStatus(zoomDriver, status, paginator);
if (activeUsers != null
&& activeUsers.size() > 0
&& paginator.getCurrentPageNumber() <= paginator.getNumberOfTotalPages()) {
allUsers = activeUsers;
}
if (paginator.getCurrentPageNumber() >= paginator.getNumberOfTotalPages()) {
paginator.setToken("inactive");
ResultsPaginator inactivePaginator = new ResultsPaginator(paginator.getPageSize(), 1);
inactiveUsers = getUsersByStatus(zoomDriver, "inactive", inactivePaginator);
if (inactiveUsers != null && inactiveUsers.size() > 0) {
if (allUsers != null) {
allUsers.addAll(inactiveUsers);
} else {
allUsers = inactiveUsers;
}
paginator.setNumberOfProcessedResults(
paginator.getNumberOfProcessedResults() + inactiveUsers.size());
}
paginator.setCurrentPageNumber(inactivePaginator.getCurrentPageNumber());
paginator.setNumberOfTotalPages(inactivePaginator.getNumberOfTotalPages());
if (paginator.getCurrentPageNumber() >= paginator.getNumberOfTotalPages()) {
paginator.setNoMoreResults(true);
}
}
} else {
allUsers = getUsersByStatus(zoomDriver, "inactive", paginator);
if (paginator.getCurrentPageNumber() >= paginator.getNumberOfTotalPages()) {
paginator.setNoMoreResults(true);
}
}
} else {
allUsers = getUsersByStatus(zoomDriver, "active", paginator);
ResultsPaginator inactivePaginator = new ResultsPaginator();
allUsers.addAll(getUsersByStatus(zoomDriver, "inactive", inactivePaginator));
paginator.setNoMoreResults(true);
}

return allUsers;
}

/**
* @param zoomDriver Driver belonging to this Invocator and providing interaction with the
* applicable destination system.
* @param userId The expected can be the Zoom User id or the Zoom User email address
* @param dataMap Map of prefetch data applicable to the Identity Model and that may be understood
* by the invocator.
* @return
* @throws ConnectorException
*/
@Override
public ZoomUser getOne(ZoomDriver zoomDriver, String userId, Map<String, Object> dataMap)
throws ConnectorException {
Expand All @@ -114,16 +178,75 @@ public ZoomUser getOne(ZoomDriver zoomDriver, String userId, Map<String, Object>
.getResponseObject();
}

private Set<ZoomUser> getUsersByStatus(ZoomDriver zoomDriver, String status) {
private Set<ZoomUser> getUsersByStatus(
ZoomDriver zoomDriver, String status, ResultsPaginator paginator) {

Set<ZoomUser> users = null;
boolean getAll = false;
String additionalQueryString = "?status=" + status;
return zoomDriver
.executeRequest(
if (paginator != null && paginator.hasPagination()) {
additionalQueryString = additionalQueryString + "&page_size=" + paginator.getPageSize();
if (paginator.getCurrentPageNumber() == null || paginator.getCurrentPageNumber() <= 0) {
paginator.setCurrentPageNumber(1);
}
additionalQueryString =
additionalQueryString + "&page_number=" + paginator.getCurrentPageNumber();
} else {
getAll = true;
}
RestRequest request =
new RestRequest.Builder<>(ListUsersResponse.class)
.withGet()
.withRequestUri("/users" + additionalQueryString)
.build();
RestResponseData<ListUsersResponse> data = zoomDriver.executeRequest(request);
ListUsersResponse response = data.getResponseObject();

if (response != null) {
users = response.getUsers();
paginator.setTotalResults(response.getTotalRecords());
paginator.setNumberOfProcessedPages(response.getPageNumber());
paginator.setNumberOfTotalPages(response.getPageCount());
paginator.setPageSize(response.getPageSize());
if (response.getUsers() != null && response.getUsers().size() > 0) {
if (paginator.getNumberOfProcessedResults() == null) {
paginator.setNumberOfProcessedResults(0);
}
paginator.setNumberOfProcessedResults(
paginator.getNumberOfProcessedResults() + response.getUsers().size());
}

while (getAll && response.getPageNumber() < response.getPageCount()) {
Integer pageNumber = response.getPageNumber() + 1;
additionalQueryString =
"?status="
+ status
+ "&page_size="
+ response.getPageSize()
+ "&page_number="
+ pageNumber;
request =
new RestRequest.Builder<>(ListUsersResponse.class)
.withGet()
.withRequestUri("/users" + additionalQueryString)
.build())
.getResponseObject()
.getUsers();
.build();
data = zoomDriver.executeRequest(request);
response = data.getResponseObject();
if (response != null) {
paginator.setTotalResults(response.getTotalRecords());
paginator.setNumberOfProcessedPages(response.getPageNumber());
paginator.setNumberOfTotalPages(response.getPageCount());
paginator.setPageSize(response.getPageSize());
if (response.getUsers() != null && response.getUsers().size() > 0) {
paginator.setNumberOfProcessedResults(
paginator.getNumberOfProcessedResults() + response.getUsers().size());
users.addAll(response.getUsers());
}
}
}
}

return users;
}

private void updateUserStatus(ZoomDriver zoomDriver, String desiredStatus, String userId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,71 @@
package com.exclamationlabs.connid.base.zoom.model.response;

import com.exclamationlabs.connid.base.zoom.model.ZoomUser;
import com.google.gson.annotations.SerializedName;
import java.util.Set;

public class ListUsersResponse {
@SerializedName("next_page_token")
private String nextPageToken;

@SerializedName("page_count")
private Integer pageCount;

@SerializedName("page_number")
private Integer pageNumber;

@SerializedName("page_size")
private Integer pageSize;

@SerializedName("total_records")
private Integer totalRecords;

private Set<ZoomUser> users;

public String getNextPageToken() {
return nextPageToken;
}

public Integer getPageCount() {
return pageCount;
}

public Integer getPageNumber() {
return pageNumber;
}

public Integer getPageSize() {
return pageSize;
}

public Integer getTotalRecords() {
return totalRecords;
}

public Set<ZoomUser> getUsers() {
return users;
}

public void setNextPageToken(String nextPageToken) {
this.nextPageToken = nextPageToken;
}

public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
}

public void setPageNumber(Integer pageNumber) {
this.pageNumber = pageNumber;
}

public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}

public void setTotalRecords(Integer totalRecords) {
this.totalRecords = totalRecords;
}

public void setUsers(Set<ZoomUser> users) {
this.users = users;
}
Expand Down
Loading

0 comments on commit 67f8a6a

Please sign in to comment.