diff --git a/pom.xml b/pom.xml index b90501e..1ab9d30 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 1.18.12 3.3.0 4.12 - 2.1 + 3.3.0 @@ -65,10 +65,11 @@ ${junit.version} test + - org.hamcrest - hamcrest - 2.1 + org.assertj + assertj-guava + ${assertj-guava.version} test diff --git a/src/main/java/click/poweronoff/satellite/repository/JsonFileRepository.java b/src/main/java/click/poweronoff/satellite/repository/JsonFileRepository.java new file mode 100644 index 0000000..68c259a --- /dev/null +++ b/src/main/java/click/poweronoff/satellite/repository/JsonFileRepository.java @@ -0,0 +1,33 @@ +package click.poweronoff.satellite.repository; + +import click.poweronoff.satellite.repository.dto.FeaturesCollection; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +@Repository +public class JsonFileRepository { + + @Value("${storage.file.path}") + private String filePath; + + private ObjectMapper objectMapper; + + @PostConstruct + public void initRepository() { + objectMapper = new ObjectMapper(); + } + + public FeaturesCollection[] readAllFeatures() throws IOException { + FileReader fileReader = new FileReader(filePath); + BufferedReader reader = new BufferedReader(fileReader); + FeaturesCollection[] features = objectMapper.readValue(reader, FeaturesCollection[].class); + reader.close(); + return features; + } +} diff --git a/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java b/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java new file mode 100644 index 0000000..642e0c9 --- /dev/null +++ b/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java @@ -0,0 +1,15 @@ +package click.poweronoff.satellite.repository.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class Acquisition { + + private String beginViewingDate; + + private String endViewingDate; + + private String missionName; +} diff --git a/src/main/java/click/poweronoff/satellite/repository/dto/Features.java b/src/main/java/click/poweronoff/satellite/repository/dto/Features.java new file mode 100644 index 0000000..a29fc4d --- /dev/null +++ b/src/main/java/click/poweronoff/satellite/repository/dto/Features.java @@ -0,0 +1,10 @@ +package click.poweronoff.satellite.repository.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class Features { + private Properties properties; +} diff --git a/src/main/java/click/poweronoff/satellite/repository/dto/FeaturesCollection.java b/src/main/java/click/poweronoff/satellite/repository/dto/FeaturesCollection.java new file mode 100644 index 0000000..b9eb39f --- /dev/null +++ b/src/main/java/click/poweronoff/satellite/repository/dto/FeaturesCollection.java @@ -0,0 +1,10 @@ +package click.poweronoff.satellite.repository.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class FeaturesCollection { + private Features[] features; +} diff --git a/src/main/java/click/poweronoff/satellite/repository/dto/Properties.java b/src/main/java/click/poweronoff/satellite/repository/dto/Properties.java new file mode 100644 index 0000000..3b8ad06 --- /dev/null +++ b/src/main/java/click/poweronoff/satellite/repository/dto/Properties.java @@ -0,0 +1,19 @@ +package click.poweronoff.satellite.repository.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@JsonIgnoreProperties(ignoreUnknown = true) +@Data +public class Properties { + + @JsonProperty + private String id; + @JsonProperty + private String timestamp; + @JsonProperty + private String quicklook; + @JsonProperty + private Acquisition acquisition; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..71274bd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,2 @@ - +# configuration for the json data storage relative path +storage.file.path=json/source-data.json diff --git a/src/test/java/click/poweronoff/satellite/repository/JsonFileRepositoryTest.java b/src/test/java/click/poweronoff/satellite/repository/JsonFileRepositoryTest.java new file mode 100644 index 0000000..9ff6212 --- /dev/null +++ b/src/test/java/click/poweronoff/satellite/repository/JsonFileRepositoryTest.java @@ -0,0 +1,27 @@ +package click.poweronoff.satellite.repository; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; + + +@SpringBootTest +@RunWith(SpringRunner.class) +public class JsonFileRepositoryTest { + + @Autowired + private JsonFileRepository repository; + + @Test + public void readAllFeaturesShouldReturnAllFeatures() throws IOException { + assertThat(repository.readAllFeatures()).isNotEmpty(); + assertThat(repository.readAllFeatures()).hasSize(14); + } + +} \ No newline at end of file