From 4732442672b0eab640a2ec35625edcbdf23b25c9 Mon Sep 17 00:00:00 2001 From: PEDSF Date: Sat, 28 Nov 2020 12:15:57 +0100 Subject: [PATCH] solve bug of fechType --- .../petclinic/common/CommonAttribute.java | 6 +- .../petclinic/common/CommonParameter.java | 2 + .../configuration/WebSecurityConfig.java | 22 +-- .../configuration/WebSocketConfig.java | 1 + .../petclinic/controller/OwnerController.java | 3 +- .../petclinic/controller/PetController.java | 25 +-- .../petclinic/controller/UserController.java | 25 +-- .../petclinic/controller/VetController.java | 2 +- .../petclinic/controller/VisitController.java | 4 +- .../dto/{ => business}/OwnerDTO.java | 3 +- .../petclinic/dto/{ => business}/PetDTO.java | 3 +- .../dto/{ => business}/PetTypeDTO.java | 4 +- .../dto/{ => business}/SpecialtyDTO.java | 4 +- .../petclinic/dto/{ => business}/VetDTO.java | 3 +- .../petclinic/dto/{ => business}/VetsDTO.java | 2 +- .../dto/{ => business}/VisitDTO.java | 5 +- .../petclinic/dto/common/AuthProviderDTO.java | 2 - .../petclinic/dto/{ => common}/BaseDTO.java | 2 +- .../petclinic/dto/common/CredentialDTO.java | 2 +- .../petclinic/dto/{ => common}/NamedDTO.java | 2 +- .../petclinic/dto/{ => common}/PersonDTO.java | 2 +- .../petclinic/dto/common/PrivilegeDTO.java | 26 +++ .../samples/petclinic/dto/common/RoleDTO.java | 25 ++- .../samples/petclinic/dto/common/UserDTO.java | 151 +++++------------- .../petclinic/formatter/PetTypeFormatter.java | 2 +- .../petclinic/model/business/Owner.java | 4 +- .../petclinic/model/common/Privilege.java | 51 +++--- .../samples/petclinic/model/common/Role.java | 59 +++---- .../samples/petclinic/model/common/User.java | 137 ++++------------ .../petclinic/repository/RoleRepository.java | 13 +- .../petclinic/repository/UserRepository.java | 22 ++- .../service/business/OwnerService.java | 12 +- .../service/business/PetService.java | 9 +- .../service/business/PetTypeService.java | 2 +- .../service/business/SpecialtyService.java | 2 +- .../service/business/VetService.java | 4 +- .../service/business/VisitService.java | 2 +- .../petclinic/service/common/UserService.java | 22 +-- .../petclinic/validator/PetDTOValidator.java | 2 +- .../validator/VisitDTOValidator.java | 2 +- src/main/resources/db/h2/data.sql | 10 ++ src/main/resources/db/h2/schema.sql | 14 ++ .../templates/pets/createOrUpdatePetForm.html | 3 +- .../OwnerControllerIntegrationTest.java | 8 +- .../controller/OwnerControllerTest.java | 17 +- .../PetControllerIntegrationTest.java | 4 +- .../controller/PetControllerTest.java | 6 +- .../VetControllerIntegrationTest.java | 2 +- .../controller/VetControllerTest.java | 6 +- .../VisitControllerIntegrationTest.java | 4 +- .../controller/VisitControllerTest.java | 6 +- .../formater/PetTypeDTOFormatterTest.java | 2 +- .../formater/PetTypeFormatterTest.java | 2 +- .../petclinic/service/OwnerServiceTest.java | 8 +- .../petclinic/service/PetServiceTest.java | 8 +- .../petclinic/service/VetServiceTest.java | 4 +- .../validator/PetDTOValidatorTest.java | 4 +- .../validator/VisitDTOValidatorTest.java | 2 +- 58 files changed, 350 insertions(+), 431 deletions(-) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/OwnerDTO.java (96%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/PetDTO.java (95%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/PetTypeDTO.java (68%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/SpecialtyDTO.java (63%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/VetDTO.java (94%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/VetsDTO.java (94%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => business}/VisitDTO.java (94%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => common}/BaseDTO.java (95%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => common}/NamedDTO.java (95%) rename src/main/java/org/springframework/samples/petclinic/dto/{ => common}/PersonDTO.java (96%) create mode 100644 src/main/java/org/springframework/samples/petclinic/dto/common/PrivilegeDTO.java diff --git a/src/main/java/org/springframework/samples/petclinic/common/CommonAttribute.java b/src/main/java/org/springframework/samples/petclinic/common/CommonAttribute.java index b7b2566ea..d081b1ae8 100644 --- a/src/main/java/org/springframework/samples/petclinic/common/CommonAttribute.java +++ b/src/main/java/org/springframework/samples/petclinic/common/CommonAttribute.java @@ -11,13 +11,15 @@ public final class CommonAttribute { public static final String ID = "id"; + public static final String EMAIL = "email"; + public static final String NAME = "name"; public static final String NEW = "new"; public static final String OWNER = "owner"; - public static final String OWNER_ID = "ownerId"; + public static final String OWNER_ID = "id"; public static final String OWNER_LAST_NAME = "lastName"; @@ -31,6 +33,8 @@ public final class CommonAttribute { public static final String OWNER_PETS = "pets"; + public static final String PASSWORD = "password"; + public static final String PET = "pet"; public static final String SELECTIONS = "selections"; diff --git a/src/main/java/org/springframework/samples/petclinic/common/CommonParameter.java b/src/main/java/org/springframework/samples/petclinic/common/CommonParameter.java index 33b6bf576..d0fd989f3 100644 --- a/src/main/java/org/springframework/samples/petclinic/common/CommonParameter.java +++ b/src/main/java/org/springframework/samples/petclinic/common/CommonParameter.java @@ -38,6 +38,8 @@ public class CommonParameter { public static final int ROLE_MAX = 10; + public static final int PRIVILEGE_MAX = 10; + public static final int ZIP_MAX = 6; public static final int ZIP_MIN = 5; diff --git a/src/main/java/org/springframework/samples/petclinic/configuration/WebSecurityConfig.java b/src/main/java/org/springframework/samples/petclinic/configuration/WebSecurityConfig.java index db7157e54..9998e2aa0 100644 --- a/src/main/java/org/springframework/samples/petclinic/configuration/WebSecurityConfig.java +++ b/src/main/java/org/springframework/samples/petclinic/configuration/WebSecurityConfig.java @@ -6,6 +6,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; +import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; @@ -60,32 +61,31 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { http.authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/login", "/logout", "/register","/confirm-account").permitAll() - .antMatchers("/websocket/**", "/topic/**","/topic/public", "/app/**").permitAll() + .antMatchers("/websocket/**", "/topic/**", "/app/**").permitAll() .antMatchers("/resources/**").permitAll() .antMatchers("/h2-console/**").permitAll() - .antMatchers("/**").authenticated() .antMatchers("/edit/**").authenticated() .anyRequest().authenticated() .and() .formLogin() - .loginPage("/login") - .loginProcessingUrl("/login") - .defaultSuccessUrl("/login/success", true) + .loginPage(CommonEndPoint.LOGIN) + .loginProcessingUrl(CommonEndPoint.LOGIN) + .defaultSuccessUrl(CommonEndPoint.LOGIN_SUCCESS, true) .usernameParameter("email") .passwordParameter("password") - .failureUrl("/login") + .failureUrl(CommonEndPoint.LOGIN) .permitAll() .and() .logout() - .logoutUrl("/logout") - .logoutSuccessUrl("/logout/success") + .logoutUrl(CommonEndPoint.LOGOUT) + .logoutSuccessUrl(CommonEndPoint.LOGOUT_SUCCESS) .invalidateHttpSession(true) .permitAll() .and() .oauth2Login() - .loginPage("/login") - .defaultSuccessUrl("/oauth2/success", true) - .failureUrl("/login") + .loginPage(CommonEndPoint.LOGIN) + .defaultSuccessUrl(CommonEndPoint.OAUTH2_SUCCESS, true) + .failureUrl(CommonEndPoint.LOGIN) .clientRegistrationRepository(clientRegistrationRepository()) .authorizedClientService(authorizedClientService()) .and() diff --git a/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketConfig.java b/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketConfig.java index 0bf9dcf55..af9b02a4d 100644 --- a/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketConfig.java +++ b/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketConfig.java @@ -27,6 +27,7 @@ public class WebSocketConfig extends AbstractSecurityWebSocketMessageBrokerConfi * registry.setApplicationDestinationPrefixes("/app"); } * */ + @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); diff --git a/src/main/java/org/springframework/samples/petclinic/controller/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/controller/OwnerController.java index cfdbd9a5b..e2ca50e54 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/OwnerController.java @@ -17,7 +17,8 @@ package org.springframework.samples.petclinic.controller; import org.springframework.samples.petclinic.common.*; import org.springframework.samples.petclinic.controller.common.WebSocketSender; -import org.springframework.samples.petclinic.dto.*; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; import org.springframework.samples.petclinic.service.business.OwnerService; import org.springframework.samples.petclinic.service.business.VisitService; import org.springframework.stereotype.Controller; diff --git a/src/main/java/org/springframework/samples/petclinic/controller/PetController.java b/src/main/java/org/springframework/samples/petclinic/controller/PetController.java index 4cd91ea9b..97277fe64 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/PetController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/PetController.java @@ -18,7 +18,9 @@ package org.springframework.samples.petclinic.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.samples.petclinic.common.*; import org.springframework.samples.petclinic.controller.common.WebSocketSender; -import org.springframework.samples.petclinic.dto.*; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.service.business.OwnerService; import org.springframework.samples.petclinic.service.business.PetService; import org.springframework.samples.petclinic.service.business.PetTypeService; @@ -40,7 +42,7 @@ import java.util.Collection; * @author Paul-Emmanuel DOS SANTOS FACAO */ @Controller -@RequestMapping(CommonEndPoint.OWNERS_ID) +@RequestMapping("/owners/{ownerId}") class PetController extends WebSocketSender { private final OwnerService ownerService; @@ -60,13 +62,12 @@ class PetController extends WebSocketSender { @ModelAttribute("owner") public OwnerDTO findOwner(@PathVariable("ownerId") int ownerId) { - OwnerDTO ownerDTO = ownerService.findById(ownerId); - return ownerDTO; + return ownerService.findById(ownerId); } @InitBinder("owner") public void initOwnerBinder(WebDataBinder dataBinder) { - // dataBinder.setDisallowedFields(CommonAttribute.OWNER_ID); + dataBinder.setDisallowedFields(CommonAttribute.ID); } @InitBinder("pet") @@ -75,7 +76,7 @@ class PetController extends WebSocketSender { } @GetMapping(CommonEndPoint.PETS_NEW) - public String initCreationForm(@ModelAttribute(CommonAttribute.OWNER) OwnerDTO owner, ModelMap model) { + public String initCreationForm(@ModelAttribute("owner") OwnerDTO owner, ModelMap model) { PetDTO pet = new PetDTO(); owner.addPet(pet); model.put(CommonAttribute.PET, pet); @@ -83,8 +84,8 @@ class PetController extends WebSocketSender { } @PostMapping(CommonEndPoint.PETS_NEW) - public String processCreationForm(@ModelAttribute(CommonAttribute.OWNER) OwnerDTO owner, - @ModelAttribute(CommonAttribute.PET) @Valid PetDTO pet, BindingResult result, ModelMap model) { + public String processCreationForm(@ModelAttribute("owner") OwnerDTO owner, @Valid PetDTO pet, BindingResult result, + ModelMap model) { if (owner == null) { sendErrorMessage(CommonWebSocket.PET_CREATION_ERROR); result.rejectValue(CommonAttribute.OWNER, CommonError.NOT_FOUND_ARGS, CommonError.NOT_FOUND_MESSAGE); @@ -109,16 +110,16 @@ class PetController extends WebSocketSender { } } - @GetMapping(CommonEndPoint.PETS_ID_EDIT) + @GetMapping("/pets/{petId}/edit") public String initUpdateForm(@PathVariable("petId") int petId, ModelMap model) { PetDTO pet = this.petService.findById(petId); model.put(CommonAttribute.PET, pet); return CommonView.PET_CREATE_OR_UPDATE; } - @PostMapping(CommonEndPoint.PETS_ID_EDIT) - public String processUpdateForm(@ModelAttribute(CommonAttribute.PET) @Valid PetDTO pet, BindingResult result, - @ModelAttribute(CommonAttribute.OWNER) OwnerDTO owner, ModelMap model) { + @PostMapping("/pets/{petId}/edit") + public String processUpdateForm(@Valid PetDTO pet, BindingResult result, @ModelAttribute("owner") OwnerDTO owner, + ModelMap model) { if (result.hasErrors()) { pet.setOwner(owner); model.put(CommonAttribute.PET, pet); diff --git a/src/main/java/org/springframework/samples/petclinic/controller/UserController.java b/src/main/java/org/springframework/samples/petclinic/controller/UserController.java index 394ccb6b4..018391547 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/UserController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/UserController.java @@ -59,7 +59,7 @@ public class UserController extends WebSocketSender { @InitBinder("user") public void setAllowedFields(WebDataBinder dataBinder) { - dataBinder.setDisallowedFields(CommonAttribute.USER_ID,"roles"); + dataBinder.setDisallowedFields(CommonAttribute.USER_ID, "roles"); } Map oauth2AuthenticationUrls = new HashMap<>(); @@ -91,7 +91,7 @@ public class UserController extends WebSocketSender { } // set default role - user.addRole("ROLE_USER"); + user.addRole(roleService.findByName("ROLE_USER")); // encode password because we get clear password user.encode(user.getPassword()); @@ -108,8 +108,7 @@ public class UserController extends WebSocketSender { "Your attempt to create new account. To confirm your account, please click here : ", "http://localhost:8080/confirm-account?token=" + credential.getToken()); - // TODO - // emailService.sendMailAsynch(message, Locale.getDefault()); + emailService.sendMailAsynch(message, Locale.getDefault()); log.info(message.toString()); @@ -132,11 +131,13 @@ public class UserController extends WebSocketSender { if (type != ResolvableType.NONE && ClientRegistration.class.isAssignableFrom(type.resolveGenerics()[0])) { clientRegistrations = (Iterable) clientRegistrationRepository; - } - clientRegistrations.forEach(registration -> oauth2AuthenticationUrls.put(registration.getClientName(), - "oauth2/authorization/" + registration.getRegistrationId())); - model.put("urls", oauth2AuthenticationUrls); + if (clientRegistrations != null) { + clientRegistrations.forEach(registration -> oauth2AuthenticationUrls.put(registration.getClientName(), + "oauth2/authorization/" + registration.getRegistrationId())); + model.put("urls", oauth2AuthenticationUrls); + } + } return CommonView.USER_LOGIN; } @@ -174,7 +175,7 @@ public class UserController extends WebSocketSender { user.setFirstName(firstName); user.setLastName(lastName); user.setEnabled(true); - user.addRole("ROLE_USER"); + user.addRole(roleService.findByName("ROLE_USER")); user = userService.save(user); } @@ -193,7 +194,7 @@ public class UserController extends WebSocketSender { SecurityContextHolder.clearContext(); } - else if (credential.isVerified()) { + else if (Boolean.TRUE.equals(credential.isVerified())) { securityService.autoLogin(credential.getEmail(), credential.getPassword()); String message = String.format(CommonWebSocket.USER_LOGGED_IN, firstName, lastName); sendSuccessMessage(message); @@ -293,7 +294,7 @@ public class UserController extends WebSocketSender { UserDTO operator = (UserDTO) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); UserDTO user = userService.findById(userId); - if (user.equals(operator) || operator.getRoles().contains("ROLE_ADMIN")) { + if (user.equals(operator) || operator.hasRole("ROLE_ADMIN")) { model.addAttribute(CommonAttribute.USER, user); model.addAttribute(CommonAttribute.USER_ID, user.getId()); return CommonView.USER_CHANGE_PASSWORD; @@ -329,7 +330,7 @@ public class UserController extends WebSocketSender { try { UserDTO operator = (UserDTO) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - if (user.equals(operator) || operator.getRoles().contains("ROLE_ADMIN")) { + if (user.equals(operator) || operator.hasRole("ROLE_ADMIN")) { // encode password user.encode(newPassword); user = userService.save(user); diff --git a/src/main/java/org/springframework/samples/petclinic/controller/VetController.java b/src/main/java/org/springframework/samples/petclinic/controller/VetController.java index d4f44c895..9ffc0819d 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/VetController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/VetController.java @@ -20,7 +20,7 @@ import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; import org.springframework.samples.petclinic.common.CommonWebSocket; import org.springframework.samples.petclinic.controller.common.WebSocketSender; -import org.springframework.samples.petclinic.dto.VetsDTO; +import org.springframework.samples.petclinic.dto.business.VetsDTO; import org.springframework.samples.petclinic.service.business.VetService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; diff --git a/src/main/java/org/springframework/samples/petclinic/controller/VisitController.java b/src/main/java/org/springframework/samples/petclinic/controller/VisitController.java index a8d05e654..f06fd65aa 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/VisitController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/VisitController.java @@ -24,8 +24,8 @@ import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; import org.springframework.samples.petclinic.common.CommonWebSocket; import org.springframework.samples.petclinic.controller.common.WebSocketSender; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.samples.petclinic.service.business.PetService; import org.springframework.samples.petclinic.service.business.VisitService; import org.springframework.samples.petclinic.validator.VisitDTOValidator; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/OwnerDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/OwnerDTO.java similarity index 96% rename from src/main/java/org/springframework/samples/petclinic/dto/OwnerDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/OwnerDTO.java index 938e095c9..19c973b3a 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/OwnerDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/OwnerDTO.java @@ -13,12 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; import org.springframework.core.style.ToStringCreator; import org.springframework.samples.petclinic.common.CommonAttribute; +import org.springframework.samples.petclinic.dto.common.PersonDTO; import javax.validation.constraints.Digits; import javax.validation.constraints.NotEmpty; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/PetDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/PetDTO.java similarity index 95% rename from src/main/java/org/springframework/samples/petclinic/dto/PetDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/PetDTO.java index c51587db9..78a9e5264 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/PetDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/PetDTO.java @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.samples.petclinic.dto.common.NamedDTO; import java.time.LocalDate; import java.util.*; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/PetTypeDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/PetTypeDTO.java similarity index 68% rename from src/main/java/org/springframework/samples/petclinic/dto/PetTypeDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/PetTypeDTO.java index 12998ba83..d4ea5e0d3 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/PetTypeDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/PetTypeDTO.java @@ -1,4 +1,6 @@ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; + +import org.springframework.samples.petclinic.dto.common.NamedDTO; /** * Simple Data Transfert Object representing PetType. diff --git a/src/main/java/org/springframework/samples/petclinic/dto/SpecialtyDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/SpecialtyDTO.java similarity index 63% rename from src/main/java/org/springframework/samples/petclinic/dto/SpecialtyDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/SpecialtyDTO.java index d209a511a..f94e1d191 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/SpecialtyDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/SpecialtyDTO.java @@ -1,4 +1,6 @@ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; + +import org.springframework.samples.petclinic.dto.common.NamedDTO; import java.io.Serializable; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/VetDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/VetDTO.java similarity index 94% rename from src/main/java/org/springframework/samples/petclinic/dto/VetDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/VetDTO.java index a4aa14636..17819f309 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/VetDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/VetDTO.java @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; +import org.springframework.samples.petclinic.dto.common.PersonDTO; import javax.xml.bind.annotation.XmlElement; import java.util.*; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/VetsDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/VetsDTO.java similarity index 94% rename from src/main/java/org/springframework/samples/petclinic/dto/VetsDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/VetsDTO.java index a58782048..7bb162c48 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/VetsDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/VetsDTO.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/VisitDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/business/VisitDTO.java similarity index 94% rename from src/main/java/org/springframework/samples/petclinic/dto/VisitDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/business/VisitDTO.java index f12d0f9a9..e2cb486a2 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/VisitDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/business/VisitDTO.java @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.business; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.samples.petclinic.dto.common.BaseDTO; + import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; import java.time.LocalDate; /** diff --git a/src/main/java/org/springframework/samples/petclinic/dto/common/AuthProviderDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/AuthProviderDTO.java index 480a7714e..f43285a89 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/common/AuthProviderDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/AuthProviderDTO.java @@ -1,7 +1,5 @@ package org.springframework.samples.petclinic.dto.common; -import org.springframework.samples.petclinic.dto.NamedDTO; - /** * Simple Data Transfert Object representing a Authorization Provider. * diff --git a/src/main/java/org/springframework/samples/petclinic/dto/BaseDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/BaseDTO.java similarity index 95% rename from src/main/java/org/springframework/samples/petclinic/dto/BaseDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/common/BaseDTO.java index 7adb4312e..64c3ba019 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/BaseDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/BaseDTO.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.common; import java.io.Serializable; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/common/CredentialDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/CredentialDTO.java index f6b0aaf58..3247bfdfa 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/common/CredentialDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/CredentialDTO.java @@ -2,7 +2,7 @@ package org.springframework.samples.petclinic.dto.common; import org.springframework.samples.petclinic.common.CommonError; import org.springframework.samples.petclinic.common.CommonParameter; -import org.springframework.samples.petclinic.dto.BaseDTO; + import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/NamedDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/NamedDTO.java similarity index 95% rename from src/main/java/org/springframework/samples/petclinic/dto/NamedDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/common/NamedDTO.java index 1d3168628..f827a1d2c 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/NamedDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/NamedDTO.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.common; /** * Simple Data Transfert Object with a name property to BaseDTO. Used as a diff --git a/src/main/java/org/springframework/samples/petclinic/dto/PersonDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/PersonDTO.java similarity index 96% rename from src/main/java/org/springframework/samples/petclinic/dto/PersonDTO.java rename to src/main/java/org/springframework/samples/petclinic/dto/common/PersonDTO.java index f41818528..7392b791c 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/PersonDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/PersonDTO.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.samples.petclinic.dto; +package org.springframework.samples.petclinic.dto.common; import javax.validation.constraints.NotEmpty; diff --git a/src/main/java/org/springframework/samples/petclinic/dto/common/PrivilegeDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/PrivilegeDTO.java new file mode 100644 index 000000000..54f0ff273 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/PrivilegeDTO.java @@ -0,0 +1,26 @@ +package org.springframework.samples.petclinic.dto.common; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Collection; + +/** + * Simple Data Transfert Object representing a Privileges. + * + * @author Paul-Emmanuel DOS SANTOS FACAO + */ +@Getter +@Setter +@NoArgsConstructor +public class PrivilegeDTO implements Serializable { + + private Integer id; + + private String name; + + private Collection roles; + +} diff --git a/src/main/java/org/springframework/samples/petclinic/dto/common/RoleDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/RoleDTO.java index 3c1cca86d..7dee5829a 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/common/RoleDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/RoleDTO.java @@ -1,14 +1,35 @@ package org.springframework.samples.petclinic.dto.common; -import org.springframework.samples.petclinic.dto.NamedDTO; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.samples.petclinic.common.CommonParameter; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import java.io.Serializable; +import java.util.Collection; /** * Simple Data Transfert Object representing a list of roles. * * @author Paul-Emmanuel DOS SANTOS FACAO */ -public class RoleDTO extends NamedDTO implements Serializable { +@Getter +@Setter +@NoArgsConstructor +public class RoleDTO implements Serializable { + + private Integer id; + + @NotNull + @NotEmpty + @Size(max = CommonParameter.ROLE_MAX) + private String name; + + private Collection users; + + private Collection privileges; } diff --git a/src/main/java/org/springframework/samples/petclinic/dto/common/UserDTO.java b/src/main/java/org/springframework/samples/petclinic/dto/common/UserDTO.java index c89861c72..935d5549a 100644 --- a/src/main/java/org/springframework/samples/petclinic/dto/common/UserDTO.java +++ b/src/main/java/org/springframework/samples/petclinic/dto/common/UserDTO.java @@ -1,8 +1,9 @@ package org.springframework.samples.petclinic.dto.common; +import lombok.Getter; +import lombok.Setter; import org.springframework.samples.petclinic.common.CommonError; import org.springframework.samples.petclinic.common.CommonParameter; -import org.springframework.samples.petclinic.dto.PersonDTO; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -14,6 +15,8 @@ import java.io.Serializable; import java.util.*; +@Getter +@Setter public class UserDTO extends PersonDTO implements Serializable, UserDetails { @Size(min = CommonParameter.EMAIL_MIN, max = CommonParameter.EMAIL_MAX, message = CommonError.FORMAT_BETWEEN @@ -37,7 +40,7 @@ public class UserDTO extends PersonDTO implements Serializable, UserDetails { private boolean credentialsNonExpired; - private List roles; + private Collection roles; @Size(max = CommonParameter.PHONE_MAX, message = CommonError.FORMAT_LESS + CommonParameter.PHONE_MAX) // @Pattern(regexp = CommonParameter.PHONE_REGEXP, message = CommonError.PHONE_FORMAT) @@ -75,150 +78,80 @@ public class UserDTO extends PersonDTO implements Serializable, UserDetails { return email; } - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getMatchingPassword() { - return matchingPassword; - } - - public void setMatchingPassword(String matchingPassword) { - this.matchingPassword = matchingPassword; - } - @Override public boolean isEnabled() { return enabled; } - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - @Override public boolean isAccountNonExpired() { return accountNonExpired; } - public void setAccountNonExpired(boolean accountNonExpired) { - this.accountNonExpired = accountNonExpired; - } - @Override public boolean isAccountNonLocked() { return accountNonLocked; } - public void setAccountNonLocked(boolean accountNonLocked) { - this.accountNonLocked = accountNonLocked; - } - @Override public boolean isCredentialsNonExpired() { return credentialsNonExpired; } - public void setCredentialsNonExpired(boolean credentialsNonExpired) { - this.credentialsNonExpired = credentialsNonExpired; + public boolean hasRole(String roleName) { + for (RoleDTO roleDTO : this.roles) { + if (roleDTO.getName().equals(roleName)) + return true; + } + return false; } - @Override - public Collection getAuthorities() { - Set grantedAuthorities = new HashSet<>(); - - this.roles.forEach(role -> grantedAuthorities.add(new SimpleGrantedAuthority(role))); - - return grantedAuthorities; + public boolean hasPrivilege(String privilegeName) { + for (RoleDTO roleDTO : this.roles) { + for (PrivilegeDTO privilegeDTO : roleDTO.getPrivileges()) { + if (privilegeDTO.getName().equals(privilegeName)) + return true; + } + } + return false; } - public List getRoles() { - return roles; - } - - public void setRoles(List roles) { - this.roles = roles; - } - - public void addRole(String role) { + public void addRole(RoleDTO role) { if (this.roles == null) { - this.roles = new ArrayList<>(); + this.roles = new HashSet<>(); } this.roles.add(role); } - public void removeRole(String role) { + public void removeRole(RoleDTO role) { this.roles.remove(role); } - public String getTelephone() { - return telephone; + private List getGrantedAuthorities(List privileges) { + List authorities = new ArrayList<>(); + for (String privilege : privileges) { + authorities.add(new SimpleGrantedAuthority(privilege)); + } + return authorities; } - public void setTelephone(String telephone) { - this.telephone = telephone; + private List getPrivileges(Collection roles) { + + List privileges = new ArrayList<>(); + List collection = new ArrayList<>(); + for (RoleDTO role : roles) { + collection.addAll(role.getPrivileges()); + } + for (PrivilegeDTO item : collection) { + privileges.add(item.getName()); + } + return privileges; } - public String getStreet1() { - return street1; - } - - public void setStreet1(String street1) { - this.street1 = street1; - } - - public String getStreet2() { - return street2; - } - - public void setStreet2(String street2) { - this.street2 = street2; - } - - public String getStreet3() { - return street3; - } - - public void setStreet3(String street3) { - this.street3 = street3; - } - - public String getZipCode() { - return zipCode; - } - - public void setZipCode(String zipCode) { - this.zipCode = zipCode; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; + @Override + public Collection getAuthorities() { + return getGrantedAuthorities(getPrivileges(this.roles)); } @Override diff --git a/src/main/java/org/springframework/samples/petclinic/formatter/PetTypeFormatter.java b/src/main/java/org/springframework/samples/petclinic/formatter/PetTypeFormatter.java index 418980d03..fab71de72 100644 --- a/src/main/java/org/springframework/samples/petclinic/formatter/PetTypeFormatter.java +++ b/src/main/java/org/springframework/samples/petclinic/formatter/PetTypeFormatter.java @@ -20,7 +20,7 @@ import java.util.Collection; import java.util.Locale; import org.springframework.format.Formatter; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.service.business.PetService; import org.springframework.stereotype.Component; diff --git a/src/main/java/org/springframework/samples/petclinic/model/business/Owner.java b/src/main/java/org/springframework/samples/petclinic/model/business/Owner.java index a86bc0c65..7b65cd175 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/business/Owner.java +++ b/src/main/java/org/springframework/samples/petclinic/model/business/Owner.java @@ -107,7 +107,7 @@ public class Owner extends Person { public void addPet(Pet pet) { if (this.pets == null) { - + this.pets = new HashSet<>(); } try { if (!this.getPets().contains(pet)) { @@ -152,7 +152,7 @@ public class Owner extends Person { @Override public String toString() { - return new ToStringCreator(this).append(CommonAttribute.OWNER_ID, this.getId()) + return new ToStringCreator(this).append(CommonAttribute.ID, this.getId()) .append(CommonAttribute.NEW, this.isNew()).append(CommonAttribute.OWNER_LAST_NAME, this.getLastName()) .append(CommonAttribute.OWNER_FIRST_NAME, this.getFirstName()) .append(CommonAttribute.OWNER_ADDRESS, this.address).append(CommonAttribute.OWNER_CITY, this.city) diff --git a/src/main/java/org/springframework/samples/petclinic/model/common/Privilege.java b/src/main/java/org/springframework/samples/petclinic/model/common/Privilege.java index 7a063a6d6..70ab218b5 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/common/Privilege.java +++ b/src/main/java/org/springframework/samples/petclinic/model/common/Privilege.java @@ -1,42 +1,35 @@ package org.springframework.samples.petclinic.model.common; -import javax.persistence.*; -import java.util.Set; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.samples.petclinic.common.CommonParameter; +import javax.persistence.*; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.Collection; @Entity -public class Privilege { +@Table(name = "privileges") +@Getter +@Setter +@NoArgsConstructor +public class Privilege implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; + private Integer id; + @NotNull + @NotEmpty + @Size(max = CommonParameter.PRIVILEGE_MAX) + @Column(name = "name", length = CommonParameter.PRIVILEGE_MAX) private String name; - @ManyToMany(mappedBy = "privileges") - private Set roles; + @ManyToMany(mappedBy = "privileges", fetch = FetchType.EAGER) + private Collection roles; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getRoles() { - return roles; - } - - public void setRoles(Set roles) { - this.roles = roles; - } } diff --git a/src/main/java/org/springframework/samples/petclinic/model/common/Role.java b/src/main/java/org/springframework/samples/petclinic/model/common/Role.java index e86027d26..d9e893696 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/common/Role.java +++ b/src/main/java/org/springframework/samples/petclinic/model/common/Role.java @@ -1,5 +1,10 @@ package org.springframework.samples.petclinic.model.common; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.LazyCollection; +import org.hibernate.annotations.LazyCollectionOption; import org.springframework.samples.petclinic.common.CommonParameter; import javax.persistence.*; @@ -7,10 +12,18 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.io.Serializable; -import java.util.Set; +import java.util.Collection; -@Entity(name = "Role") +/** + * Entity representing a Role. + * + * @author Paul-Emmanuel DOS SANTOS FACAO + */ +@Entity @Table(name = "roles") +@Getter +@Setter +@NoArgsConstructor public class Role implements Serializable { @Id @@ -23,40 +36,14 @@ public class Role implements Serializable { @Column(name = "name", length = CommonParameter.ROLE_MAX) private String name; - @ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY) - private Set users; + @ManyToMany(mappedBy = "roles") + @LazyCollection(LazyCollectionOption.FALSE) + private Collection users; - public Role(Integer id, @NotNull @NotEmpty @Size(max = CommonParameter.ROLE_MAX) String name) { - this.id = id; - this.name = name; - } - - public Role() { - // empty constructor for creating empty role and add attribute after - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getUsers() { - return users; - } - - public void setUsers(Set users) { - this.users = users; - } + @ManyToMany // (cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @LazyCollection(LazyCollectionOption.FALSE) + @JoinTable(name = "roles_privileges", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id")) + private Collection privileges; } diff --git a/src/main/java/org/springframework/samples/petclinic/model/common/User.java b/src/main/java/org/springframework/samples/petclinic/model/common/User.java index 19226b72b..467d0e9ac 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/common/User.java +++ b/src/main/java/org/springframework/samples/petclinic/model/common/User.java @@ -1,5 +1,7 @@ package org.springframework.samples.petclinic.model.common; +import lombok.Getter; +import lombok.Setter; import org.springframework.samples.petclinic.common.CommonError; import org.springframework.samples.petclinic.common.CommonParameter; import org.springframework.security.core.GrantedAuthority; @@ -20,6 +22,8 @@ import java.util.*; */ @Entity @Table(name = "users") +@Getter +@Setter public class User extends Person implements Serializable, UserDetails { @NotNull @@ -50,10 +54,18 @@ public class User extends Person implements Serializable, UserDetails { @Column(name = "credential_unexpired") private boolean credentialsNonExpired; + /* + * @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) + * + * @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", + * referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", + * referencedColumnName = "id")) private Set roles; + */ + @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")) - private Set roles; + private Collection roles; @Size(max = CommonParameter.PHONE_MAX, message = CommonError.FORMAT_LESS + CommonParameter.PHONE_MAX) // @Pattern(regexp = CommonParameter.PHONE_REGEXP, message = CommonError.PHONE_FORMAT) @@ -89,67 +101,26 @@ public class User extends Person implements Serializable, UserDetails { return email; } - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - @Override - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - @Override public boolean isEnabled() { return enabled; } - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - @Override public boolean isAccountNonExpired() { return accountNonExpired; } - public void setAccountNonExpired(boolean accountNonExpired) { - this.accountNonExpired = accountNonExpired; - } - @Override public boolean isAccountNonLocked() { return accountNonLocked; } - public void setAccountNonLocked(boolean accountNonLocked) { - this.accountNonLocked = accountNonLocked; - } - @Override public boolean isCredentialsNonExpired() { return credentialsNonExpired; } - public void setCredentialsNonExpired(boolean credentialsNonExpired) { - this.credentialsNonExpired = credentialsNonExpired; - } - - public Set getRoles() { - return roles; - } - - public void setRoles(Set roles) { - this.roles = roles; - } - public void addRole(Role role) { if (this.roles == null) { this.roles = new HashSet<>(); @@ -165,69 +136,31 @@ public class User extends Person implements Serializable, UserDetails { } } + private List getGrantedAuthorities(List privileges) { + List authorities = new ArrayList<>(); + for (String privilege : privileges) { + authorities.add(new SimpleGrantedAuthority(privilege)); + } + return authorities; + } + + private List getPrivileges(Collection roles) { + + List privileges = new ArrayList<>(); + List collection = new ArrayList<>(); + for (Role role : roles) { + collection.addAll(role.getPrivileges()); + } + for (Privilege item : collection) { + privileges.add(item.getName()); + } + return privileges; + } + @Override public Collection getAuthorities() { - Set grantedAuthorities = new HashSet<>(); - this.roles.forEach(role -> grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()))); - - return grantedAuthorities; - } - - public String getTelephone() { - return telephone; - } - - public void setTelephone(String telephone) { - this.telephone = telephone; - } - - public String getStreet1() { - return street1; - } - - public void setStreet1(String street1) { - this.street1 = street1; - } - - public String getStreet2() { - return street2; - } - - public void setStreet2(String street2) { - this.street2 = street2; - } - - public String getStreet3() { - return street3; - } - - public void setStreet3(String street3) { - this.street3 = street3; - } - - public String getZipCode() { - return zipCode; - } - - public void setZipCode(String zipCode) { - this.zipCode = zipCode; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; + return getGrantedAuthorities(getPrivileges(this.roles)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/RoleRepository.java b/src/main/java/org/springframework/samples/petclinic/repository/RoleRepository.java index 07ff5de44..9ef1cba52 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/RoleRepository.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/RoleRepository.java @@ -1,7 +1,10 @@ package org.springframework.samples.petclinic.repository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.samples.petclinic.model.common.Role; import org.springframework.data.repository.Repository; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; @@ -15,17 +18,21 @@ public interface RoleRepository extends Repository { /** * Retrieve a {@link Role} from the data store by id. - * @param roleId the id to search for + * @param id the id to search for * @return the {@link Role} if found */ - Role findById(Integer roleId); + @Query("SELECT role FROM Role role join fetch role.privileges WHERE role.id =:id") + @Transactional(readOnly = true) + Role findById(@Param("id") Integer id); /** * Retrieve a {@link Role} from the data store by id. * @param name the name to search for * @return the {@link Role} if found */ - Role findByName(String name); + @Query("SELECT role FROM Role role left join fetch role.users WHERE role.name =:name") + @Transactional(readOnly = true) + Role findByName(@Param("name") String name); /** * Retrieve all {@link Role}s from the data store diff --git a/src/main/java/org/springframework/samples/petclinic/repository/UserRepository.java b/src/main/java/org/springframework/samples/petclinic/repository/UserRepository.java index bd7880e39..0ad63ba61 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/UserRepository.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/UserRepository.java @@ -1,7 +1,11 @@ package org.springframework.samples.petclinic.repository; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.Repository; +import org.springframework.data.repository.query.Param; +import org.springframework.samples.petclinic.model.business.Owner; import org.springframework.samples.petclinic.model.common.User; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; @@ -14,9 +18,23 @@ import java.util.List; */ public interface UserRepository extends Repository { - User findById(Integer id); + /** + * Retrieve an {@link User} from the data store by email. + * @param id the id to search for + * @return the {@link User} if found + */ + @Query("SELECT user FROM User user left join fetch user.roles WHERE user.id =:id") + @Transactional(readOnly = true) + User findById(@Param("id") Integer id); - User findByEmail(String email); + /** + * Retrieve an {@link User} from the data store by email. + * @param email the email to search for + * @return the {@link User} if found + */ + @Query("SELECT user FROM User user left join fetch user.roles WHERE user.email =:email") + @Transactional(readOnly = true) + User findByEmail(@Param("email") String email); Boolean existsByEmail(String email); diff --git a/src/main/java/org/springframework/samples/petclinic/service/business/OwnerService.java b/src/main/java/org/springframework/samples/petclinic/service/business/OwnerService.java index bff69112b..96b00093a 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/business/OwnerService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/business/OwnerService.java @@ -2,14 +2,12 @@ package org.springframework.samples.petclinic.service.business; import org.modelmapper.ModelMapper; import org.modelmapper.internal.util.Lists; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; import org.springframework.samples.petclinic.model.business.Owner; import org.springframework.samples.petclinic.model.business.Pet; import org.springframework.samples.petclinic.repository.OwnerRepository; import org.springframework.samples.petclinic.repository.PetRepository; -import org.springframework.samples.petclinic.repository.PetTypeRepository; -import org.springframework.samples.petclinic.repository.VisitRepository; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -30,13 +28,9 @@ public class OwnerService implements BaseService { private final ModelMapper modelMapper = new ModelMapper(); - private PetService petService; - - public OwnerService(OwnerRepository ownerRepository, PetRepository petRepository, - PetTypeRepository petTypeRepository, VisitRepository visitRepository) { + public OwnerService(OwnerRepository ownerRepository, PetRepository petRepository) { this.ownerRepository = ownerRepository; this.petRepository = petRepository; - petService = new PetService(petRepository, petTypeRepository, visitRepository); } @Override diff --git a/src/main/java/org/springframework/samples/petclinic/service/business/PetService.java b/src/main/java/org/springframework/samples/petclinic/service/business/PetService.java index 82c43182b..b92d7c441 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/business/PetService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/business/PetService.java @@ -1,9 +1,9 @@ package org.springframework.samples.petclinic.service.business; import org.modelmapper.ModelMapper; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.model.business.Owner; import org.springframework.samples.petclinic.model.business.Pet; import org.springframework.samples.petclinic.model.business.PetType; @@ -27,8 +27,6 @@ public class PetService implements BaseService { private final PetTypeService petTypeService; - private final PetTypeRepository petTypeRepository; - private final VisitService visitService; private final ModelMapper modelMapper = new ModelMapper(); @@ -36,7 +34,6 @@ public class PetService implements BaseService { public PetService(PetRepository petRepository, PetTypeRepository petTypeRepository, VisitRepository visitRepository) { this.petRepository = petRepository; - this.petTypeRepository = petTypeRepository; this.visitService = new VisitService(visitRepository); this.petTypeService = new PetTypeService(petTypeRepository); } diff --git a/src/main/java/org/springframework/samples/petclinic/service/business/PetTypeService.java b/src/main/java/org/springframework/samples/petclinic/service/business/PetTypeService.java index 8afbb41db..09af1155c 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/business/PetTypeService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/business/PetTypeService.java @@ -1,7 +1,7 @@ package org.springframework.samples.petclinic.service.business; import org.modelmapper.ModelMapper; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.model.business.PetType; import org.springframework.samples.petclinic.repository.PetTypeRepository; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/springframework/samples/petclinic/service/business/SpecialtyService.java b/src/main/java/org/springframework/samples/petclinic/service/business/SpecialtyService.java index 79f9de533..3f398fe76 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/business/SpecialtyService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/business/SpecialtyService.java @@ -1,7 +1,7 @@ package org.springframework.samples.petclinic.service.business; import org.modelmapper.ModelMapper; -import org.springframework.samples.petclinic.dto.SpecialtyDTO; +import org.springframework.samples.petclinic.dto.business.SpecialtyDTO; import org.springframework.samples.petclinic.model.business.Specialty; import org.springframework.samples.petclinic.repository.SpecialtyRepository; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/springframework/samples/petclinic/service/business/VetService.java b/src/main/java/org/springframework/samples/petclinic/service/business/VetService.java index 601969e5e..602973aa6 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/business/VetService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/business/VetService.java @@ -2,8 +2,8 @@ package org.springframework.samples.petclinic.service.business; import org.modelmapper.ModelMapper; import org.modelmapper.internal.util.Lists; -import org.springframework.samples.petclinic.dto.SpecialtyDTO; -import org.springframework.samples.petclinic.dto.VetDTO; +import org.springframework.samples.petclinic.dto.business.SpecialtyDTO; +import org.springframework.samples.petclinic.dto.business.VetDTO; import org.springframework.samples.petclinic.model.business.Specialty; import org.springframework.samples.petclinic.repository.SpecialtyRepository; import org.springframework.samples.petclinic.repository.VetRepository; diff --git a/src/main/java/org/springframework/samples/petclinic/service/business/VisitService.java b/src/main/java/org/springframework/samples/petclinic/service/business/VisitService.java index 5612565d7..0f0e3d1ce 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/business/VisitService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/business/VisitService.java @@ -1,7 +1,7 @@ package org.springframework.samples.petclinic.service.business; import org.modelmapper.ModelMapper; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.samples.petclinic.model.business.Visit; import org.springframework.samples.petclinic.repository.VisitRepository; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/springframework/samples/petclinic/service/common/UserService.java b/src/main/java/org/springframework/samples/petclinic/service/common/UserService.java index 65c87e2d2..ac906a0cd 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/common/UserService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/common/UserService.java @@ -1,7 +1,6 @@ package org.springframework.samples.petclinic.service.common; import org.modelmapper.ModelMapper; -import org.springframework.samples.petclinic.dto.common.RoleDTO; import org.springframework.samples.petclinic.dto.common.UserDTO; import org.springframework.samples.petclinic.model.common.Role; import org.springframework.samples.petclinic.model.common.User; @@ -40,16 +39,7 @@ public class UserService implements BaseService { User user = modelMapper.map(dto, User.class); user.setPassword(dto.getPassword()); - - if (dto.getRoles() != null) { - Set roles = new HashSet<>(); - - for (String role : dto.getRoles()) { - roles.add(roleRepository.findByName(role)); - } - - user.setRoles(roles); - } + dto.getRoles().forEach(role -> user.addRole(modelMapper.map(role, Role.class))); return user; } @@ -64,16 +54,6 @@ public class UserService implements BaseService { userDto.setPassword(entity.getPassword()); userDto.setMatchingPassword(entity.getPassword()); - if (entity.getRoles() != null) { - List roles = new ArrayList<>(); - - for (Role role : entity.getRoles()) { - roles.add(role.getName()); - } - - userDto.setRoles(roles); - } - return userDto; } diff --git a/src/main/java/org/springframework/samples/petclinic/validator/PetDTOValidator.java b/src/main/java/org/springframework/samples/petclinic/validator/PetDTOValidator.java index ede0f9185..2000ed791 100644 --- a/src/main/java/org/springframework/samples/petclinic/validator/PetDTOValidator.java +++ b/src/main/java/org/springframework/samples/petclinic/validator/PetDTOValidator.java @@ -17,7 +17,7 @@ package org.springframework.samples.petclinic.validator; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonError; -import org.springframework.samples.petclinic.dto.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; import org.springframework.util.StringUtils; import org.springframework.validation.Errors; import org.springframework.validation.Validator; diff --git a/src/main/java/org/springframework/samples/petclinic/validator/VisitDTOValidator.java b/src/main/java/org/springframework/samples/petclinic/validator/VisitDTOValidator.java index b2ee0a069..d9542b6b4 100644 --- a/src/main/java/org/springframework/samples/petclinic/validator/VisitDTOValidator.java +++ b/src/main/java/org/springframework/samples/petclinic/validator/VisitDTOValidator.java @@ -2,7 +2,7 @@ package org.springframework.samples.petclinic.validator; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonError; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.validation.Errors; import org.springframework.validation.Validator; diff --git a/src/main/resources/db/h2/data.sql b/src/main/resources/db/h2/data.sql index ee493f18e..408505d02 100644 --- a/src/main/resources/db/h2/data.sql +++ b/src/main/resources/db/h2/data.sql @@ -57,6 +57,12 @@ INSERT INTO roles (id, name) VALUES (2,'ROLE_STAFF'), (3,'ROLE_USER'); +INSERT INTO privileges (id, name) VALUES + (1,'CREATE'), + (2,'READ'), + (3,'UPDATE'), + (4,'DELETE'); + INSERT INTO users (id, first_name, last_name, email, password, enabled, telephone, street1, zip_code, city, country) VALUES (1, 'George', 'Franklin', 'georges.franklin@petclinic.com', '$2a$10$8KypNYtPopFo8Sk5jbKJ4.lCKeBhdApsrkmFfhwjB8nCls8qpzjZG', true, '6085551023', '110 W. Liberty St.',12354,'Madison','USA'), (2, 'Betty', 'Davis', 'betty.davis@petclinic.com', '$2a$10$InKx/fhX3CmLi8zKpHYx/.ETHUlZwvT1xn.Za/pp2JR0iEtYV9a9O', true, '6085551749','638 Cardinal Ave.', 6546, 'Sun Prairie', 'USA'), @@ -67,6 +73,10 @@ INSERT INTO users_roles (user_id, role_id) VALUES (1,1),(1,2),(1,3), (2,3),(3,3); +INSERT INTO roles_privileges (role_id, privilege_id) values + (1,1),(1,2),(1,3),(1,4), + (2,1),(2,2),(2,3), + (3,1),(3,2); INSERT INTO auth_providers (id, name) VALUES (1,'local'), diff --git a/src/main/resources/db/h2/schema.sql b/src/main/resources/db/h2/schema.sql index 84a8cffac..691718fc6 100644 --- a/src/main/resources/db/h2/schema.sql +++ b/src/main/resources/db/h2/schema.sql @@ -71,6 +71,13 @@ CREATE TABLE roles ( ); CREATE INDEX roles_name ON roles (name); +DROP TABLE privileges IF EXISTS; +CREATE TABLE privileges ( + id INTEGER IDENTITY PRIMARY KEY, + name VARCHAR(20) NOT NULL +); +CREATE INDEX privileges_name ON privileges (name); + DROP TABLE users IF EXISTS; CREATE TABLE users ( @@ -102,6 +109,13 @@ ALTER TABLE users_roles ADD CONSTRAINT fk_users_roles_user_id FOREIGN KEY (user_ ALTER TABLE users_roles ADD CONSTRAINT fk_users_roles_role_id FOREIGN KEY (role_id) REFERENCES roles (id); CREATE INDEX users_roles_user_id ON users_roles (user_id); +DROP TABLE roles_privileges IF EXISTS; +CREATE TABLE roles_privileges ( + role_id INTEGER NOT NULL, + privilege_id INTEGER NOT NULL +); + + DROP TABLE auth_providers IF EXISTS; CREATE TABLE auth_providers ( id INTEGER IDENTITY PRIMARY KEY, diff --git a/src/main/resources/templates/pets/createOrUpdatePetForm.html b/src/main/resources/templates/pets/createOrUpdatePetForm.html index af87f3876..ca7df6ebb 100644 --- a/src/main/resources/templates/pets/createOrUpdatePetForm.html +++ b/src/main/resources/templates/pets/createOrUpdatePetForm.html @@ -9,6 +9,7 @@
+
@@ -35,4 +36,4 @@ - \ No newline at end of file + diff --git a/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerIntegrationTest.java b/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerIntegrationTest.java index 556e5af29..4db0104a3 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerIntegrationTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerIntegrationTest.java @@ -9,10 +9,10 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.samples.petclinic.service.business.OwnerService; import org.springframework.samples.petclinic.service.common.UserDetailsServiceImpl; import org.springframework.security.test.context.support.WithMockUser; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerTest.java b/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerTest.java index e32c39c75..afedaf6af 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerTest.java @@ -30,29 +30,20 @@ import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonError; import org.springframework.samples.petclinic.common.CommonView; import org.springframework.samples.petclinic.controller.common.WebSocketSender; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.samples.petclinic.service.business.OwnerService; import org.springframework.samples.petclinic.service.business.VisitService; import org.springframework.samples.petclinic.service.common.UserDetailsServiceImpl; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.crypto.factory.PasswordEncoderFactories; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/PetControllerIntegrationTest.java b/src/test/java/org/springframework/samples/petclinic/controller/PetControllerIntegrationTest.java index 57acfa6c8..06eb34506 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/PetControllerIntegrationTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/PetControllerIntegrationTest.java @@ -9,8 +9,8 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; import org.springframework.samples.petclinic.repository.PetRepository; import org.springframework.samples.petclinic.service.business.OwnerService; import org.springframework.samples.petclinic.service.business.PetService; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/PetControllerTest.java b/src/test/java/org/springframework/samples/petclinic/controller/PetControllerTest.java index 5134ba765..af0f10ce6 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/PetControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/PetControllerTest.java @@ -39,9 +39,9 @@ import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonError; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.formatter.PetTypeFormatter; import org.springframework.samples.petclinic.service.business.OwnerService; import org.springframework.samples.petclinic.service.business.PetService; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/VetControllerIntegrationTest.java b/src/test/java/org/springframework/samples/petclinic/controller/VetControllerIntegrationTest.java index afa4c7af8..0b8907985 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/VetControllerIntegrationTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/VetControllerIntegrationTest.java @@ -14,7 +14,7 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.VetsDTO; +import org.springframework.samples.petclinic.dto.business.VetsDTO; import org.springframework.samples.petclinic.repository.VetRepository; import org.springframework.samples.petclinic.service.business.VetService; import org.springframework.samples.petclinic.service.common.UserDetailsServiceImpl; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/VetControllerTest.java b/src/test/java/org/springframework/samples/petclinic/controller/VetControllerTest.java index 440cfec9b..118e3e02b 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/VetControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/VetControllerTest.java @@ -37,9 +37,9 @@ import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.SpecialtyDTO; -import org.springframework.samples.petclinic.dto.VetDTO; -import org.springframework.samples.petclinic.dto.VetsDTO; +import org.springframework.samples.petclinic.dto.business.SpecialtyDTO; +import org.springframework.samples.petclinic.dto.business.VetDTO; +import org.springframework.samples.petclinic.dto.business.VetsDTO; import org.springframework.samples.petclinic.service.business.VetService; import org.springframework.samples.petclinic.service.common.UserDetailsServiceImpl; import org.springframework.security.test.context.support.WithMockUser; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerIntegrationTest.java b/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerIntegrationTest.java index 1de0d1e50..702210fd9 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerIntegrationTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerIntegrationTest.java @@ -9,8 +9,8 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.samples.petclinic.model.business.Visit; import org.springframework.samples.petclinic.repository.VisitRepository; import org.springframework.samples.petclinic.service.business.PetService; diff --git a/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerTest.java b/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerTest.java index 5e5720681..f28899911 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerTest.java @@ -36,9 +36,9 @@ import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonEndPoint; import org.springframework.samples.petclinic.common.CommonView; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.samples.petclinic.model.business.Visit; import org.springframework.samples.petclinic.service.business.PetService; import org.springframework.samples.petclinic.service.business.VisitService; diff --git a/src/test/java/org/springframework/samples/petclinic/formater/PetTypeDTOFormatterTest.java b/src/test/java/org/springframework/samples/petclinic/formater/PetTypeDTOFormatterTest.java index 80b06a4bb..acc9d7ccc 100644 --- a/src/test/java/org/springframework/samples/petclinic/formater/PetTypeDTOFormatterTest.java +++ b/src/test/java/org/springframework/samples/petclinic/formater/PetTypeDTOFormatterTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.formatter.PetTypeFormatter; import org.springframework.samples.petclinic.model.business.PetType; import org.springframework.samples.petclinic.service.business.PetService; diff --git a/src/test/java/org/springframework/samples/petclinic/formater/PetTypeFormatterTest.java b/src/test/java/org/springframework/samples/petclinic/formater/PetTypeFormatterTest.java index f52be257a..90170e6b2 100644 --- a/src/test/java/org/springframework/samples/petclinic/formater/PetTypeFormatterTest.java +++ b/src/test/java/org/springframework/samples/petclinic/formater/PetTypeFormatterTest.java @@ -28,7 +28,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.formatter.PetTypeFormatter; import org.springframework.samples.petclinic.model.business.PetType; import org.springframework.samples.petclinic.service.business.PetService; diff --git a/src/test/java/org/springframework/samples/petclinic/service/OwnerServiceTest.java b/src/test/java/org/springframework/samples/petclinic/service/OwnerServiceTest.java index 1d74fa3b2..1c7f4dca4 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/OwnerServiceTest.java +++ b/src/test/java/org/springframework/samples/petclinic/service/OwnerServiceTest.java @@ -9,9 +9,9 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.samples.petclinic.common.CommonAttribute; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.model.business.Owner; import org.springframework.samples.petclinic.model.business.Pet; import org.springframework.samples.petclinic.model.business.PetType; @@ -82,7 +82,7 @@ class OwnerServiceTest { @BeforeEach void beforeEach() { petService = new PetService(petRepository, petTypeRepository, visitRepository); - ownerService = new OwnerService(ownerRepository, petRepository, petTypeRepository, visitRepository); + ownerService = new OwnerService(ownerRepository, petRepository); PetTypeService petTypeService = new PetTypeService(petTypeRepository); Collection petTypeDTOS = petService.findPetTypes(); PetTypeDTO petTypeDTO = petTypeDTOS.stream().findFirst().get(); diff --git a/src/test/java/org/springframework/samples/petclinic/service/PetServiceTest.java b/src/test/java/org/springframework/samples/petclinic/service/PetServiceTest.java index 8c7b0e15e..9152608cb 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/PetServiceTest.java +++ b/src/test/java/org/springframework/samples/petclinic/service/PetServiceTest.java @@ -5,9 +5,9 @@ import org.junit.jupiter.api.*; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.samples.petclinic.dto.OwnerDTO; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.OwnerDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.samples.petclinic.model.business.Owner; import org.springframework.samples.petclinic.model.business.Pet; import org.springframework.samples.petclinic.model.business.PetType; @@ -68,7 +68,7 @@ class PetServiceTest { @BeforeEach void beforeEach() { this.petService = new PetService(petRepository, petTypeRepository, visitRepository); - this.ownerService = new OwnerService(ownerRepository, petRepository, petTypeRepository, visitRepository); + this.ownerService = new OwnerService(ownerRepository, petRepository); PetTypeService petTypeService = new PetTypeService(petTypeRepository); Collection petTypeDTOS = petService.findPetTypes(); diff --git a/src/test/java/org/springframework/samples/petclinic/service/VetServiceTest.java b/src/test/java/org/springframework/samples/petclinic/service/VetServiceTest.java index 1ee27a260..621461729 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/VetServiceTest.java +++ b/src/test/java/org/springframework/samples/petclinic/service/VetServiceTest.java @@ -8,13 +8,11 @@ import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.samples.petclinic.dto.VetDTO; +import org.springframework.samples.petclinic.dto.business.VetDTO; import org.springframework.samples.petclinic.model.business.Vet; import org.springframework.samples.petclinic.repository.SpecialtyRepository; import org.springframework.samples.petclinic.repository.VetRepository; import org.springframework.samples.petclinic.service.business.VetService; -import org.springframework.stereotype.Service; import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; diff --git a/src/test/java/org/springframework/samples/petclinic/validator/PetDTOValidatorTest.java b/src/test/java/org/springframework/samples/petclinic/validator/PetDTOValidatorTest.java index a3e131633..450034d7e 100644 --- a/src/test/java/org/springframework/samples/petclinic/validator/PetDTOValidatorTest.java +++ b/src/test/java/org/springframework/samples/petclinic/validator/PetDTOValidatorTest.java @@ -6,8 +6,8 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonError; -import org.springframework.samples.petclinic.dto.PetDTO; -import org.springframework.samples.petclinic.dto.PetTypeDTO; +import org.springframework.samples.petclinic.dto.business.PetDTO; +import org.springframework.samples.petclinic.dto.business.PetTypeDTO; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.Errors; import org.springframework.validation.FieldError; diff --git a/src/test/java/org/springframework/samples/petclinic/validator/VisitDTOValidatorTest.java b/src/test/java/org/springframework/samples/petclinic/validator/VisitDTOValidatorTest.java index c60b4ef08..a7c637c78 100644 --- a/src/test/java/org/springframework/samples/petclinic/validator/VisitDTOValidatorTest.java +++ b/src/test/java/org/springframework/samples/petclinic/validator/VisitDTOValidatorTest.java @@ -6,7 +6,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.samples.petclinic.common.CommonAttribute; import org.springframework.samples.petclinic.common.CommonError; -import org.springframework.samples.petclinic.dto.VisitDTO; +import org.springframework.samples.petclinic.dto.business.VisitDTO; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.Errors; import org.springframework.validation.FieldError;