From e88fbdb0d0c3f9e5dcc6fefe576a9cc9a0b5ae9a Mon Sep 17 00:00:00 2001 From: PEDSF Date: Sat, 7 Nov 2020 11:34:03 +0100 Subject: [PATCH] end websocket feature to send public messages --- .../petclinic/common/CommonWebSocket.java | 70 +++++++++++++++++++ .../WebSocketSchedulerConfiguration.java | 23 ------ .../petclinic/controller/OwnerController.java | 16 ++--- .../petclinic/controller/PetController.java | 14 ++-- .../petclinic/controller/VetController.java | 10 ++- .../petclinic/controller/VisitController.java | 6 +- .../common/WebSocketController.java | 25 ------- .../common/WebSocketEventListener.java | 35 ---------- .../controller/common/WebSocketSender.java | 57 ++++++++++----- .../model/common/WebSocketMessage.java | 32 +++++++++ .../model/common/WebSocketMessageType.java | 7 -- src/main/resources/static/js/notification.js | 24 +++++++ src/main/resources/static/js/websocket.js | 62 ---------------- .../resources/templates/fragments/layout.html | 24 ++----- .../OwnerControllerIntegrationTest.java | 1 - .../controller/OwnerControllerTest.java | 7 +- .../controller/PetControllerTest.java | 4 ++ .../controller/VetControllerTest.java | 4 ++ .../controller/VisitControllerTest.java | 4 ++ 19 files changed, 219 insertions(+), 206 deletions(-) create mode 100644 src/main/java/org/springframework/samples/petclinic/common/CommonWebSocket.java delete mode 100644 src/main/java/org/springframework/samples/petclinic/configuration/WebSocketSchedulerConfiguration.java delete mode 100644 src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketController.java delete mode 100644 src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketEventListener.java delete mode 100644 src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessageType.java create mode 100644 src/main/resources/static/js/notification.js delete mode 100644 src/main/resources/static/js/websocket.js diff --git a/src/main/java/org/springframework/samples/petclinic/common/CommonWebSocket.java b/src/main/java/org/springframework/samples/petclinic/common/CommonWebSocket.java new file mode 100644 index 000000000..d6c3e6467 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/common/CommonWebSocket.java @@ -0,0 +1,70 @@ +package org.springframework.samples.petclinic.common; + +/** + * Class for WebSocket messages + * + * @author Paul-Emmanuel DOS SANTOS FACAO + */ +public class CommonWebSocket { + + public static final String OWNER_FIND_ERROR = "No Owner found !"; + + public static final String OWNER_CREATED = "Owner created"; + + public static final String OWNER_CREATION_ERROR = "Error creating Owner !"; + + public static final String OWNER_UPDATED = "Owner updated"; + + public static final String OWNER_UPDATED_ERROR = "Error updating Owner !"; + + public static final String OWNER_DELETED = "Owner deleted"; + + public static final String OWNER_DELETED_ERROR = "Error deleting Owner !"; + + public static final String PET_FIND_ERROR = "No Pet found !"; + + public static final String PET_CREATED = "Pet created"; + + public static final String PET_CREATION_ERROR = "Error creating Pet !"; + + public static final String PET_UPDATED = "Pet updated"; + + public static final String PET_UPDATED_ERROR = "Error updating Pet !"; + + public static final String PET_DELETED = "Pet deleted"; + + public static final String PET_DELETED_ERROR = "Error deleting Pet !"; + + public static final String VET_FIND_ERROR = "No Vet found !"; + + public static final String VET_CREATED = "Vet created"; + + public static final String VET_CREATION_ERROR = "Error creating Vet !"; + + public static final String VET_UPDATED = "Vet updated"; + + public static final String VET_UPDATED_ERROR = "Error updating Vet !"; + + public static final String VET_DELETED = "Vet deleted"; + + public static final String VET_DELETED_ERROR = "Error deleting Vet !"; + + public static final String VISIT_FIND_ERROR = "No Visit found !"; + + public static final String VISIT_CREATED = "Visit created"; + + public static final String VISIT_CREATION_ERROR = "Error creating Visit !"; + + public static final String VISIT_UPDATED = "Visit updated"; + + public static final String VISIT_UPDATED_ERROR = "Error updating Visit !"; + + public static final String VISIT_DELETED = "Visit deleted"; + + public static final String VISIT_DELETED_ERROR = "Eror deleting Visit !"; + + private CommonWebSocket() { + throw new IllegalStateException("Utility class"); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketSchedulerConfiguration.java b/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketSchedulerConfiguration.java deleted file mode 100644 index 5ee8213ad..000000000 --- a/src/main/java/org/springframework/samples/petclinic/configuration/WebSocketSchedulerConfiguration.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.springframework.samples.petclinic.configuration; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.samples.petclinic.model.common.WebSocketMessage; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; - -@Configuration -@EnableScheduling -public class WebSocketSchedulerConfiguration { - - @Autowired - SimpMessagingTemplate simpMessagingTemplate; - - //@Scheduled(fixedDelay = 3000) - public void sendMessages() { - - simpMessagingTemplate.convertAndSend("/topic/public", new WebSocketMessage("Fixed Delay Scheduler")); - } - -} 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 307c56fd7..a47289e54 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/OwnerController.java @@ -15,10 +15,7 @@ */ package org.springframework.samples.petclinic.controller; -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.common.*; import org.springframework.samples.petclinic.controller.common.WebSocketSender; import org.springframework.samples.petclinic.dto.*; import org.springframework.samples.petclinic.service.OwnerService; @@ -69,12 +66,12 @@ class OwnerController extends WebSocketSender { public String processCreationForm(@ModelAttribute(CommonAttribute.OWNER) @Valid OwnerDTO owner, BindingResult result) { if (result.hasErrors()) { - sendMessages(CommonView.OWNER_CREATE_OR_UPDATE); + sendErrorMessage(CommonWebSocket.OWNER_CREATION_ERROR); return CommonView.OWNER_CREATE_OR_UPDATE; } else { owner = this.ownerService.save(owner); - sendMessages(OWNER_CREATED); + sendSuccessMessage(CommonWebSocket.OWNER_CREATED); return CommonView.OWNER_OWNERS_R + owner.getId(); } } @@ -101,6 +98,7 @@ class OwnerController extends WebSocketSender { // no owners found result.rejectValue(CommonAttribute.OWNER_LAST_NAME, CommonError.NOT_FOUND_ARGS, CommonError.NOT_FOUND_MESSAGE); + sendInfoMessage(CommonWebSocket.OWNER_FIND_ERROR); return CommonView.OWNER_FIND_OWNERS; } else if (results.size() == 1) { @@ -112,7 +110,7 @@ class OwnerController extends WebSocketSender { // multiple owners found model.put(CommonAttribute.SELECTIONS, results); - return CommonView.OWNER_OWNERS_LIST; + return CommonView.OWNER_OWNERS_LIST; } } @@ -127,12 +125,14 @@ class OwnerController extends WebSocketSender { public String processUpdateOwnerForm(@ModelAttribute(CommonAttribute.OWNER) @Valid OwnerDTO owner, BindingResult result, @PathVariable("ownerId") int ownerId) { if (result.hasErrors()) { + sendErrorMessage(CommonWebSocket.OWNER_UPDATED_ERROR); return CommonView.OWNER_CREATE_OR_UPDATE; } else { owner.setId(ownerId); this.ownerService.save(owner); - sendMessages(OWNER_UPDATED); + + sendSuccessMessage(CommonWebSocket.OWNER_UPDATED); return CommonView.OWNER_OWNERS_ID_R; } } 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 873508f7b..1dec5d598 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/PetController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/PetController.java @@ -16,12 +16,10 @@ package org.springframework.samples.petclinic.controller; import org.springframework.beans.factory.annotation.Autowired; -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.common.*; import org.springframework.samples.petclinic.controller.common.WebSocketSender; import org.springframework.samples.petclinic.dto.*; +import org.springframework.samples.petclinic.model.common.WebSocketMessage; import org.springframework.samples.petclinic.validator.PetDTOValidator; import org.springframework.samples.petclinic.service.*; import org.springframework.stereotype.Controller; @@ -86,22 +84,25 @@ class PetController extends WebSocketSender { public String processCreationForm(@ModelAttribute(CommonAttribute.OWNER) OwnerDTO owner, @ModelAttribute(CommonAttribute.PET) @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); } else { if (StringUtils.hasLength(pet.getName()) && pet.isNew() && owner.getPet(pet.getName(), true) != null) { + sendErrorMessage(CommonWebSocket.PET_CREATION_ERROR); result.rejectValue(CommonAttribute.NAME, CommonError.DUPLICATE_ARGS, CommonError.DUPLICATE_MESSAGE); } owner.addPet(pet); } if (result.hasErrors()) { + sendErrorMessage(CommonWebSocket.PET_CREATION_ERROR); model.put(CommonAttribute.PET, pet); return CommonView.PET_CREATE_OR_UPDATE; } else { this.petService.save(pet); - sendMessages(PET_CREATED); + sendSuccessMessage(CommonWebSocket.PET_CREATED); return CommonView.OWNER_OWNERS_ID_R; } } @@ -119,12 +120,13 @@ class PetController extends WebSocketSender { if (result.hasErrors()) { pet.setOwner(owner); model.put(CommonAttribute.PET, pet); + sendErrorMessage(CommonWebSocket.PET_UPDATED_ERROR); return CommonView.PET_CREATE_OR_UPDATE; } else { owner.addPet(pet); this.petService.save(pet); - sendMessages(PET_UPDATED); + sendSuccessMessage(CommonWebSocket.PET_UPDATED); return CommonView.OWNER_OWNERS_ID_R; } } 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 fe70ecc9e..b10b42caa 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/VetController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/VetController.java @@ -18,6 +18,7 @@ package org.springframework.samples.petclinic.controller; 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.common.CommonWebSocket; import org.springframework.samples.petclinic.controller.common.WebSocketSender; import org.springframework.samples.petclinic.dto.VetsDTO; import org.springframework.samples.petclinic.service.VetService; @@ -35,7 +36,7 @@ import java.util.Map; * @author Paul-Emmanuel DOS SANTOS FACAO */ @Controller -class VetController { +class VetController extends WebSocketSender { private final VetService vetService; @@ -49,6 +50,10 @@ class VetController { // objects so it is simpler for Object-Xml mapping VetsDTO vets = new VetsDTO(); vets.getVetList().addAll(this.vetService.findAll()); + + if (vets.getVetList().isEmpty()) { + sendInfoMessage(CommonWebSocket.VET_FIND_ERROR); + } model.put(CommonAttribute.VETS, vets); return CommonView.VET_VETS_LIST; } @@ -59,6 +64,9 @@ class VetController { // objects so it is simpler for JSon/Object mapping VetsDTO vets = new VetsDTO(); vets.getVetList().addAll(this.vetService.findAll()); + if (vets.getVetList().isEmpty()) { + sendInfoMessage(CommonWebSocket.VET_FIND_ERROR); + } return vets; } 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 53b88605b..6914a035f 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/VisitController.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/VisitController.java @@ -22,12 +22,13 @@ import javax.validation.Valid; 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.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.model.common.WebSocketMessage; import org.springframework.samples.petclinic.service.PetService; import org.springframework.samples.petclinic.service.VisitService; -import org.springframework.samples.petclinic.validator.PetDTOValidator; import org.springframework.samples.petclinic.validator.VisitDTOValidator; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; @@ -96,11 +97,12 @@ class VisitController extends WebSocketSender { public String processNewVisitForm(@ModelAttribute(CommonAttribute.VISIT) @Valid VisitDTO visit, BindingResult result) { if (result.hasErrors()) { + sendErrorMessage(CommonWebSocket.VISIT_CREATION_ERROR); return CommonView.VISIT_CREATE_OR_UPDATE; } else { this.visitService.save(visit); - sendMessages(VISIT_CREATED); + sendSuccessMessage(CommonWebSocket.VISIT_CREATED); return CommonView.OWNER_OWNERS_ID_R; } } diff --git a/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketController.java b/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketController.java deleted file mode 100644 index 00bcc059d..000000000 --- a/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketController.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.springframework.samples.petclinic.controller.common; - -import org.springframework.messaging.handler.annotation.MessageMapping; -import org.springframework.messaging.handler.annotation.Payload; -import org.springframework.messaging.handler.annotation.SendTo; -import org.springframework.messaging.simp.SimpMessageHeaderAccessor; -import org.springframework.samples.petclinic.model.common.WebSocketMessage; -import org.springframework.stereotype.Controller; - -public class WebSocketController { - - @MessageMapping("/user") - @SendTo("/topic/user") - public WebSocketMessage sendMessage(@Payload final WebSocketMessage message) { - return message; - } - - @MessageMapping("/websocket.newUser") - @SendTo("/topic/public") - public WebSocketMessage newUser(@Payload final WebSocketMessage message, SimpMessageHeaderAccessor headerAccessor) { - headerAccessor.getSessionAttributes().put("username", message.getSender()); - return message; - } - -} diff --git a/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketEventListener.java b/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketEventListener.java deleted file mode 100644 index e13ae5e70..000000000 --- a/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketEventListener.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.springframework.samples.petclinic.controller.common; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.event.EventListener; -import org.springframework.messaging.simp.SimpMessageSendingOperations; -import org.springframework.messaging.simp.stomp.StompHeaderAccessor; -import org.springframework.samples.petclinic.model.common.WebSocketMessage; -import org.springframework.stereotype.Component; -import org.springframework.web.socket.messaging.SessionConnectedEvent; - -@Slf4j -@Component -public class WebSocketEventListener { - - @Autowired - private SimpMessageSendingOperations sendingOperations; - - @EventListener - public void handlewebSocketConnectListener(final SessionConnectedEvent event) { - log.info("Ding dong. We have a new connection!"); - } - - @EventListener - public void handlewebSocketDisconnectListener(final SessionConnectedEvent event) { - - final StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(event.getMessage()); - - // final String username = (String) - // headerAccessor.getSessionAttributes().get("username"); - - sendingOperations.convertAndSend("/topic/user", new WebSocketMessage("Hello in event lmistener")); - } - -} diff --git a/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketSender.java b/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketSender.java index fafcda13f..57673ecf3 100644 --- a/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketSender.java +++ b/src/main/java/org/springframework/samples/petclinic/controller/common/WebSocketSender.java @@ -4,28 +4,51 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.samples.petclinic.model.common.WebSocketMessage; +/** + * Class to extend for calling websocket sending messages + * + * @author Paul-Emmanuel DOS SANTOS FACAO + */ public class WebSocketSender { - public static final String OWNER_CREATED = "Owner created"; - public static final String OWNER_UPDATED = "Owner updated"; - public static final String OWNER_DELETED = "Owner deleted"; - - public static final String PET_CREATED = "Pet created"; - public static final String PET_UPDATED = "Pet updated"; - public static final String PET_DELETED = "Pet deleted"; - - public static final String VET_CREATED = "Vet created"; - public static final String VET_UPDATED = "Vet updated"; - public static final String VET_DELETED = "Vet deleted"; - - public static final String VISIT_CREATED = "Visit created"; - public static final String VISIT_UPDATED = "Visit updated"; - public static final String VISIT_DELETED = "Visit deleted"; + private static final int WAITING_TIME = 200; // delay of frontend page changing @Autowired SimpMessagingTemplate simpMessagingTemplate; - public void sendMessages(String message) { - simpMessagingTemplate.convertAndSend("/topic/public", new WebSocketMessage(message)); + public void sendMessage(String message, String type) { + // Send message asynchronously + new Thread(new Runnable() { + public void run() { + try { + Thread.sleep(WAITING_TIME); + } + catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + simpMessagingTemplate.convertAndSend("/topic/public", new WebSocketMessage(message, type)); + } + }).start(); } + + public void sendAlertMessage(String message) { + sendMessage(message, WebSocketMessage.ALERT); + } + + public void sendErrorMessage(String message) { + sendMessage(message, WebSocketMessage.ERROR); + } + + public void sendInfoMessage(String message) { + sendMessage(message, WebSocketMessage.INFO); + } + + public void sendSuccessMessage(String message) { + sendMessage(message, WebSocketMessage.SUCCESS); + } + + public void sendWarningMessage(String message) { + sendMessage(message, WebSocketMessage.WARNING); + } + } diff --git a/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessage.java b/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessage.java index 357c3f7d0..4449f0aab 100644 --- a/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessage.java +++ b/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessage.java @@ -2,17 +2,41 @@ package org.springframework.samples.petclinic.model.common; import java.time.LocalDate; +/** + * WebSocket message type. + * + * @author Paul-Emmanuel DOS SANTOS FACAO + */ public class WebSocketMessage { + public static final String ALERT = "alert"; + + public static final String SUCCESS = "success"; + + public static final String ERROR = "error"; + + public static final String WARNING = "warning"; + + public static final String INFO = "info"; + private String sender; private String time; private String content; + private String type; + public WebSocketMessage(String content) { this.time = LocalDate.now().toString(); this.content = content; + this.type = INFO; + } + + public WebSocketMessage(String content, String type) { + this.time = LocalDate.now().toString(); + this.content = content; + this.type = type; } public String getSender() { @@ -39,4 +63,12 @@ public class WebSocketMessage { this.content = content; } + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + } diff --git a/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessageType.java b/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessageType.java deleted file mode 100644 index 423c82152..000000000 --- a/src/main/java/org/springframework/samples/petclinic/model/common/WebSocketMessageType.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.springframework.samples.petclinic.model.common; - -public enum WebSocketMessageType { - - MESSAGE, CONNECT, DISCONNECT - -} diff --git a/src/main/resources/static/js/notification.js b/src/main/resources/static/js/notification.js new file mode 100644 index 000000000..681ee9fa1 --- /dev/null +++ b/src/main/resources/static/js/notification.js @@ -0,0 +1,24 @@ + +function displayMessage() { + var socket = new SockJS('/websocket'); + var stompClient = Stomp.over(socket); + + stompClient.connect({}, function (frame) { + stompClient.subscribe('/topic/public', function (socketMessage) { + + noty({ + text: JSON.parse(socketMessage.body).content, + type: JSON.parse(socketMessage.body).type, + layout: "topRight", + timeout: 4000, + animation: { + open: 'animated bounceInRight', + close: 'animated bounceOutRight', + easing: 'swing', + speed: 500 + } + }); + }); + }); +} + diff --git a/src/main/resources/static/js/websocket.js b/src/main/resources/static/js/websocket.js deleted file mode 100644 index 0afb5e6f1..000000000 --- a/src/main/resources/static/js/websocket.js +++ /dev/null @@ -1,62 +0,0 @@ -var stompClient = null; - -function setConnected(connected) { - $("#connect").prop("disabled", connected); - $("#disconnect").prop("disabled", !connected); - if (connected) { - $("#conversation").show(); - } - else { - $("#conversation").hide(); - } - $("#userinfo").html(""); -} - -function displayMessage() { - var socket = new SockJS('/websocket'); - stompClient = Stomp.over(socket); - stompClient.connect({}, function (frame) { - setConnected(true); - stompClient.subscribe('/topic/public', function (greeting) { - showGreeting(JSON.parse(greeting.body).content); - }); - }); -} - - -function connect() { - var socket = new SockJS('/websocket'); - stompClient = Stomp.over(socket); - stompClient.connect({}, function (frame) { - setConnected(true); - console.log('Connected: ' + frame); - stompClient.subscribe('/topic/public', function (greeting) { - $("#userinfo").text(JSON.parse(greeting.body).content); - }); - }); -} - -function disconnect() { - if (stompClient !== null) { - stompClient.disconnect(); - } - setConnected(false); - console.log("Disconnected"); -} - -function sendName() { - stompClient.send("/app/user", {}, JSON.stringify({'name': $("#name").val()})); -} - -function showGreeting(message) { - $("#userinfo").text(message); -} - -$(function () { - $("form").on('submit', function (e) { - e.preventDefault(); - }); - $( "#connect" ).click(function() { connect(); }); - $( "#disconnect" ).click(function() { disconnect(); }); - $( "#send" ).click(function() { sendName(); }); -}); diff --git a/src/main/resources/templates/fragments/layout.html b/src/main/resources/templates/fragments/layout.html index 621ec8976..df5a761c9 100755 --- a/src/main/resources/templates/fragments/layout.html +++ b/src/main/resources/templates/fragments/layout.html @@ -15,7 +15,7 @@ + @@ -98,9 +98,6 @@
-
- -
Sponsored by Pivotal @@ -117,21 +114,12 @@ + + + + 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 0d31f6c67..55ff114ca 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerIntegrationTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerIntegrationTest.java @@ -16,7 +16,6 @@ import org.springframework.samples.petclinic.service.OwnerService; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.ui.Model; import java.time.LocalDate; import java.util.Collection; 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 e003094c4..62d7c9540 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/OwnerControllerTest.java @@ -30,10 +30,12 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +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; @@ -61,7 +63,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. * @author Paul-Emmanuel DOS SANTOS FACAO */ @WebMvcTest(OwnerController.class) -class OwnerControllerTest { +class OwnerControllerTest extends WebSocketSender { private static final int OWNER_ID = 15; @@ -88,6 +90,9 @@ class OwnerControllerTest { @Autowired private MockMvc mockMvc; + @MockBean + SimpMessagingTemplate simpMessagingTemplate; + @MockBean private OwnerService owners; 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 c27ccfcdd..af989653b 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/PetControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/PetControllerTest.java @@ -33,6 +33,7 @@ import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.FilterType; +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; @@ -63,6 +64,9 @@ class PetControllerTest { @Autowired private MockMvc mockMvc; + @MockBean + SimpMessagingTemplate simpMessagingTemplate; + @MockBean private PetService petService; 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 f72e54c67..79c1d6548 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/VetControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/VetControllerTest.java @@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; +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; @@ -59,6 +60,9 @@ class VetControllerTest { @Autowired private MockMvc mockMvc; + @MockBean + SimpMessagingTemplate simpMessagingTemplate; + @MockBean private VetService vetService; 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 9135164d4..5679e4624 100644 --- a/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/controller/VisitControllerTest.java @@ -32,6 +32,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; +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; @@ -74,6 +75,9 @@ class VisitControllerTest { @Autowired private MockMvc mockMvc; + @MockBean + SimpMessagingTemplate simpMessagingTemplate; + @MockBean private VisitService visitService;