From ba63e9aac75a3e8e59ba00dc2a03bdf0a9433cd2 Mon Sep 17 00:00:00 2001
From: Hendrik Jungnitsch <hendrik.jungnitsch@gedoplan.de>
Date: Mi, 07 Sep 2022 15:32:05 +0200
Subject: [PATCH] exercise07
---
src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java | 11 ++
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java | 1
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java | 61 +++++++++++++++
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java | 1
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java | 5 +
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java | 6 +
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java | 51 ++++++++++++
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java | 45 +++++++++++
8 files changed, 176 insertions(+), 5 deletions(-)
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java
index dcc0964..ca4db07 100644
--- a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java
@@ -10,7 +10,6 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
@Entity
@Table(name = Highway.TABLE_NAME)
public class Highway {
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java
index 3cb3293..5a6dbf3 100644
--- a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java
@@ -13,7 +13,6 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
@Entity
@Table(name = Junction.TABLE_NAME)
public class Junction {
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java
new file mode 100644
index 0000000..9425cd3
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java
@@ -0,0 +1,61 @@
+package de.gedoplan.seminar.jpa.exercise.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import de.gedoplan.seminar.jpa.exercise.common.GeneratedIntegerIdEntity;
+
+@Entity
+@Table(name = TrafficJam.TABLE_NAME)
+public class TrafficJam extends GeneratedIntegerIdEntity {
+ public static final String TABLE_NAME = "JPA_TRAFFIC_JAM";
+
+ @ManyToOne
+ private Junction start;
+
+ @ManyToOne
+ private Junction end;
+
+ private int length;
+
+ @Enumerated(EnumType.STRING)
+ private TrafficJamKind kind;
+
+ @Enumerated(EnumType.STRING)
+ private TrafficJamCause cause;
+
+ protected TrafficJam() {
+ }
+
+ public TrafficJam(Junction start, Junction end, int length, TrafficJamKind kind, TrafficJamCause cause) {
+ this.start = start;
+ this.end = end;
+ this.length = length;
+ this.cause = cause;
+ this.kind = kind;
+ }
+
+ public Junction getStart() {
+ return this.start;
+ }
+
+ public Junction getEnd() {
+ return this.end;
+ }
+
+ public int getLength() {
+ return this.length;
+ }
+
+ public TrafficJamKind getKind() {
+ return this.kind;
+ }
+
+ public TrafficJamCause getCause() {
+ return this.cause;
+ }
+
+}
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java
new file mode 100644
index 0000000..5aad373
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java
@@ -0,0 +1,6 @@
+package de.gedoplan.seminar.jpa.exercise.domain;
+
+public enum TrafficJamCause {
+ ROAD_WORKS, ACCIDENT, TRAFFIC_VOLUME
+}
+
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java
new file mode 100644
index 0000000..4103beb
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java
@@ -0,0 +1,5 @@
+package de.gedoplan.seminar.jpa.exercise.domain;
+
+public enum TrafficJamKind {
+ CONGESTION, SLOW_MOVING_TRAFFIC
+}
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java
new file mode 100644
index 0000000..5b38a6c
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java
@@ -0,0 +1,11 @@
+package de.gedoplan.seminar.jpa.exercise.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import de.gedoplan.seminar.jpa.exercise.domain.TrafficJam;
+
+@Repository
+public interface TrafficJamRepository extends JpaRepository<TrafficJam, Integer> {
+
+}
diff --git a/src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java b/src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java
new file mode 100644
index 0000000..5868324
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java
@@ -0,0 +1,45 @@
+package de.gedoplan.seminar.jpa.exercise.rest;
+
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import de.gedoplan.seminar.jpa.exercise.domain.TrafficJam;
+import de.gedoplan.seminar.jpa.exercise.repository.TrafficJamRepository;
+
+@RequestMapping(path = "/trafficjams", produces = MediaType.APPLICATION_JSON_VALUE)
+@RestController
+public class TrafficJamResource {
+
+ @Autowired
+ Logger logger;
+
+ @Autowired
+ TrafficJamRepository trafficJamRepository;
+
+ @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
+ public void insert(@RequestBody TrafficJam trafficJam) {
+ this.logger.debug("----- insert -----");
+
+ this.trafficJamRepository.save(trafficJam);
+
+ this.logger.debug("Inserted: " + trafficJam);
+ }
+
+ @GetMapping
+ public List<TrafficJam> findAll() {
+ this.logger.debug("----- findAll -----");
+
+ List<TrafficJam> trafficJams = trafficJamRepository.findAll();
+ this.logger.debug("Gefunden: " + trafficJams);
+ return trafficJams;
+ }
+
+}
diff --git a/src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java b/src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java
index fce1c4d..fe124f9 100644
--- a/src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java
+++ b/src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java
@@ -1,23 +1,35 @@
package de.gedoplan.seminar.jpa.exercise;
+import static org.junit.jupiter.params.provider.Arguments.arguments;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.List;
+import java.util.stream.Stream;
import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
+import de.gedoplan.seminar.jpa.exercise.domain.Highway;
import de.gedoplan.seminar.jpa.exercise.domain.Junction;
+import de.gedoplan.seminar.jpa.exercise.domain.TrafficJam;
+import de.gedoplan.seminar.jpa.exercise.domain.TrafficJamCause;
+import de.gedoplan.seminar.jpa.exercise.domain.TrafficJamKind;
@TestMethodOrder(MethodOrderer.MethodName.class)
@AutoConfigureMockMvc
@@ -35,10 +47,43 @@
@Autowired
private Logger logger;
+ @ParameterizedTest
+ @MethodSource("getTestData")
+ void test01_insert(String junctionStart, String junctionEnd, Integer length, TrafficJamKind kind,
+ TrafficJamCause cause) throws Exception {
+
+ TrafficJam trafficJam = new TrafficJam(loadJunctionId(junctionStart), loadJunctionId(junctionEnd), length, kind,
+ cause);
+ mockMvc.perform(post("/trafficjams").contentType(MediaType.APPLICATION_JSON)
+ .content(mapper.writeValueAsString(trafficJam))).andExpect(status().isOk());
+ }
+
+ @Test
+ void test02_outputTrafficJams() throws Exception {
+ parse(mockMvc.perform(get("/trafficjams")).andExpect(status().isOk()).andReturn().getResponse()
+ .getContentAsString(), TrafficJam.class)
+ .stream().map(this::toMessage).forEach(logger::info);
+
+ }
- // Test01 insert
-
- // Test02 output
+ private String toMessage(TrafficJam trafficJam) {
+ Junction start = trafficJam.getStart();
+ Highway highway = start.getHighway();
+ Junction end = trafficJam.getEnd();
+ return String.format(MESSAGE_FORMAT,
+ highway.getName(), highway.getOrigin(), highway.getDestination(),
+ trafficJam.getLength(), trafficJam.getKind(),
+ start.getName(), end.getName(),
+ trafficJam.getCause());
+ }
+
+ private static Stream<Arguments> getTestData() {
+ return Stream.of(
+ arguments("Bielefeld-Ost", "Ostwestfalen/Lippe", 2, TrafficJamKind.CONGESTION,
+ TrafficJamCause.ACCIDENT),
+ arguments("Westhofener Kreuz", "Schwerte", 8, TrafficJamKind.SLOW_MOVING_TRAFFIC,
+ TrafficJamCause.ROAD_WORKS));
+ }
private Junction loadJunctionId(String name) throws Exception {
--
Gitblit v1.7.1