added DataTransformationService transforming jackson serialized DTOs to flatten Feature objects
This commit is contained in:
parent
9ad22501e9
commit
e7e8f786e8
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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())
|
||||
);
|
||||
}
|
||||
}
|
@ -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()};
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user