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;
|
package click.poweronoff.satellite.repository.dto;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class Acquisition {
|
public class Acquisition {
|
||||||
|
|
||||||
private String beginViewingDate;
|
private String beginViewingDate;
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package click.poweronoff.satellite.repository.dto;
|
package click.poweronoff.satellite.repository.dto;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class Features {
|
public class Features {
|
||||||
|
@JsonProperty
|
||||||
private Properties properties;
|
private Properties properties;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package click.poweronoff.satellite.repository.dto;
|
package click.poweronoff.satellite.repository.dto;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class FeaturesCollection {
|
public class FeaturesCollection {
|
||||||
private Features[] features;
|
private Features[] features;
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,12 @@ package click.poweronoff.satellite.repository.dto;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
public class Properties {
|
public class Properties {
|
||||||
|
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package click.poweronoff.satellite.service;
|
package click.poweronoff.satellite.service;
|
||||||
|
|
||||||
import click.poweronoff.satellite.domain.Feature;
|
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 org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -9,6 +11,12 @@ import java.util.Optional;
|
|||||||
@Component
|
@Component
|
||||||
public class DataServiceImpl implements DataService {
|
public class DataServiceImpl implements DataService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
JsonFileRepository jsonFileRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
DataTransformationService dataTransformationService;
|
||||||
|
|
||||||
public Optional<List<Feature>> getAllFeatures() {
|
public Optional<List<Feature>> getAllFeatures() {
|
||||||
return Optional.empty();
|
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