diff --git a/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java b/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java index 642e0c9..50eabd3 100644 --- a/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java +++ b/src/main/java/click/poweronoff/satellite/repository/dto/Acquisition.java @@ -1,10 +1,12 @@ package click.poweronoff.satellite.repository.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Builder; import lombok.Data; @JsonIgnoreProperties(ignoreUnknown = true) @Data +@Builder public class Acquisition { private String beginViewingDate; diff --git a/src/main/java/click/poweronoff/satellite/repository/dto/Features.java b/src/main/java/click/poweronoff/satellite/repository/dto/Features.java index a29fc4d..878e73a 100644 --- a/src/main/java/click/poweronoff/satellite/repository/dto/Features.java +++ b/src/main/java/click/poweronoff/satellite/repository/dto/Features.java @@ -1,10 +1,14 @@ package click.poweronoff.satellite.repository.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; import lombok.Data; @JsonIgnoreProperties(ignoreUnknown = true) @Data +@Builder public class Features { + @JsonProperty 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 index b9eb39f..5d1cccc 100644 --- a/src/main/java/click/poweronoff/satellite/repository/dto/FeaturesCollection.java +++ b/src/main/java/click/poweronoff/satellite/repository/dto/FeaturesCollection.java @@ -1,10 +1,12 @@ package click.poweronoff.satellite.repository.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Builder; import lombok.Data; @JsonIgnoreProperties(ignoreUnknown = true) @Data +@Builder 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 index 3b8ad06..6a1e690 100644 --- a/src/main/java/click/poweronoff/satellite/repository/dto/Properties.java +++ b/src/main/java/click/poweronoff/satellite/repository/dto/Properties.java @@ -2,10 +2,12 @@ package click.poweronoff.satellite.repository.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; import lombok.Data; @JsonIgnoreProperties(ignoreUnknown = true) @Data +@Builder public class Properties { @JsonProperty diff --git a/src/main/java/click/poweronoff/satellite/service/DataServiceImpl.java b/src/main/java/click/poweronoff/satellite/service/DataServiceImpl.java index a843727..8bc6603 100644 --- a/src/main/java/click/poweronoff/satellite/service/DataServiceImpl.java +++ b/src/main/java/click/poweronoff/satellite/service/DataServiceImpl.java @@ -1,6 +1,8 @@ package click.poweronoff.satellite.service; import click.poweronoff.satellite.domain.Feature; +import click.poweronoff.satellite.repository.JsonFileRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @@ -9,6 +11,12 @@ import java.util.Optional; @Component public class DataServiceImpl implements DataService { + @Autowired + JsonFileRepository jsonFileRepository; + + @Autowired + DataTransformationService dataTransformationService; + public Optional> getAllFeatures() { return Optional.empty(); } diff --git a/src/main/java/click/poweronoff/satellite/service/DataTransformationService.java b/src/main/java/click/poweronoff/satellite/service/DataTransformationService.java new file mode 100644 index 0000000..4eb0505 --- /dev/null +++ b/src/main/java/click/poweronoff/satellite/service/DataTransformationService.java @@ -0,0 +1,35 @@ +package click.poweronoff.satellite.service; + +import click.poweronoff.satellite.domain.Feature; +import click.poweronoff.satellite.repository.dto.Features; +import click.poweronoff.satellite.repository.dto.FeaturesCollection; +import org.apache.tomcat.util.codec.binary.Base64; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Service +public class DataTransformationService { + + public List transformToFeatureList(FeaturesCollection[] collections) { + + List featuresList = new ArrayList<>(); + + Arrays.stream(collections).forEach(collection -> Arrays.stream(collection.getFeatures()).forEach(feature -> featuresList.add(createFeature(feature)))); + + return featuresList; + } + + private Feature createFeature(final Features features) { + return new Feature( + features.getProperties().getId(), + Long.parseLong(features.getProperties().getTimestamp()), + Long.parseLong(features.getProperties().getAcquisition().getBeginViewingDate()), + Long.parseLong(features.getProperties().getAcquisition().getEndViewingDate()), + features.getProperties().getAcquisition().getMissionName(), + Base64.decodeBase64(features.getProperties().getQuicklook().getBytes()) + ); + } +} diff --git a/src/test/java/click/poweronoff/satellite/service/DataTransformationServiceTest.java b/src/test/java/click/poweronoff/satellite/service/DataTransformationServiceTest.java new file mode 100644 index 0000000..611cdb3 --- /dev/null +++ b/src/test/java/click/poweronoff/satellite/service/DataTransformationServiceTest.java @@ -0,0 +1,59 @@ +package click.poweronoff.satellite.service; + +import click.poweronoff.satellite.domain.Feature; +import click.poweronoff.satellite.repository.dto.Acquisition; +import click.poweronoff.satellite.repository.dto.Features; +import click.poweronoff.satellite.repository.dto.FeaturesCollection; +import click.poweronoff.satellite.repository.dto.Properties; +import org.junit.Before; +import org.junit.Test; + +import java.util.Base64; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DataTransformationServiceTest { + + private static final String ID = "id"; + private static final long TIMESTAMP = 271770505L; + private static final long BEGIN_VIEWING_DATE = 271770509L; + private static final long END_VIEWING_DATE = 271770512L; + private static final String MISSION_NAME = "cool-mission"; + private static final String SATELLITE = "satellite"; + + + DataTransformationService dataTransformationService; + + @Before + public void setup() { + dataTransformationService = new DataTransformationService(); + } + + + @Test + public void transformToFeatureListShouldTransformToFeatureList() { + List objectUnderTest = dataTransformationService.transformToFeatureList(createTestFeaturesCollection()); + assertThat(objectUnderTest).isNotEmpty(); + assertThat(objectUnderTest).hasSize(1); + assertThat(objectUnderTest).containsOnly(new Feature(ID, TIMESTAMP, BEGIN_VIEWING_DATE, END_VIEWING_DATE, MISSION_NAME, SATELLITE.getBytes())); + } + + + private FeaturesCollection[] createTestFeaturesCollection() { + + Features[] features = new Features[]{Features.builder().properties(Properties.builder() + .id(ID) + .timestamp(Long.toString(TIMESTAMP)) + .quicklook(new String(Base64.getEncoder().encode("satellite".getBytes()))) + .acquisition(Acquisition.builder() + .beginViewingDate(Long.toString(BEGIN_VIEWING_DATE)) + .endViewingDate(Long.toString(END_VIEWING_DATE)) + .missionName(MISSION_NAME) + .build()) + .build()) + .build()}; + + return new FeaturesCollection[]{FeaturesCollection.builder().features(features).build()}; + } +} \ No newline at end of file