From 545289d466831652dc8e991056cbdbbfbc07a392 Mon Sep 17 00:00:00 2001 From: Kirill Liubun Date: Fri, 7 Oct 2016 17:12:16 +0300 Subject: [PATCH] Merge fixes from release-0.10 --- .../admin/client/mvp/data/DataSource.java | 21 +- .../mvp/data/EndpointProfileDataProvider.java | 223 +++++++++--------- .../view/endpoint/EndpointProfileGrid.java | 18 +- .../admin/controller/UserController.java | 68 +++--- .../admin/services/AbstractAdminService.java | 66 +++--- .../admin/services/UserServiceImpl.java | 28 +-- 6 files changed, 225 insertions(+), 199 deletions(-) diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/DataSource.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/DataSource.java index 00bf8feb8b..c4eb22db40 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/DataSource.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/DataSource.java @@ -604,19 +604,20 @@ protected void onResult(Void result) { /** * Edits a user. + * * @param user new user * @param callback callback which should be called with a result */ - public void editUser(UserDto user, final AsyncCallback callback) { - userRpcService.editUser(user, true, new DataCallback(callback) { - @Override - protected void onResult(UserDto result) { - if (KaaAdmin.getAuthInfo().getAuthority() == KaaAuthorityDto.TENANT_ADMIN) { - refreshUsers(); - } - } - }); - } + public void editUser(UserDto user, final AsyncCallback callback) { + userRpcService.editUser(user, true, new DataCallback(callback) { + @Override + protected void onResult(UserDto result) { + if (KaaAdmin.getAuthInfo().getAuthority() == KaaAuthorityDto.TENANT_ADMIN) { + refreshUsers(); + } + } + }); + } /** * Returns a user with a specified identifier in async way. diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/EndpointProfileDataProvider.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/EndpointProfileDataProvider.java index 632b50fb0a..cc83bb386f 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/EndpointProfileDataProvider.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/data/EndpointProfileDataProvider.java @@ -18,11 +18,10 @@ import static org.kaaproject.kaa.server.admin.client.util.Utils.isNotBlank; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.view.client.HasData; +import com.google.gwt.view.client.Range; -import java.util.Set; import org.kaaproject.avro.ui.gwt.client.widget.grid.AbstractGrid; import org.kaaproject.kaa.common.dto.EndpointProfileDto; import org.kaaproject.kaa.common.dto.EndpointProfilesPageDto; @@ -32,117 +31,129 @@ import org.kaaproject.kaa.server.admin.shared.services.KaaAdminServiceException; import org.kaaproject.kaa.server.admin.shared.services.ServiceErrorCode; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.view.client.HasData; -import com.google.gwt.view.client.Range; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class EndpointProfileDataProvider extends AbstractDataProvider { - public static final String DEFAULT_OFFSET = "0"; - private String limit = "11"; - private String offset = DEFAULT_OFFSET; - private String applicationId; - private String groupID; - private String endpointKeyHash; - private List endpointProfilesList; - private int previousStart = -1; - private AbstractGrid dataGrid; - - public EndpointProfileDataProvider(AbstractGrid dataGrid, - HasErrorMessage hasErrorMessage, String applicationId) { - super(dataGrid, hasErrorMessage, true); - this.dataGrid = dataGrid; - this.applicationId = applicationId; - this.groupID = ""; - endpointProfilesList = new ArrayList<>(); - limit = String.valueOf(dataGrid.getPageSize() + 1); - } - - @Override - protected void onRangeChanged(HasData display) { - if ((endpointKeyHash != null && !endpointKeyHash.isEmpty()) || - (groupID != null && !groupID.isEmpty())) { - int start = display.getVisibleRange().getStart(); - if (previousStart < start ) { - previousStart = start; - setLoaded(false); - } - super.onRangeChanged(display); - } + public static final String DEFAULT_OFFSET = "0"; + private String limit = "11"; + private String offset = DEFAULT_OFFSET; + private String applicationId; + private String groupId; + private String endpointKeyHash; + private List endpointProfilesList; + private int previousStart = -1; + private AbstractGrid dataGrid; + + /** + * All-args constructor. + */ + public EndpointProfileDataProvider(AbstractGrid dataGrid, + HasErrorMessage hasErrorMessage, String applicationId) { + super(dataGrid, hasErrorMessage, true); + this.dataGrid = dataGrid; + this.applicationId = applicationId; + this.groupId = ""; + endpointProfilesList = new ArrayList<>(); + limit = String.valueOf(dataGrid.getPageSize() + 1); + } + + @Override + protected void onRangeChanged(HasData display) { + if ((endpointKeyHash != null && !endpointKeyHash.isEmpty()) + || (groupId != null && !groupId.isEmpty())) { + int start = display.getVisibleRange().getStart(); + if (previousStart < start) { + previousStart = start; + setLoaded(false); + } + super.onRangeChanged(display); } + } - @Override - protected void loadData(final LoadCallback callback) { - if (isNotBlank(endpointKeyHash)) { - KaaAdmin.getDataSource().getEndpointProfileByKeyHash(endpointKeyHash, new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - if (caught instanceof KaaAdminServiceException) { - if (((KaaAdminServiceException) caught).getErrorCode() == ServiceErrorCode.ITEM_NOT_FOUND) { - endpointProfilesList.clear(); - callback.onSuccess(endpointProfilesList); - } - } else { - callback.onFailure(caught); - } + @Override + protected void loadData(final LoadCallback callback) { + if (isNotBlank(endpointKeyHash)) { + KaaAdmin.getDataSource() + .getEndpointProfileByKeyHash(endpointKeyHash, new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + if (caught instanceof KaaAdminServiceException) { + if (((KaaAdminServiceException) caught) + .getErrorCode() == ServiceErrorCode.ITEM_NOT_FOUND) { + endpointProfilesList.clear(); + callback.onSuccess(endpointProfilesList); } + } else { + callback.onFailure(caught); + } + } - @Override - public void onSuccess(EndpointProfileDto endpointProfileDto) { - List result = new ArrayList<>(); - if (endpointProfileDto.getApplicationId().equals(applicationId)) { - result.add(endpointProfileDto); - } - endpointProfilesList.clear(); - endpointProfilesList.addAll(result); - callback.onSuccess(endpointProfilesList); + @Override + public void onSuccess(EndpointProfileDto endpointProfileDto) { + List result = new ArrayList<>(); + if (endpointProfileDto.getApplicationId().equals(applicationId)) { + result.add(endpointProfileDto); + } + endpointProfilesList.clear(); + endpointProfilesList.addAll(result); + callback.onSuccess(endpointProfilesList); + } + }); + } else { + KaaAdmin.getDataSource().getEndpointProfileByGroupId(groupId, limit, offset, + new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + if (caught instanceof KaaAdminServiceException) { + if (((KaaAdminServiceException) caught) + .getErrorCode() == ServiceErrorCode.ITEM_NOT_FOUND) { + endpointProfilesList.clear(); + callback.onSuccess(endpointProfilesList); } - }); - } else { - KaaAdmin.getDataSource().getEndpointProfileByGroupID(groupID, limit, offset, - new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - if (caught instanceof KaaAdminServiceException) { - if (((KaaAdminServiceException) caught).getErrorCode() == ServiceErrorCode.ITEM_NOT_FOUND) { - endpointProfilesList.clear(); - callback.onSuccess(endpointProfilesList); - } - } else callback.onFailure(caught); - } - - @Override - public void onSuccess(EndpointProfilesPageDto result) { - Set hs = new HashSet<>(); - hs.addAll(result.getEndpointProfiles()); - hs.addAll(endpointProfilesList); - endpointProfilesList.clear(); - endpointProfilesList.addAll(hs); - callback.onSuccess(endpointProfilesList); - offset = result.getPageLinkDto().getOffset(); - } - }); - } - } + } else { + callback.onFailure(caught); + } + } - public void setNewGroup(String groupID) { - this.groupID = groupID; - this.endpointKeyHash = ""; - } - - public void setEndpointKeyHash(String endpointKeyHash) { - this.endpointKeyHash = endpointKeyHash; - } - - public void update() { - reset(); - dataGrid.getDataGrid().setVisibleRangeAndClearData( - new Range(0, dataGrid.getPageSize()), true); + @Override + public void onSuccess(EndpointProfilesPageDto result) { + Set hs = new HashSet<>(); + hs.addAll(result.getEndpointProfiles()); + hs.addAll(endpointProfilesList); + endpointProfilesList.clear(); + endpointProfilesList.addAll(hs); + callback.onSuccess(endpointProfilesList); + offset = result.getPageLinkDto().getOffset(); + } + }); } + } - private void reset() { - endpointProfilesList.clear(); - previousStart = -1; - offset = DEFAULT_OFFSET; - } + public void setNewGroup(String groupId) { + this.groupId = groupId; + this.endpointKeyHash = ""; + } + + public void setEndpointKeyHash(String endpointKeyHash) { + this.endpointKeyHash = endpointKeyHash; + } + + /** + * Updates endpoint profile data. + */ + public void update() { + reset(); + dataGrid.getDataGrid().setVisibleRangeAndClearData( + new Range(0, dataGrid.getPageSize()), true); + } + + private void reset() { + endpointProfilesList.clear(); + previousStart = -1; + offset = DEFAULT_OFFSET; + } } diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/view/endpoint/EndpointProfileGrid.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/view/endpoint/EndpointProfileGrid.java index f6a2643a2e..04a63fdd2b 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/view/endpoint/EndpointProfileGrid.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/client/mvp/view/endpoint/EndpointProfileGrid.java @@ -122,15 +122,15 @@ protected String getObjectId(EndpointProfileDto value) { return BaseEncoding.base64().encode(value.getEndpointKeyHash()); } - @Override - protected SimplePager getPager() { - return new SimplePager(SimplePager.TextLocation.CENTER, pagerResources, false, 0, false){ - @Override - protected String createText() { - Range range = getDisplay().getVisibleRange(); - int currentPage = range.getStart() / (range.getLength() != 0 ? range.getLength() : 1) + 1; - return Utils.messages.pagerText(currentPage + ""); - } + @Override + protected SimplePager getPager() { + return new SimplePager(SimplePager.TextLocation.CENTER, pagerResources, false, 0, false) { + @Override + protected String createText() { + Range range = getDisplay().getVisibleRange(); + int currentPage = range.getStart() / (range.getLength() != 0 ? range.getLength() : 1) + 1; + return Utils.messages.pagerText(currentPage + ""); + } @Override public void setPageStart(int index) { diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/controller/UserController.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/controller/UserController.java index d505f47cf8..48df79e9f5 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/controller/UserController.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/controller/UserController.java @@ -244,37 +244,45 @@ public UserDto getUser( return userService.getUser(userId); } - /** - * Edits user to the list of all users. - * - * @param user the user - * @return the user dto - * @throws KaaAdminServiceException the kaa admin service exception - */ - @ApiOperation(value = "Create/Edit user", - notes = "Creates or edits a user. To create a user you do not need to specify the user ID, its Tenant ID will be set to the Tenant ID of the " + - "request submitter. A random password will be generated and presented in the success response in the tempPassword field. To edit user " + - "specify the user ID. If a user with the specified ID exists, it will be updated. Only users with the TENANT_ADMIN role can perform " + - "this operation.") - @ApiResponses(value = { - @ApiResponse(code = 400, message = "Some of the mandatory fields are not correct or are empty"), - @ApiResponse(code = 401, message = "The user is not authenticated or invalid credentials were provided"), - @ApiResponse(code = 403, message = "The authenticated user does not have the required TENANT_ADMIN role or the Tenant ID of the editing user " + - "does not match the Tenant ID of the authenticated user"), - @ApiResponse(code = 500, message = "An unexpected error occurred on the server side")}) - @RequestMapping(value = "user", method = RequestMethod.POST) - @ResponseBody - public UserDto editUser( - @ApiParam(name = "user", value = "UserDto body. Mandatory fields: username, firstName, lastName, mail, authority", required = true) - @Valid @RequestBody UserDto user, - @RequestParam(value="doSendTempPassword", required = false, defaultValue = "false") - boolean doSendTempPassword) throws KaaAdminServiceException { - try { - return userService.editUser(user, doSendTempPassword); - } catch (Exception e) { - throw Utils.handleException(e); - } + /** + * Edits user to the list of all users. + * + * @param user the user + * @return the user dto + * @throws KaaAdminServiceException the kaa admin service exception + */ + @ApiOperation(value = "Create/Edit user", + notes = "Creates or edits a user. To create a user you do not need to specify the user ID," + + " its Tenant ID will be set to the Tenant ID of the request submitter. " + + "A random password will be generated and presented in the success response in " + + "the tempPassword field. To edit user specify the user ID. If a user with " + + "the specified ID exists, it will be updated. Only users with the " + + "TENANT_ADMIN role can perform this operation.") + @ApiResponses(value = { + @ApiResponse(code = 400, + message = "Some of the mandatory fields are not correct or are empty"), + @ApiResponse(code = 401, + message = "The user is not authenticated or invalid credentials were provided"), + @ApiResponse(code = 403, + message = "The authenticated user does not have the required " + + "TENANT_ADMIN role or the Tenant ID of the editing user " + + "does not match the Tenant ID of the authenticated user"), + @ApiResponse(code = 500, message = "An unexpected error occurred on the server side")}) + @RequestMapping(value = "user", method = RequestMethod.POST) + @ResponseBody + public UserDto editUser( + @ApiParam(name = "user", + value = "UserDto body. Mandatory fields: username, firstName, lastName, mail, authority", + required = true) + @Valid @RequestBody UserDto user, + @RequestParam(value = "doSendTempPassword", required = false, defaultValue = "false") + boolean doSendTempPassword) throws KaaAdminServiceException { + try { + return userService.editUser(user, doSendTempPassword); + } catch (Exception ex) { + throw Utils.handleException(ex); } + } /** * Delete user by user id. diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java index 6f83bfe956..9be1d35c34 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/AbstractAdminService.java @@ -318,34 +318,40 @@ RecordField createRecordFieldFromCtlSchemaAndBody(String ctlSchemaId, String bod } } - CreateUserResult saveUser(org.kaaproject.kaa.common.dto.admin.UserDto user, boolean doSendTempPassword) throws Exception { - CreateUserResult result = userFacade.saveUserDto(user, passwordEncoder); - try { - if (!isEmpty(result.getPassword()) && doSendTempPassword) { - messagingService.sendTempPassword(user.getUsername(), - result.getPassword(), - user.getMail()); - } - } catch (Exception e) { - LOG.error("Can't send temporary password. Exception was catched: ", e); - if (isEmpty(user.getExternalUid())) { - userFacade.deleteUser(result.getUserId()); - } - StringBuilder errorMessage = new StringBuilder("Failed to send email with temporary password. "); - if (e instanceof MailException) { - errorMessage.append("Please, check outgoing email settings. "); - } - throw new KaaAdminServiceException(String.valueOf(errorMessage.append("See server logs for details.")), ServiceErrorCode.GENERAL_ERROR); - } - return result; + CreateUserResult saveUser(org.kaaproject.kaa.common.dto.admin.UserDto user, + boolean doSendTempPassword) throws Exception { + CreateUserResult result = userFacade.saveUserDto(user, passwordEncoder); + try { + if (!isEmpty(result.getPassword()) && doSendTempPassword) { + messagingService.sendTempPassword(user.getUsername(), + result.getPassword(), + user.getMail()); + } + } catch (Exception ex) { + LOG.error("Can't send temporary password. Exception was catched: ", ex); + if (isEmpty(user.getExternalUid())) { + userFacade.deleteUser(result.getUserId()); + } + StringBuilder errorMessage = new StringBuilder("Failed to send email" + + " with temporary password. "); + if (ex instanceof MailException) { + errorMessage.append("Please, check outgoing email settings. "); + } + throw new KaaAdminServiceException( + String.valueOf(errorMessage.append("See server logs for details.")), + ServiceErrorCode.GENERAL_ERROR + ); } + return result; + } - String createNewUser(org.kaaproject.kaa.common.dto.admin.UserDto user, boolean doSendTempPassword) throws Exception { - checkFieldUniquieness( - user.getUsername(), - userFacade.getAll().stream().map(u -> u.getUsername()).collect(Collectors.toSet()), - "userName" - ); + String createNewUser(org.kaaproject.kaa.common.dto.admin.UserDto user, + boolean doSendTempPassword) throws Exception { + checkFieldUniquieness( + user.getUsername(), + userFacade.getAll().stream().map(u -> u.getUsername()).collect(Collectors.toSet()), + "userName" + ); checkFieldUniquieness( user.getMail(), @@ -353,10 +359,10 @@ String createNewUser(org.kaaproject.kaa.common.dto.admin.UserDto user, boolean d "email" ); - CreateUserResult result = saveUser(user, doSendTempPassword); - user.setExternalUid(result.getUserId().toString()); - return result.getPassword(); - } + CreateUserResult result = saveUser(user, doSendTempPassword); + user.setExternalUid(result.getUserId().toString()); + return result.getPassword(); + } void editUserFacadeUser(org.kaaproject.kaa.common.dto.admin.UserDto user) throws KaaAdminServiceException, ControlServiceException { diff --git a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java index 95b29073f1..6884dff69c 100644 --- a/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java +++ b/server/node/src/main/java/org/kaaproject/kaa/server/admin/services/UserServiceImpl.java @@ -102,21 +102,21 @@ public org.kaaproject.kaa.common.dto.admin.UserDto getUser(String userId) } } - @Override - public org.kaaproject.kaa.common.dto.admin.UserDto editUser(org.kaaproject.kaa.common.dto.admin.UserDto user, - boolean doSendTempPassword) - throws KaaAdminServiceException { - try { - boolean createNewUser = (user.getId() == null); + @Override + public org.kaaproject.kaa.common.dto.admin.UserDto editUser( + org.kaaproject.kaa.common.dto.admin.UserDto user, boolean doSendTempPassword) + throws KaaAdminServiceException { + try { + boolean createNewUser = (user.getId() == null); - String tempPassword = null; - if (createNewUser) { - checkCreateUserPermission(user); - tempPassword = createNewUser(user, doSendTempPassword); - } else { - checkEditUserPermission(user); - editUserFacadeUser(user); - } + String tempPassword = null; + if (createNewUser) { + checkCreateUserPermission(user); + tempPassword = createNewUser(user, doSendTempPassword); + } else { + checkEditUserPermission(user); + editUserFacadeUser(user); + } org.kaaproject.kaa.common.dto.admin.UserDto editedUser = editControlServiceUser(user); if (StringUtils.isNotBlank(tempPassword)) {