| src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie | |
| src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java | ●●●●● Patch | Ansicht | Raw | Blame | Historie |
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 { 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 { src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java
Neue Datei @@ -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; } } src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java
Neue Datei @@ -0,0 +1,6 @@ package de.gedoplan.seminar.jpa.exercise.domain; public enum TrafficJamCause { ROAD_WORKS, ACCIDENT, TRAFFIC_VOLUME } src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java
Neue Datei @@ -0,0 +1,5 @@ package de.gedoplan.seminar.jpa.exercise.domain; public enum TrafficJamKind { CONGESTION, SLOW_MOVING_TRAFFIC } src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java
Neue Datei @@ -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> { } src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java
Neue Datei @@ -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; } } 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 { // Test01 insert 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()); } // Test02 output @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); } 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 {