added DataTransformationService transforming jackson serialized DTOs to flatten Feature objects

This commit is contained in:
steam 2020-02-28 13:49:00 +01:00
parent 9ad22501e9
commit e7e8f786e8
7 changed files with 112 additions and 0 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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<List<Feature>> getAllFeatures() {
return Optional.empty();
}

View File

@ -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<Feature> transformToFeatureList(FeaturesCollection[] collections) {
List<Feature> 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())
);
}
}

View File

@ -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<Feature> 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()};
}
}