Hendrik Jungnitsch
2022-09-07 ba63e9aac75a3e8e59ba00dc2a03bdf0a9433cd2
exercise07
5 Dateien hinzugefügt
3 Dateien geändert
179 ■■■■■ Geänderte Dateien
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Highway.java 1 ●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/Junction.java 1 ●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJam.java 61 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamCause.java 6 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/domain/TrafficJamKind.java 5 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/repository/TrafficJamRepository.java 11 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/main/java/de/gedoplan/seminar/jpa/exercise/rest/TrafficJamResource.java 45 ●●●●● Patch | Ansicht | Raw | Blame | Historie
src/test/java/de/gedoplan/seminar/jpa/exercise/Exercise07Test.java 49 ●●●●● 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 {