115 lines
4.2 KiB
Java
115 lines
4.2 KiB
Java
package com.release11.klaus.controller;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.release11.klaus.model.MockedMessageDto;
|
|
import com.release11.klaus.service.KlausService;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.SneakyThrows;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.*;
|
|
|
|
@Slf4j
|
|
@Controller
|
|
@RequestMapping
|
|
@AllArgsConstructor
|
|
public class MockController {
|
|
private final KlausService klausService;
|
|
private final MockedMessageDto defaultMessage = MockedMessageDto.builder().build();
|
|
|
|
/**
|
|
* Responds to first user request. If UUID is given then it's set if it's not, then new one is generated.
|
|
* Next recalls method that populates model based on UUID
|
|
* @return
|
|
*/
|
|
@SneakyThrows
|
|
@GetMapping({"/","/mock"})
|
|
public String showHome(){
|
|
return "mock";
|
|
}
|
|
|
|
@SneakyThrows
|
|
@PutMapping("/mock/json")
|
|
public ResponseEntity<String> updateMessage(@RequestBody String body){
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
MockedMessageDto message = mapper.readValue(body, MockedMessageDto.class);
|
|
return klausService.setMockedResponse(message);
|
|
}
|
|
|
|
@ResponseBody
|
|
@GetMapping({"/mock/json", "/mock/json/{uuidValue}"})
|
|
public List<MockedMessageDto> getJson(@PathVariable(required = false) String uuidValue){
|
|
UUID clientUUID;
|
|
if(uuidValue == null || uuidValue.equals("")) clientUUID = UUID.randomUUID();
|
|
else clientUUID = UUID.fromString(uuidValue);
|
|
List<MockedMessageDto> messages = klausService.getAllMockedResponses(clientUUID);
|
|
if(messages.size() == 0) {
|
|
klausService.setMockedResponse(buildDefaultMessage(clientUUID));
|
|
messages = klausService.getAllMockedResponses(clientUUID);
|
|
}
|
|
Collections.sort(messages);
|
|
return messages;
|
|
}
|
|
|
|
@ResponseBody
|
|
@PostMapping("/mock/json/{uuidValue}")
|
|
public ResponseEntity<String> addNewMessage(@PathVariable String uuidValue){
|
|
UUID clientUUID = UUID.fromString(uuidValue);
|
|
List<MockedMessageDto> messages = klausService.getAllMockedResponses(clientUUID);
|
|
MockedMessageDto nextMessage = buildDefaultMessage(clientUUID, findNextId(messages));
|
|
return klausService.setMockedResponse(nextMessage);
|
|
}
|
|
|
|
@ResponseBody
|
|
@DeleteMapping("/mock/json/{uuidValue}/{idValue}")
|
|
public ResponseEntity<String> removeMessage(@PathVariable String uuidValue,
|
|
@PathVariable String idValue){
|
|
UUID clientUUID = UUID.fromString(uuidValue);
|
|
int id = Integer.parseInt(idValue);
|
|
return klausService.deleteMockedResponse(clientUUID, id);
|
|
}
|
|
|
|
|
|
|
|
private static MockedMessageDto buildDefaultMessage(UUID uuid, int id){
|
|
MockedMessageDto message = buildDefaultMessage(uuid);
|
|
message.setMockedResponseId(id);
|
|
return message;
|
|
}
|
|
|
|
private static MockedMessageDto buildDefaultMessage(UUID uuid){
|
|
Map<String, String> headers = new HashMap<>();
|
|
headers.put("Keep-Alive", "timeout=60");
|
|
headers.put("Connection", "keep-alive");
|
|
headers.put("Date", LocalDateTime.now().toString());
|
|
return MockedMessageDto.builder()
|
|
.clientUUID(uuid)
|
|
.mockedResponseId(1)
|
|
.mediaType(MediaType.APPLICATION_XML_VALUE)
|
|
.messageBody("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
|
"<note>\n" +
|
|
" <to>Tove</to>\n" +
|
|
" <from>Jani</from>\n" +
|
|
" <heading>Reminder</heading>\n" +
|
|
" <body>Don't forget me this weekend!</body>\n" +
|
|
"</note>")
|
|
.httpHeaders(headers)
|
|
.httpStatus(200)
|
|
.build();
|
|
}
|
|
|
|
public static int findNextId(List<MockedMessageDto> messages) {
|
|
int highestId = 0;
|
|
for (MockedMessageDto m : messages)
|
|
highestId = highestId > m.getMockedResponseId() ? highestId : m.getMockedResponseId();
|
|
return ++highestId;
|
|
}
|
|
|
|
|
|
}
|