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