DataService implementation is done and tested. The application is now working end-2-end
This commit is contained in:
parent
46a2e75331
commit
439c1560d8
@ -2,13 +2,18 @@ package click.poweronoff.satellite.service;
|
|||||||
|
|
||||||
import click.poweronoff.satellite.domain.Feature;
|
import click.poweronoff.satellite.domain.Feature;
|
||||||
import click.poweronoff.satellite.repository.JsonFileRepository;
|
import click.poweronoff.satellite.repository.JsonFileRepository;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Slf4j
|
||||||
public class DataServiceImpl implements DataService {
|
public class DataServiceImpl implements DataService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -18,16 +23,43 @@ public class DataServiceImpl implements DataService {
|
|||||||
DataTransformationService dataTransformationService;
|
DataTransformationService dataTransformationService;
|
||||||
|
|
||||||
public Optional<List<Feature>> getAllFeatures() {
|
public Optional<List<Feature>> getAllFeatures() {
|
||||||
return Optional.empty();
|
try {
|
||||||
|
List<Feature> features = dataTransformationService.transformToFeatureList(jsonFileRepository.readAllFeatures());
|
||||||
|
if (!features.isEmpty()) {
|
||||||
|
return Optional.of(features);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("exception on getAllFeatures() occurred, please check your app configuration");
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Feature> getFeature(String featureId) {
|
public Optional<Feature> getFeature(String featureId) {
|
||||||
return Optional.empty();
|
try {
|
||||||
|
List<Feature> features = dataTransformationService.transformToFeatureList(jsonFileRepository.readAllFeatures());
|
||||||
|
if (!features.isEmpty()) {
|
||||||
|
return features.stream().filter(feature -> feature.getId().equals(featureId)).findFirst();
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("exception on getFeature() and featureIo {} occurred, please check your app configuration", featureId);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<byte[]> getPicture(String featureId) {
|
public Optional<byte[]> getPicture(String featureId) {
|
||||||
return Optional.empty();
|
try {
|
||||||
|
List<Feature> features = dataTransformationService.transformToFeatureList(jsonFileRepository.readAllFeatures());
|
||||||
|
if (!features.isEmpty()) {
|
||||||
|
return features.stream().filter(feature -> feature.getId().equals(featureId)).findFirst().filter(feature -> feature.getPicture() != null).map(Feature::getPicture);
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("exception on getPicture() and featureIo {} occurred, please check your app configuration", featureId);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,10 @@ import org.apache.tomcat.util.codec.binary.Base64;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static java.util.Arrays.stream;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DataTransformationService {
|
public class DataTransformationService {
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ public class DataTransformationService {
|
|||||||
|
|
||||||
List<Feature> featuresList = new ArrayList<>();
|
List<Feature> featuresList = new ArrayList<>();
|
||||||
|
|
||||||
Arrays.stream(collections).forEach(collection -> Arrays.stream(collection.getFeatures()).forEach(feature -> featuresList.add(createFeature(feature))));
|
stream(collections).forEach(collection -> stream(collection.getFeatures()).forEach(feature -> featuresList.add(createFeature(feature))));
|
||||||
|
|
||||||
return featuresList;
|
return featuresList;
|
||||||
}
|
}
|
||||||
@ -29,7 +30,7 @@ public class DataTransformationService {
|
|||||||
Long.parseLong(features.getProperties().getAcquisition().getBeginViewingDate()),
|
Long.parseLong(features.getProperties().getAcquisition().getBeginViewingDate()),
|
||||||
Long.parseLong(features.getProperties().getAcquisition().getEndViewingDate()),
|
Long.parseLong(features.getProperties().getAcquisition().getEndViewingDate()),
|
||||||
features.getProperties().getAcquisition().getMissionName(),
|
features.getProperties().getAcquisition().getMissionName(),
|
||||||
Base64.decodeBase64(features.getProperties().getQuicklook().getBytes())
|
features.getProperties().getQuicklook() != null ? Base64.decodeBase64(features.getProperties().getQuicklook().getBytes()) : null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,91 @@
|
|||||||
package click.poweronoff.satellite.service;
|
package click.poweronoff.satellite.service;
|
||||||
|
|
||||||
//@RunWith(MockitoJUnitRunner.class)
|
import click.poweronoff.satellite.domain.Feature;
|
||||||
|
import click.poweronoff.satellite.repository.JsonFileRepository;
|
||||||
|
import click.poweronoff.satellite.repository.dto.FeaturesCollection;
|
||||||
|
import click.poweronoff.satellite.testutil.FeaturesCollectionCreator;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class DataServiceImplTest {
|
public class DataServiceImplTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
JsonFileRepository jsonFileRepository;
|
||||||
|
|
||||||
|
DataServiceImpl dataService;
|
||||||
|
|
||||||
|
DataTransformationService dataTransformationService;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
dataTransformationService = new DataTransformationService();
|
||||||
|
dataService = new DataServiceImpl(jsonFileRepository, dataTransformationService);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAllFeaturesReturnsEmpty() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(new FeaturesCollection[]{});
|
||||||
|
assertThat(dataService.getAllFeatures()).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAllFeaturesReturnsAListOfFeatures() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(FeaturesCollectionCreator.createTestFeaturesCollection());
|
||||||
|
assertThat(dataService.getAllFeatures()).isNotEmpty();
|
||||||
|
assertThat(dataService.getAllFeatures().get()).hasSize(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFeatureReturnsEmpty() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(new FeaturesCollection[]{});
|
||||||
|
assertThat(dataService.getFeature(FeaturesCollectionCreator.ID)).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFeatureWithNonexistentIdReturnsEmpty() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(FeaturesCollectionCreator.createTestFeaturesCollection());
|
||||||
|
assertThat(dataService.getFeature("non-existing-feature")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFeatureReturnFeature() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(FeaturesCollectionCreator.createTestFeaturesCollection());
|
||||||
|
assertThat(dataService.getFeature(FeaturesCollectionCreator.ID)).isNotEmpty();
|
||||||
|
assertThat(dataService.getFeature(FeaturesCollectionCreator.ID)).isPresent().hasValue(new Feature(
|
||||||
|
FeaturesCollectionCreator.ID,
|
||||||
|
FeaturesCollectionCreator.TIMESTAMP,
|
||||||
|
FeaturesCollectionCreator.BEGIN_VIEWING_DATE,
|
||||||
|
FeaturesCollectionCreator.END_VIEWING_DATE,
|
||||||
|
FeaturesCollectionCreator.MISSION_NAME,
|
||||||
|
FeaturesCollectionCreator.SATELLITE.getBytes()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPictureReturnsEmpty() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(new FeaturesCollection[]{});
|
||||||
|
assertThat(dataService.getPicture(FeaturesCollectionCreator.ID)).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPictureWithNonexistentIdReturnsEmpty() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(FeaturesCollectionCreator.createTestFeaturesCollection());
|
||||||
|
assertThat(dataService.getPicture("non-existing-feature")).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getPictureReturnsPicture() throws IOException {
|
||||||
|
when(jsonFileRepository.readAllFeatures()).thenReturn(FeaturesCollectionCreator.createTestFeaturesCollection());
|
||||||
|
assertThat(dataService.getPicture(FeaturesCollectionCreator.ID)).isPresent().hasValue(FeaturesCollectionCreator.SATELLITE.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -2,27 +2,16 @@
|
|||||||
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.dto.Acquisition;
|
import click.poweronoff.satellite.testutil.FeaturesCollectionCreator;
|
||||||
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.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.Base64;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
public class DataTransformationServiceTest {
|
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;
|
DataTransformationService dataTransformationService;
|
||||||
|
|
||||||
@ -34,32 +23,14 @@ public class DataTransformationServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void transformToFeatureListShouldTransformToFeatureList() {
|
public void transformToFeatureListShouldTransformToFeatureList() {
|
||||||
List<Feature> objectUnderTest = dataTransformationService.transformToFeatureList(createTestFeaturesCollection());
|
List<Feature> objectUnderTest = dataTransformationService.transformToFeatureList(FeaturesCollectionCreator.createTestFeaturesCollection());
|
||||||
assertThat(objectUnderTest).isNotEmpty();
|
assertThat(objectUnderTest).isNotEmpty();
|
||||||
assertThat(objectUnderTest).hasSize(1);
|
assertThat(objectUnderTest).hasSize(1);
|
||||||
assertThat(objectUnderTest).containsOnly(new Feature(ID, TIMESTAMP, BEGIN_VIEWING_DATE, END_VIEWING_DATE, MISSION_NAME, SATELLITE.getBytes()));
|
assertThat(objectUnderTest).containsOnly(new Feature(FeaturesCollectionCreator.ID,
|
||||||
}
|
FeaturesCollectionCreator.TIMESTAMP,
|
||||||
|
FeaturesCollectionCreator.BEGIN_VIEWING_DATE,
|
||||||
|
FeaturesCollectionCreator.END_VIEWING_DATE,
|
||||||
private FeaturesCollection[] createTestFeaturesCollection() {
|
FeaturesCollectionCreator.MISSION_NAME,
|
||||||
|
FeaturesCollectionCreator.SATELLITE.getBytes()));
|
||||||
Acquisition acquisition = new Acquisition();
|
|
||||||
acquisition.setBeginViewingDate(Long.toString(BEGIN_VIEWING_DATE));
|
|
||||||
acquisition.setEndViewingDate(Long.toString(END_VIEWING_DATE));
|
|
||||||
acquisition.setMissionName(MISSION_NAME);
|
|
||||||
|
|
||||||
Properties properties = new Properties();
|
|
||||||
properties.setId(ID);
|
|
||||||
properties.setQuicklook(new String(Base64.getEncoder().encode("satellite".getBytes())));
|
|
||||||
properties.setTimestamp(Long.toString(TIMESTAMP));
|
|
||||||
properties.setAcquisition(acquisition);
|
|
||||||
|
|
||||||
Features features = new Features();
|
|
||||||
features.setProperties(properties);
|
|
||||||
|
|
||||||
FeaturesCollection featuresCollection = new FeaturesCollection();
|
|
||||||
featuresCollection.setFeatures(new Features[]{features});
|
|
||||||
|
|
||||||
return new FeaturesCollection[]{featuresCollection};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package click.poweronoff.satellite.testutil;
|
||||||
|
|
||||||
|
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 java.util.Base64;
|
||||||
|
|
||||||
|
public class FeaturesCollectionCreator {
|
||||||
|
|
||||||
|
|
||||||
|
public static final String ID = "id";
|
||||||
|
public static final long TIMESTAMP = 271770505L;
|
||||||
|
public static final long BEGIN_VIEWING_DATE = 271770509L;
|
||||||
|
public static final long END_VIEWING_DATE = 271770512L;
|
||||||
|
public static final String MISSION_NAME = "cool-mission";
|
||||||
|
public static final String SATELLITE = "satellite";
|
||||||
|
|
||||||
|
|
||||||
|
public static FeaturesCollection[] createTestFeaturesCollection() {
|
||||||
|
|
||||||
|
Acquisition acquisition = new Acquisition();
|
||||||
|
acquisition.setBeginViewingDate(Long.toString(BEGIN_VIEWING_DATE));
|
||||||
|
acquisition.setEndViewingDate(Long.toString(END_VIEWING_DATE));
|
||||||
|
acquisition.setMissionName(MISSION_NAME);
|
||||||
|
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setId(ID);
|
||||||
|
properties.setQuicklook(new String(Base64.getEncoder().encode(SATELLITE.getBytes())));
|
||||||
|
properties.setTimestamp(Long.toString(TIMESTAMP));
|
||||||
|
properties.setAcquisition(acquisition);
|
||||||
|
|
||||||
|
Features features = new Features();
|
||||||
|
features.setProperties(properties);
|
||||||
|
|
||||||
|
FeaturesCollection featuresCollection = new FeaturesCollection();
|
||||||
|
featuresCollection.setFeatures(new Features[]{features});
|
||||||
|
|
||||||
|
return new FeaturesCollection[]{featuresCollection};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user