From 5cf6a9ddce328e2c2381e092b7e4dd9f298eb3ec Mon Sep 17 00:00:00 2001 From: abotev-intracol Date: Fri, 2 Nov 2018 17:30:09 +0200 Subject: [PATCH 1/3] NY-4785 Endpoint for ag-grid backend - add controller; - add services; - add request/responses; Signed-off-by: abotev-intracol --- .../account/grid/ag/AgGridController.java | 39 ++++++ .../nynja/account/grid/ag/AgGridService.java | 60 +++++++++ .../account/grid/ag/GetRowsResponse.java | 44 +++++++ .../account/grid/ag/ResponseBuilder.java | 54 ++++++++ .../account/grid/ag/filter/ColumnFilter.java | 11 ++ .../grid/ag/filter/NumberColumnFilter.java | 33 +++++ .../grid/ag/filter/SetColumnFilter.java | 18 +++ .../account/grid/ag/request/ColumnVO.java | 69 +++++++++++ .../grid/ag/request/FilterRequest.java | 30 +++++ .../grid/ag/request/GetRowsRequest.java | 115 ++++++++++++++++++ .../account/grid/ag/request/SortModel.java | 54 ++++++++ 11 files changed, 527 insertions(+) create mode 100644 src/main/java/biz/nynja/account/grid/ag/AgGridController.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/AgGridService.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/GetRowsResponse.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/filter/ColumnFilter.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/filter/NumberColumnFilter.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/filter/SetColumnFilter.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/request/ColumnVO.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/request/FilterRequest.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java create mode 100644 src/main/java/biz/nynja/account/grid/ag/request/SortModel.java diff --git a/src/main/java/biz/nynja/account/grid/ag/AgGridController.java b/src/main/java/biz/nynja/account/grid/ag/AgGridController.java new file mode 100644 index 0000000..74f61e8 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/AgGridController.java @@ -0,0 +1,39 @@ +package biz.nynja.account.grid.ag; + +import java.util.HashMap; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import biz.nynja.account.grid.ag.request.GetRowsRequest; +import biz.nynja.account.repositories.AccountRepository; + +@RestController +public class AgGridController { + + private AgGridService agGridService; + + private AccountRepository accountRepository; + + @Autowired + public AgGridController(AgGridService accountDao, AccountRepository accountRepository) { + this.agGridService = accountDao; + this.accountRepository = accountRepository; + } + + @RequestMapping(method = RequestMethod.POST, value = "/getRows") + public ResponseEntity getRows(@RequestBody GetRowsRequest request) { + return ResponseEntity.ok(agGridService.getData(request)); + } + + @RequestMapping(method = RequestMethod.GET, value = "/getRowsCount") + public ResponseEntity> getCountOfRows() { + HashMap map = new HashMap<>(); + map.put("lastRow", accountRepository.count()); + return ResponseEntity.ok(map); + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java new file mode 100644 index 0000000..e16c15d --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java @@ -0,0 +1,60 @@ +package biz.nynja.account.grid.ag; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.cassandra.core.query.CassandraPageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.stereotype.Service; + +import biz.nynja.account.grid.ag.request.GetRowsRequest; +import biz.nynja.account.models.Account; +import biz.nynja.account.repositories.AccountRepository; + +@Service +public class AgGridService { + + private AccountRepository accountRepository; + + private Slice accounts = null; + + @Autowired + public AgGridService(AccountRepository accountRepository) { + this.accountRepository = accountRepository; + } + + public GetRowsResponse getData(GetRowsRequest request) { + + Map> pivotValues = new HashMap>(); + + // Sort sort = new Sort(new Sort.Order(Direction.ASC, "type")); + + Pageable pageable = CassandraPageRequest.of(0, request.getEndRow()); + + accounts = accountRepository.findAll(pageable); + List> rows = new ArrayList>(); + accounts.getContent().subList(request.getStartRow() - 1, accounts.getNumberOfElements()).forEach(account -> { + HashMap map = new HashMap<>(); + map.put("accountId", account.getAccountId()); + map.put("accountMark", account.getAccountMark()); + map.put("accountName", account.getAccountName()); + map.put("accessStatus", account.getAccessStatus()); + map.put("authenticationIdentifier", account.getAuthenticationProvider()); + map.put("authenticationType", account.getAuthenticationProviderType()); + map.put("communicationProviders", account.getContactsInfo()); + map.put("firstName", account.getFirstName()); + map.put("lastName", account.getLastName()); + map.put("profileId", account.getProfileId()); + map.put("qrCode", account.getQrCode()); + rows.add(map); + }); + + // create response with our results + return ResponseBuilder.createResponse(request, rows, pivotValues); + } + +} diff --git a/src/main/java/biz/nynja/account/grid/ag/GetRowsResponse.java b/src/main/java/biz/nynja/account/grid/ag/GetRowsResponse.java new file mode 100644 index 0000000..1643902 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/GetRowsResponse.java @@ -0,0 +1,44 @@ +package biz.nynja.account.grid.ag; + +import java.util.List; +import java.util.Map; + +public class GetRowsResponse { + + private List> data; + private int lastRow; + private List secondaryColumnFields; + + public GetRowsResponse() { + } + + public GetRowsResponse(List> data, int lastRow, List secondaryColumnFields) { + this.data = data; + this.lastRow = lastRow; + this.secondaryColumnFields = secondaryColumnFields; + } + + public List> getData() { + return data; + } + + public void setData(List> data) { + this.data = data; + } + + public int getLastRow() { + return lastRow; + } + + public void setLastRow(int lastRow) { + this.lastRow = lastRow; + } + + public List getSecondaryColumnFields() { + return secondaryColumnFields; + } + + public void setSecondaryColumns(List secondaryColumnFields) { + this.secondaryColumnFields = secondaryColumnFields; + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java b/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java new file mode 100644 index 0000000..a9b7e9d --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java @@ -0,0 +1,54 @@ +package biz.nynja.account.grid.ag; + +import com.google.common.collect.Sets; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import biz.nynja.account.grid.ag.request.ColumnVO; +import biz.nynja.account.grid.ag.request.GetRowsRequest; + +import static java.util.stream.Collectors.*; + +public class ResponseBuilder { + public static GetRowsResponse createResponse( + GetRowsRequest request, + List> rows, + Map> pivotValues) { + + int currentLastRow = request.getStartRow() + rows.size(); + int lastRow = currentLastRow <= request.getEndRow() ? currentLastRow : -1; + + List valueColumns = request.getValueCols(); + + return new GetRowsResponse(rows, lastRow, getSecondaryColumns(pivotValues, valueColumns)); + } + + private static List getSecondaryColumns(Map> pivotValues, List valueColumns) { + + // create pairs of pivot col and pivot value i.e. (DEALTYPE,Financial), (BIDTYPE,Sell)... + List>> pivotPairs = pivotValues.entrySet().stream() + .map(e -> e.getValue().stream() + .map(pivotValue -> Pair.of(e.getKey(), pivotValue)) + .collect(toCollection(LinkedHashSet::new))) + .collect(toList()); + + // create cartesian product of pivot and value columns i.e. Financial_Sell_CURRENTVALUE, Physical_Buy_CURRENTVALUE... + return Sets.cartesianProduct(pivotPairs) + .stream() + .flatMap(pairs -> { + // collect pivot cols, i.e. Financial_Sell + String pivotCol = pairs.stream() + .map(Pair::getRight) + .collect(joining("_")); + + // append value cols, i.e. Financial_Sell_CURRENTVALUE, Financial_Sell_PREVIOUSVALUE + return valueColumns.stream() + .map(valueCol -> pivotCol + "_" + valueCol.getField()); + }) + .collect(toList()); + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/filter/ColumnFilter.java b/src/main/java/biz/nynja/account/grid/ag/filter/ColumnFilter.java new file mode 100644 index 0000000..2dfc17f --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/filter/ColumnFilter.java @@ -0,0 +1,11 @@ +package biz.nynja.account.grid.ag.filter; + +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "filterType") +@JsonSubTypes({ @JsonSubTypes.Type(value = NumberColumnFilter.class, name = "number"), + @JsonSubTypes.Type(value = SetColumnFilter.class, name = "set") }) +public abstract class ColumnFilter { + String filterType; +} diff --git a/src/main/java/biz/nynja/account/grid/ag/filter/NumberColumnFilter.java b/src/main/java/biz/nynja/account/grid/ag/filter/NumberColumnFilter.java new file mode 100644 index 0000000..f7ddb55 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/filter/NumberColumnFilter.java @@ -0,0 +1,33 @@ +package biz.nynja.account.grid.ag.filter; + +public class NumberColumnFilter extends ColumnFilter { + + private String type; + private Integer filter; + private Integer filterTo; + + public NumberColumnFilter() { + } + + public NumberColumnFilter(String type, Integer filter, Integer filterTo) { + this.type = type; + this.filter = filter; + this.filterTo = filterTo; + } + + public String getFilterType() { + return filterType; + } + + public String getType() { + return type; + } + + public Integer getFilter() { + return filter; + } + + public Integer getFilterTo() { + return filterTo; + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/filter/SetColumnFilter.java b/src/main/java/biz/nynja/account/grid/ag/filter/SetColumnFilter.java new file mode 100644 index 0000000..f8cef74 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/filter/SetColumnFilter.java @@ -0,0 +1,18 @@ +package biz.nynja.account.grid.ag.filter; + +import java.util.List; + +public class SetColumnFilter extends ColumnFilter { + private List values; + + public SetColumnFilter() { + } + + public SetColumnFilter(List values) { + this.values = values; + } + + public List getValues() { + return values; + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/request/ColumnVO.java b/src/main/java/biz/nynja/account/grid/ag/request/ColumnVO.java new file mode 100644 index 0000000..79f1ea3 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/request/ColumnVO.java @@ -0,0 +1,69 @@ +package biz.nynja.account.grid.ag.request; + +import java.util.Objects; + +public class ColumnVO { + + private String id; + private String displayName; + private String field; + private String aggFunc; + + public ColumnVO() { + } + + public ColumnVO(String id, String displayName, String field, String aggFunc) { + this.id = id; + this.displayName = displayName; + this.field = field; + this.aggFunc = aggFunc; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getField() { + return field; + } + + public void setField(String field) { + this.field = field; + } + + public String getAggFunc() { + return aggFunc; + } + + public void setAggFunc(String aggFunc) { + this.aggFunc = aggFunc; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + ColumnVO columnVO = (ColumnVO) o; + return Objects.equals(id, columnVO.id) && Objects.equals(displayName, columnVO.displayName) + && Objects.equals(field, columnVO.field) && Objects.equals(aggFunc, columnVO.aggFunc); + } + + @Override + public int hashCode() { + return Objects.hash(id, displayName, field, aggFunc); + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/request/FilterRequest.java b/src/main/java/biz/nynja/account/grid/ag/request/FilterRequest.java new file mode 100644 index 0000000..e87d451 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/request/FilterRequest.java @@ -0,0 +1,30 @@ +package biz.nynja.account.grid.ag.request; + +import java.util.Map; + +import biz.nynja.account.grid.ag.filter.ColumnFilter; + +public class FilterRequest { + + private Map filterModel; + + public FilterRequest() { + } + + public FilterRequest(Map filterModel) { + this.filterModel = filterModel; + } + + public Map getFilterModel() { + return filterModel; + } + + public void setFilterModel(Map filterModel) { + this.filterModel = filterModel; + } + + @Override + public String toString() { + return "FilterRequest{" + "filterModel=" + filterModel + '}'; + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java b/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java new file mode 100644 index 0000000..1c67ef4 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java @@ -0,0 +1,115 @@ +package biz.nynja.account.grid.ag.request; + +import java.io.Serializable; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import biz.nynja.account.grid.ag.filter.ColumnFilter; + +public class GetRowsRequest implements Serializable { + + private int startRow, endRow; + + // row group columns + private List rowGroupCols; + + // value columns + private List valueCols; + + // pivot columns + private List pivotCols; + + // true if pivot mode is one, otherwise false + private boolean pivotMode; + + // what groups the user is viewing + private List groupKeys; + + // if filtering, what the filter model is + private Map filterModel; + + // if sorting, what the sort model is + private List sortModel; + + public GetRowsRequest() { + this.rowGroupCols = Collections.emptyList(); + this.valueCols = Collections.emptyList(); + this.pivotCols = Collections.emptyList(); + this.groupKeys = Collections.emptyList(); + this.filterModel = Collections.emptyMap(); + this.sortModel = Collections.emptyList(); + } + + public int getStartRow() { + return startRow; + } + + public void setStartRow(int startRow) { + this.startRow = startRow; + } + + public int getEndRow() { + return endRow; + } + + public void setEndRow(int endRow) { + this.endRow = endRow; + } + + public List getRowGroupCols() { + return rowGroupCols; + } + + public void setRowGroupCols(List rowGroupCols) { + this.rowGroupCols = rowGroupCols; + } + + public List getValueCols() { + return valueCols; + } + + public void setValueCols(List valueCols) { + this.valueCols = valueCols; + } + + public List getPivotCols() { + return pivotCols; + } + + public void setPivotCols(List pivotCols) { + this.pivotCols = pivotCols; + } + + public boolean isPivotMode() { + return pivotMode; + } + + public void setPivotMode(boolean pivotMode) { + this.pivotMode = pivotMode; + } + + public List getGroupKeys() { + return groupKeys; + } + + public void setGroupKeys(List groupKeys) { + this.groupKeys = groupKeys; + } + + public Map getFilterModel() { + return filterModel; + } + + public void setFilterModel(Map filterModel) { + this.filterModel = filterModel; + } + + public List getSortModel() { + return sortModel; + } + + public void setSortModel(List sortModel) { + this.sortModel = sortModel; + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/request/SortModel.java b/src/main/java/biz/nynja/account/grid/ag/request/SortModel.java new file mode 100644 index 0000000..9448ee6 --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/request/SortModel.java @@ -0,0 +1,54 @@ +package biz.nynja.account.grid.ag.request; + +import java.util.Objects; + +public class SortModel { + + private String colId; + private String sort; + + public SortModel() { + } + + public SortModel(String colId, String sort) { + this.colId = colId; + this.sort = sort; + } + + public String getColId() { + return colId; + } + + public void setColId(String colId) { + this.colId = colId; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + SortModel sortModel = (SortModel) o; + return Objects.equals(colId, sortModel.colId) && Objects.equals(sort, sortModel.sort); + } + + @Override + public int hashCode() { + + return Objects.hash(colId, sort); + } + + @Override + public String toString() { + return "SortModel{" + "colId='" + colId + '\'' + ", sort='" + sort + '\'' + '}'; + } +} -- GitLab From 20e54c48193686d061d2704675d1f0681d9bfad4 Mon Sep 17 00:00:00 2001 From: abotev-intracol Date: Thu, 8 Nov 2018 14:39:49 +0200 Subject: [PATCH 2/3] NY-4785 Endpoint for ag-grid backend - add grpc endpoints; Signed-off-by: abotev-intracol --- .../account/grid/ag/AdminServiceImpl.java | 48 +++++++ .../account/grid/ag/AgGridController.java | 4 +- .../nynja/account/grid/ag/AgGridService.java | 135 +++++++++++++++--- .../account/grid/ag/ResponseBuilder.java | 22 +-- .../grid/ag/request/GetRowsRequest.java | 4 +- .../account/grid/ag/request/SortModel.java | 54 ------- 6 files changed, 180 insertions(+), 87 deletions(-) create mode 100644 src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java delete mode 100644 src/main/java/biz/nynja/account/grid/ag/request/SortModel.java diff --git a/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java b/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java new file mode 100644 index 0000000..4c7a65e --- /dev/null +++ b/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java @@ -0,0 +1,48 @@ +package biz.nynja.account.grid.ag; + +import org.lognet.springboot.grpc.GRpcService; +import org.springframework.beans.factory.annotation.Autowired; + +import biz.nynja.account.admin.grpc.AccountsCount; +import biz.nynja.account.admin.grpc.AccountsResponse; +import biz.nynja.account.admin.grpc.AdminAccountServiceGrpc; +import biz.nynja.account.admin.grpc.EmptyRequest; +import biz.nynja.account.admin.grpc.GetAllAccountsRequest; +import biz.nynja.account.repositories.AccountRepository; +import io.grpc.stub.StreamObserver; + +/** + * gRPC Admin service implementation.
+ * The service extends the protobuf generated class and overrides the needed methods. It also saves/retrieves the admin + * information. + */ +@GRpcService +public class AdminServiceImpl extends AdminAccountServiceGrpc.AdminAccountServiceImplBase { + + private AgGridService agGridService; + + private AccountRepository accountRepository; + + @Autowired + public AdminServiceImpl(AgGridService agGridService, AccountRepository accountRepository) { + this.agGridService = agGridService; + this.accountRepository = accountRepository; + } + + @Override + public void getAllAccounts(GetAllAccountsRequest request, StreamObserver responseObserver) { + + AccountsResponse response = agGridService.getData(request.getEndRow(), request.getStartRow()); + + responseObserver.onNext(response); + responseObserver.onCompleted(); + return; + } + + @Override + public void getCountOfAllAccounts(EmptyRequest request, StreamObserver responseObserver) { + long count = accountRepository.count(); + responseObserver.onNext(AccountsCount.newBuilder().setCount(Math.toIntExact(count)).build()); + responseObserver.onCompleted(); + } +} diff --git a/src/main/java/biz/nynja/account/grid/ag/AgGridController.java b/src/main/java/biz/nynja/account/grid/ag/AgGridController.java index 74f61e8..f7a14db 100644 --- a/src/main/java/biz/nynja/account/grid/ag/AgGridController.java +++ b/src/main/java/biz/nynja/account/grid/ag/AgGridController.java @@ -25,10 +25,10 @@ public class AgGridController { this.accountRepository = accountRepository; } - @RequestMapping(method = RequestMethod.POST, value = "/getRows") + /* @RequestMapping(method = RequestMethod.POST, value = "/getRows") public ResponseEntity getRows(@RequestBody GetRowsRequest request) { return ResponseEntity.ok(agGridService.getData(request)); - } + }*/ @RequestMapping(method = RequestMethod.GET, value = "/getRowsCount") public ResponseEntity> getCountOfRows() { diff --git a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java index e16c15d..01fe349 100644 --- a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java +++ b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java @@ -5,14 +5,27 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.SerializationUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.cassandra.core.query.CassandraPageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; -import biz.nynja.account.grid.ag.request.GetRowsRequest; +import com.google.protobuf.ByteString; + +import biz.nynja.account.admin.grpc.AccessStatus; +import biz.nynja.account.admin.grpc.AccountDetails; +import biz.nynja.account.admin.grpc.AccountResponse; +import biz.nynja.account.admin.grpc.AccountsResponse; +import biz.nynja.account.admin.grpc.ContactDetails; +import biz.nynja.account.admin.grpc.ContactDetails.Builder; +import biz.nynja.account.admin.grpc.AccountDetailsOrBuilder; +import biz.nynja.account.admin.grpc.Role; +import biz.nynja.account.admin.grpc.AccountDetails; +import biz.nynja.account.admin.grpc.ContactType; import biz.nynja.account.models.Account; +import biz.nynja.account.models.ContactInfo; import biz.nynja.account.repositories.AccountRepository; @Service @@ -27,34 +40,118 @@ public class AgGridService { this.accountRepository = accountRepository; } - public GetRowsResponse getData(GetRowsRequest request) { + public AccountsResponse getData(int endRow, int startRow) { Map> pivotValues = new HashMap>(); // Sort sort = new Sort(new Sort.Order(Direction.ASC, "type")); - Pageable pageable = CassandraPageRequest.of(0, request.getEndRow()); + Pageable pageable = CassandraPageRequest.of(0, endRow); accounts = accountRepository.findAll(pageable); - List> rows = new ArrayList>(); - accounts.getContent().subList(request.getStartRow() - 1, accounts.getNumberOfElements()).forEach(account -> { - HashMap map = new HashMap<>(); - map.put("accountId", account.getAccountId()); - map.put("accountMark", account.getAccountMark()); - map.put("accountName", account.getAccountName()); - map.put("accessStatus", account.getAccessStatus()); - map.put("authenticationIdentifier", account.getAuthenticationProvider()); - map.put("authenticationType", account.getAuthenticationProviderType()); - map.put("communicationProviders", account.getContactsInfo()); - map.put("firstName", account.getFirstName()); - map.put("lastName", account.getLastName()); - map.put("profileId", account.getProfileId()); - map.put("qrCode", account.getQrCode()); - rows.add(map); + List rows = new ArrayList<>(); + accounts.getContent().subList(startRow - 1, accounts.getNumberOfElements()).forEach(account -> { + AccountDetails accountDetails = toProto(account); + rows.add(accountDetails); }); // create response with our results - return ResponseBuilder.createResponse(request, rows, pivotValues); + + AccountsResponse response = AccountsResponse.newBuilder() + .setAccountsResponse(AccountResponse.newBuilder().addAllAccountDetails(rows).build()).build(); + return response; + } + + public AccountDetails toProto(Account account) { + + AccountDetails.Builder builder = AccountDetails.newBuilder(); + + if (account.getAccountId() != null) { + builder.setAccountId(account.getAccountId().toString()); + } + if (account.getProfileId() != null) { + builder.setProfileId(account.getProfileId().toString()); + } + if (account.getAuthenticationProvider() != null) { + builder.setAuthenticationIdentifier(account.getAuthenticationProvider()); + } + if (account.getAuthenticationProviderType() != null) { + builder.setAuthenticationType(account.getAuthenticationProviderType()); + } + if (account.getAccountMark() != null) { + builder.setAccountMark(account.getAccountMark()); + } + if (account.getAccountName() != null) { + builder.setAccountName(account.getAccountName()); + } + if (account.getFirstName() != null) { + builder.setFirstName(account.getFirstName()); + } + if (account.getLastName() != null) { + builder.setLastName(account.getLastName()); + } + if (account.getUsername() != null) { + builder.setUsername(account.getUsername()); + } + if (account.getQrCode() != null) { + builder.setQrCode(account.getQrCode()); + } + if (account.getAvatar() != null) { + builder.setAvatar(com.google.protobuf.ByteString.copyFrom(account.getAvatar())); + } + if (account.getRoles() != null) { + for (String role : account.getRoles()) { + builder.addRoles(Role.valueOf(role)); + } + } + if (account.getAccessStatus() != null) { + builder.setAccessStatus(AccessStatus.valueOf(account.getAccessStatus())); + } + if (account.getContactsInfo() != null) { + for (ContactInfo c : account.getContactsInfo()) { + builder.addContactsInfo(toProto(c)); + } + } + return builder.build(); } + public ContactDetails toProto(ContactInfo contactInfo) { + + Builder builder = ContactDetails.newBuilder(); + + ContactType contactType = buildContactType(contactInfo.getType()); + if (contactType != null) { + builder.setType(contactType); + } + if (contactInfo.getValue() != null) { + builder.setValue(contactInfo.getValue()); + } + if (contactInfo.getLabel() != null) { + builder.setLabel(contactInfo.getLabel()); + } + + return builder.build(); + } + + private ContactType buildContactType(String type) { + ContactType contactType = null; + switch (type) { + case "PHONE_CONTACT": + contactType = ContactType.PHONE_CONTACT; + break; + case "EMAIL_CONTACT": + contactType = ContactType.EMAIL_CONTACT; + break; + case "FACEBOOK_CONTACT": + contactType = ContactType.FACEBOOK_CONTACT; + break; + case "GOOGLEPLUS_CONTACT": + contactType = ContactType.GOOGLEPLUS_CONTACT; + break; + case "TWITTER_CONTACT": + contactType = ContactType.TWITTER_CONTACT; + break; + } + return contactType; + } } diff --git a/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java b/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java index a9b7e9d..4191f03 100644 --- a/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java +++ b/src/main/java/biz/nynja/account/grid/ag/ResponseBuilder.java @@ -1,28 +1,30 @@ package biz.nynja.account.grid.ag; -import com.google.common.collect.Sets; -import org.apache.commons.lang3.tuple.Pair; +import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.toCollection; +import static java.util.stream.Collectors.toList; +import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; -import biz.nynja.account.grid.ag.request.ColumnVO; -import biz.nynja.account.grid.ag.request.GetRowsRequest; +import org.apache.commons.lang3.tuple.Pair; -import static java.util.stream.Collectors.*; +import com.google.common.collect.Sets; + +import biz.nynja.account.grid.ag.request.ColumnVO; public class ResponseBuilder { - public static GetRowsResponse createResponse( - GetRowsRequest request, + public static GetRowsResponse createResponse(int endRow, int startRow, List> rows, Map> pivotValues) { - int currentLastRow = request.getStartRow() + rows.size(); - int lastRow = currentLastRow <= request.getEndRow() ? currentLastRow : -1; + int currentLastRow = startRow + rows.size(); + int lastRow = currentLastRow <= endRow ? currentLastRow : -1; - List valueColumns = request.getValueCols(); + List valueColumns = new ArrayList<>(); return new GetRowsResponse(rows, lastRow, getSecondaryColumns(pivotValues, valueColumns)); } diff --git a/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java b/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java index 1c67ef4..c232887 100644 --- a/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java +++ b/src/main/java/biz/nynja/account/grid/ag/request/GetRowsRequest.java @@ -1,13 +1,13 @@ package biz.nynja.account.grid.ag.request; -import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.Map; +import biz.nynja.account.admin.grpc.SortModel; import biz.nynja.account.grid.ag.filter.ColumnFilter; -public class GetRowsRequest implements Serializable { +public class GetRowsRequest { private int startRow, endRow; diff --git a/src/main/java/biz/nynja/account/grid/ag/request/SortModel.java b/src/main/java/biz/nynja/account/grid/ag/request/SortModel.java deleted file mode 100644 index 9448ee6..0000000 --- a/src/main/java/biz/nynja/account/grid/ag/request/SortModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package biz.nynja.account.grid.ag.request; - -import java.util.Objects; - -public class SortModel { - - private String colId; - private String sort; - - public SortModel() { - } - - public SortModel(String colId, String sort) { - this.colId = colId; - this.sort = sort; - } - - public String getColId() { - return colId; - } - - public void setColId(String colId) { - this.colId = colId; - } - - public String getSort() { - return sort; - } - - public void setSort(String sort) { - this.sort = sort; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - SortModel sortModel = (SortModel) o; - return Objects.equals(colId, sortModel.colId) && Objects.equals(sort, sortModel.sort); - } - - @Override - public int hashCode() { - - return Objects.hash(colId, sort); - } - - @Override - public String toString() { - return "SortModel{" + "colId='" + colId + '\'' + ", sort='" + sort + '\'' + '}'; - } -} -- GitLab From 40f87132fefe90aeae0e75731a21f57324cc1ea3 Mon Sep 17 00:00:00 2001 From: abotev-intracol Date: Thu, 8 Nov 2018 16:14:53 +0200 Subject: [PATCH 3/3] NY-4785 Endpoint for ag-grid backend - add grpc endpoints; Signed-off-by: abotev-intracol --- .../account/grid/ag/AdminServiceImpl.java | 6 +- .../nynja/account/grid/ag/AgGridService.java | 117 ++---------------- 2 files changed, 10 insertions(+), 113 deletions(-) diff --git a/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java b/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java index 4c7a65e..211b1fc 100644 --- a/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java +++ b/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java @@ -3,8 +3,8 @@ package biz.nynja.account.grid.ag; import org.lognet.springboot.grpc.GRpcService; import org.springframework.beans.factory.annotation.Autowired; +import biz.nynja.account.admin.grpc.AccountsAdminResponse; import biz.nynja.account.admin.grpc.AccountsCount; -import biz.nynja.account.admin.grpc.AccountsResponse; import biz.nynja.account.admin.grpc.AdminAccountServiceGrpc; import biz.nynja.account.admin.grpc.EmptyRequest; import biz.nynja.account.admin.grpc.GetAllAccountsRequest; @@ -30,9 +30,9 @@ public class AdminServiceImpl extends AdminAccountServiceGrpc.AdminAccountServic } @Override - public void getAllAccounts(GetAllAccountsRequest request, StreamObserver responseObserver) { + public void getAllAccounts(GetAllAccountsRequest request, StreamObserver responseObserver) { - AccountsResponse response = agGridService.getData(request.getEndRow(), request.getStartRow()); + AccountsAdminResponse response = agGridService.getData(request.getEndRow(), request.getStartRow()); responseObserver.onNext(response); responseObserver.onCompleted(); diff --git a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java index 01fe349..a09d168 100644 --- a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java +++ b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java @@ -5,27 +5,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.commons.lang3.SerializationUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.cassandra.core.query.CassandraPageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; -import com.google.protobuf.ByteString; - -import biz.nynja.account.admin.grpc.AccessStatus; -import biz.nynja.account.admin.grpc.AccountDetails; -import biz.nynja.account.admin.grpc.AccountResponse; -import biz.nynja.account.admin.grpc.AccountsResponse; -import biz.nynja.account.admin.grpc.ContactDetails; -import biz.nynja.account.admin.grpc.ContactDetails.Builder; -import biz.nynja.account.admin.grpc.AccountDetailsOrBuilder; -import biz.nynja.account.admin.grpc.Role; -import biz.nynja.account.admin.grpc.AccountDetails; -import biz.nynja.account.admin.grpc.ContactType; +import biz.nynja.account.admin.grpc.AccountAdminResponse; +import biz.nynja.account.admin.grpc.AccountsAdminResponse; +import biz.nynja.account.grpc.AccountDetails; import biz.nynja.account.models.Account; -import biz.nynja.account.models.ContactInfo; import biz.nynja.account.repositories.AccountRepository; @Service @@ -40,7 +29,7 @@ public class AgGridService { this.accountRepository = accountRepository; } - public AccountsResponse getData(int endRow, int startRow) { + public AccountsAdminResponse getData(int endRow, int startRow) { Map> pivotValues = new HashMap>(); @@ -51,107 +40,15 @@ public class AgGridService { accounts = accountRepository.findAll(pageable); List rows = new ArrayList<>(); accounts.getContent().subList(startRow - 1, accounts.getNumberOfElements()).forEach(account -> { - AccountDetails accountDetails = toProto(account); + AccountDetails accountDetails = account.toProto(); rows.add(accountDetails); }); // create response with our results - AccountsResponse response = AccountsResponse.newBuilder() - .setAccountsResponse(AccountResponse.newBuilder().addAllAccountDetails(rows).build()).build(); + AccountsAdminResponse response = AccountsAdminResponse.newBuilder() + .setAccountsResponse(AccountAdminResponse.newBuilder().addAllAccountDetails(rows).build()).build(); return response; } - public AccountDetails toProto(Account account) { - - AccountDetails.Builder builder = AccountDetails.newBuilder(); - - if (account.getAccountId() != null) { - builder.setAccountId(account.getAccountId().toString()); - } - if (account.getProfileId() != null) { - builder.setProfileId(account.getProfileId().toString()); - } - if (account.getAuthenticationProvider() != null) { - builder.setAuthenticationIdentifier(account.getAuthenticationProvider()); - } - if (account.getAuthenticationProviderType() != null) { - builder.setAuthenticationType(account.getAuthenticationProviderType()); - } - if (account.getAccountMark() != null) { - builder.setAccountMark(account.getAccountMark()); - } - if (account.getAccountName() != null) { - builder.setAccountName(account.getAccountName()); - } - if (account.getFirstName() != null) { - builder.setFirstName(account.getFirstName()); - } - if (account.getLastName() != null) { - builder.setLastName(account.getLastName()); - } - if (account.getUsername() != null) { - builder.setUsername(account.getUsername()); - } - if (account.getQrCode() != null) { - builder.setQrCode(account.getQrCode()); - } - if (account.getAvatar() != null) { - builder.setAvatar(com.google.protobuf.ByteString.copyFrom(account.getAvatar())); - } - if (account.getRoles() != null) { - for (String role : account.getRoles()) { - builder.addRoles(Role.valueOf(role)); - } - } - if (account.getAccessStatus() != null) { - builder.setAccessStatus(AccessStatus.valueOf(account.getAccessStatus())); - } - if (account.getContactsInfo() != null) { - for (ContactInfo c : account.getContactsInfo()) { - builder.addContactsInfo(toProto(c)); - } - } - return builder.build(); - } - - public ContactDetails toProto(ContactInfo contactInfo) { - - Builder builder = ContactDetails.newBuilder(); - - ContactType contactType = buildContactType(contactInfo.getType()); - if (contactType != null) { - builder.setType(contactType); - } - if (contactInfo.getValue() != null) { - builder.setValue(contactInfo.getValue()); - } - if (contactInfo.getLabel() != null) { - builder.setLabel(contactInfo.getLabel()); - } - - return builder.build(); - } - - private ContactType buildContactType(String type) { - ContactType contactType = null; - switch (type) { - case "PHONE_CONTACT": - contactType = ContactType.PHONE_CONTACT; - break; - case "EMAIL_CONTACT": - contactType = ContactType.EMAIL_CONTACT; - break; - case "FACEBOOK_CONTACT": - contactType = ContactType.FACEBOOK_CONTACT; - break; - case "GOOGLEPLUS_CONTACT": - contactType = ContactType.GOOGLEPLUS_CONTACT; - break; - case "TWITTER_CONTACT": - contactType = ContactType.TWITTER_CONTACT; - break; - } - return contactType; - } } -- GitLab