test methods

added generated jars
This commit is contained in:
yannick.blanken@csc-online.eu 2022-06-01 18:11:09 +02:00
parent ffb8bb4d71
commit e67fdcf8b3
29 changed files with 189 additions and 30 deletions

View File

@ -17,6 +17,7 @@ public interface StorageService {
Path load(String filename);
Resource loadAsResource(String filename);
Resource loadAsResource(String dir, String filename);
void deleteAll();

View File

@ -7,6 +7,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.logging.Logger;
import java.util.stream.Stream;
import eu.csc.ODPAppVehOwnServer.persistence.services.StorageService;
@ -23,6 +24,9 @@ public class FileSystemStorageService implements StorageService {
private final Path rootLocation;
private static final Logger logger = Logger.getLogger(FileSystemStorageService.class.getSimpleName());
@Autowired
public FileSystemStorageService(StorageProperties properties) {
this.rootLocation = Paths.get(properties.getLocation());
@ -82,6 +86,27 @@ public class FileSystemStorageService implements StorageService {
public Resource loadAsResource(String filename) {
try {
Path file = load(filename);
logger.info(file.toAbsolutePath().toString());
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;
}
else {
throw new StorageFileNotFoundException(
"Could not read file: " + filename);
}
}
catch (MalformedURLException e) {
throw new StorageFileNotFoundException("Could not read file: " + filename, e);
}
}
@Override
public Resource loadAsResource(String dir, String filename) {
try {
Path file = load(dir).resolve(filename);
logger.info(file.toAbsolutePath().toString());
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;

View File

@ -1,22 +1,45 @@
package eu.csc.ODPAppVehOwnServer.persistence.services.storage;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.persistence.services.GsonService;
import eu.csc.ODPAppVehOwnServer.persistence.services.StorageService;
import java.io.FileNotFoundException;
import java.nio.file.Path;
import java.util.List;
public class MetaDataStorageService {
private final StorageService storageService;
private static final String FILENAME_PROPULSION_TYPE = "propulsionTypes.json";
private static final String FILENAME_BRANDS = "brands.json";
private static final String FILENAME_DEVICES = "devices.json";
private static final String FOLDER_MODELS = "models";
private GsonService gsonService = new GsonService();
public MetaDataStorageService(Path path) {
this.storageService = new FileSystemStorageService(path);
}
public MetaDataStorageService(StorageService storageService) {
this.storageService = storageService;
public List<VehicleBrandDto> openBrands() throws FileNotFoundException {
return openBrands(FILENAME_BRANDS);
}
public List<VehicleModelDto> openModels(String brand) throws FileNotFoundException {
var file = storageService.load(FOLDER_MODELS).resolve(brand + ".json").toFile();
return gsonService.readJson(gsonService.getTypeTokenList(), file);
}
public List<VehicleBrandDto> openBrands(String filename) throws FileNotFoundException {
return gsonService.readJson(gsonService.getTypeTokenList(), storageService.load(filename).toFile());
}
}

View File

@ -11,5 +11,5 @@
## Shell
i_set_loc C:\Users\yanni\Desktop\dev\priv\ODP-AppVehOwnServer\doc\data
C:\Users\yanni\Desktop\dev\priv\ODP-AppVehOwnServer\doc\data

View File

@ -1,6 +1,6 @@
[
{
"id": "ford",
"brandId": "ford",
"name": "Ford"
}
]

3
doc/data/devices.json Normal file
View File

@ -0,0 +1,3 @@
[
]

BIN
doc/data/images/ford.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -1,7 +1,9 @@
[
{
"id": null,
"brand": "ford",
"brand": {
"brandId": "ford"
},
"modelId": "focus",
"name": "Focus",
"propulsionType": "petrol"

Binary file not shown.

Binary file not shown.

View File

@ -18,7 +18,6 @@ import javax.persistence.*;
@Table(name = "tcustomer_vehicles")
public class CustomerVehicleEntity extends AbstractCustomerEntity {
@Column(nullable = false)
private String vin;
@ -27,12 +26,12 @@ public class CustomerVehicleEntity extends AbstractCustomerEntity {
@Column(nullable = false)
private String model;
@Column(name = "license_plate", nullable = false)
private String licensePlate;
@ManyToOne
@JoinColumn(nullable = true, name = "cd_id", insertable = false, updatable = false)
private CustomerDeviceEntity activeCustomerDevice;
@Column(name = "cd_id", nullable = true)

View File

@ -13,4 +13,5 @@ public interface VehicleBrandRepository extends JpaRepository<VehicleBrandEntity
Optional<VehicleBrandEntity> findOneByBrandId(String brand);
VehicleBrandEntity getOneByBrandId(String brandId);
}

View File

@ -33,10 +33,8 @@ public class DeviceService {
var oD = deviceRepository.findByDevicenumber(device);
entity.setDevice(oD.get());
entity.setSerialNumber(utilsService.getSerialnumber(deviceArticleRepository.countAllByDeviceDevicenumber(device)));
deviceArticleRepository.save(entity);

View File

@ -4,12 +4,10 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.*;
import java.lang.reflect.Type;
import java.util.List;
@ -19,6 +17,7 @@ public class GsonService {
private final Gson gson;
@Autowired
public GsonService() {
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
@ -33,7 +32,11 @@ public class GsonService {
}
public <T> T readJson(Type clazz, String filePath) throws FileNotFoundException {
return gson.fromJson(new JsonReader(new FileReader(filePath)), clazz);
return readJson(clazz, new File(filePath));
}
public <T> T readJson(Type clazz, File file) throws FileNotFoundException {
return gson.fromJson(new JsonReader(new FileReader(file)), clazz);
}
public void exportJson(Object data, String filePath) throws IOException {

View File

@ -72,4 +72,11 @@ public class VehicleService {
return propulsionTypeRepository.findAll();
}
public VehicleBrandEntity addVehicleIfNotExists(String brandId, String name) {
if(vehicleBrandRepository.findOneByBrandId(brandId).isPresent())
return vehicleBrandRepository.getOneByBrandId(brandId);
return addVehicle(brandId, name);
}
}

View File

@ -31,7 +31,7 @@ public class DeviceController {
DeviceDto dto = new DeviceDto();
dto.setId(v.getId());
dto.setName(v.getName());
dto.setDevicenumber(v.getDevicenumber());
dto.setDeviceNumber(v.getDevicenumber());
dto.setManufacturer(v.getManufacturer());
items.add(dto);

View File

@ -4,15 +4,19 @@ import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.models.data.PropulsionTypeDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.VehicleModelEntity;
import eu.csc.ODPAppVehOwnServer.persistence.services.StorageService;
import eu.csc.ODPAppVehOwnServer.persistence.services.VehicleService;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import org.springframework.web.util.UriComponentsBuilder;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@ -20,6 +24,9 @@ import java.util.List;
@RequestMapping("vehicles")
public class VehicleController {
@Autowired
private StorageService storageService;
@Autowired
private VehicleService vehicleService;
@ -31,14 +38,22 @@ public class VehicleController {
for (var v : vehicleService.findAllBrands()
) {
VehicleBrandDto dto = new VehicleBrandDto();
dto.setName(v.getName());
dto.setId(v.getId());
dto.setBrandId(v.getBrandId());
String url = ServletUriComponentsBuilder.fromCurrentRequest()
.path(dto.getBrandId())
.toUriString();
dto.setImageUrl(url);
items.add(dto);
UriComponentsBuilder.fromUriString("/")
.build();
//ToDo add models?
}
@ -46,6 +61,16 @@ public class VehicleController {
return ResponseEntity.ok(items);
}
@RequestMapping(value = "/brands/{brandId}", method = RequestMethod.GET,
produces = MediaType.IMAGE_JPEG_VALUE)
public void getImage(HttpServletResponse response, @PathVariable String brandId) throws IOException {
var imgFile = storageService.loadAsResource("images", "ford.jpeg");
response.setContentType(MediaType.IMAGE_JPEG_VALUE);
StreamUtils.copy(imgFile.getInputStream(), response.getOutputStream());
}
@GetMapping
@RequestMapping(value = {"/models","/models/{brand}"})

View File

@ -41,6 +41,7 @@ public class VehicleRegistrationController extends AbstractRestController {
mapped.setModelId(userVehicle.getModel());
mapped.setLicensePlate(userVehicle.getLicensePlate());
result.add(mapped);
}
@ -57,7 +58,8 @@ public class VehicleRegistrationController extends AbstractRestController {
entity.setLicensePlate(body.getLicensePlate());
entity.setModel(body.getModelId());
entity.setBrand(body.getBrandId());
entity.setCd_id(user.getUserId());
entity.setUser_id(user.getUserId());
entity.setVin(body.getVin());
entity = customerService.registerVehicle(entity);

View File

@ -1,6 +1,7 @@
package eu.csc.ODPAppVehOwnServer.web.clients;
import eu.csc.ODPAppVehOwnServer.client.clients.VehOwnAppClient;
import eu.csc.ODPAppVehOwnServer.models.regist.UserVehicleRegistrationDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceArticleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceEntity;
import eu.csc.ODPAppVehOwnServer.persistence.services.CustomerService;
@ -15,6 +16,8 @@ public abstract class AbstractClientTester {
protected final DeviceEntity deviceA;
protected final DeviceArticleEntity deviceArticleA;
protected final UserVehicleRegistrationDto customerVehicleA;
@LocalServerPort
protected int port;
@ -54,6 +57,12 @@ public abstract class AbstractClientTester {
this.deviceArticleA = new DeviceArticleEntity();
this.deviceArticleA.setSerialNumber("AAA");
this.customerVehicleA = new UserVehicleRegistrationDto();
customerVehicleA.setBrandId("ford");
customerVehicleA.setModelId("focus");
customerVehicleA.setVin("W0L000051T2123456");
customerVehicleA.setLicensePlate("HS-BLUB001");
}
@ -78,5 +87,10 @@ public abstract class AbstractClientTester {
protected void initTestData(){
setUpDevices();
setUpVehicles();
}
private void setUpVehicles() {
vehicleService.addVehicleIfNotExists("ford", "Ford");
}
}

View File

@ -2,16 +2,23 @@ package eu.csc.ODPAppVehOwnServer.web.clients;
import eu.csc.ODPAppVehOwnServer.ODPAppVehOwnServerApplication;
import eu.csc.ODPAppVehOwnServer.client.ClientFactory;
import eu.csc.ODPAppVehOwnServer.models.regist.UserVehicleRegistrationDto;
import lombok.var;
import org.junit.jupiter.api.*;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = ODPAppVehOwnServerApplication.class)
/**
* @see eu.csc.ODPAppVehOwnServer.controller.registration.VehicleRegistrationController
*/
public class CustomerClientTester extends AbstractClientTester{
@BeforeEach
void init() throws IOException {
@ -53,4 +60,14 @@ public class CustomerClientTester extends AbstractClientTester{
System.out.println(result);
}
@Test
void testRegisterVehicle() {
var result = Assertions.assertDoesNotThrow(() ->
client.registerCustomerVehicle(customerVehicleA));
Assertions.assertNotNull(result);
System.out.println(result);
}
}

View File

@ -1,8 +1,11 @@
package eu.csc.ODPAppVehOwnServer.shell;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.persistence.services.DeviceService;
import eu.csc.ODPAppVehOwnServer.persistence.services.GsonService;
import eu.csc.ODPAppVehOwnServer.persistence.services.StorageService;
import eu.csc.ODPAppVehOwnServer.persistence.services.VehicleService;
import eu.csc.ODPAppVehOwnServer.persistence.services.storage.MetaDataStorageService;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.shell.standard.ShellComponent;
@ -10,11 +13,15 @@ import org.springframework.shell.standard.ShellMethod;
import org.springframework.shell.standard.ShellOption;
import java.io.File;
import java.io.FileNotFoundException;
import java.nio.file.Path;
import java.util.List;
@ShellComponent
public class InfoCommands extends BaseCommands{
private MetaDataStorageService metaDataStorageService;
@Autowired
private VehicleService vehicleService;
@ -24,10 +31,13 @@ public class InfoCommands extends BaseCommands{
@Autowired
private GsonService gsonService;
@Autowired
private StorageService storageService;
@ShellMethod(value = "Info", key = {"info"})
public String info(){
addMessageString(storageService.load("").toAbsolutePath().toString());
return getMessageString();
}
@ -41,12 +51,34 @@ public class InfoCommands extends BaseCommands{
return getMessageString();
}
@ShellMethod(value = "import Content", key = {"i_im"})
public String doImport(@ShellOption String location){
@ShellMethod(value = "set location", key = {"i_set_loc"})
public String setFolderDir(@ShellOption String location){
Path p = new File(location).toPath();
this.metaDataStorageService = new MetaDataStorageService(p);
return getMessageString();
}
@ShellMethod(value = "import Content", key = {"i_im"})
public String doImport(@ShellOption(defaultValue = ShellOption.NULL) String location) throws FileNotFoundException {
List<VehicleBrandDto> brands = null;
if(location == null)
brands = metaDataStorageService.openBrands();
else
brands = metaDataStorageService.openBrands(location);
for (var brand:brands
) {
vehicleService.addVehicleIfNotExists(brand.getBrandId(), brand.getName());
}
addMessageString(p.toString());

View File

@ -34,7 +34,7 @@ public class DtoMapper {
var result = new CustomerDeviceDto();
result.setSerialnumber(item.getSerialNumber());
result.setSerialNumber(item.getSerialNumber());
result.setName(item.getName());
result.setDeviceNumber(item.getDeviceNumber());

BIN
web-dir/images/ford.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -104,8 +104,11 @@
<manifestEntries>
<retrofit_version>${retrofit.version}</retrofit_version>
<creationTime>${maven.build.timestamp}</creationTime>
</manifestEntries>
</archive>
<outputDirectory>${project.basedir}/../../doc/generated</outputDirectory>
</configuration>
</plugin>

View File

@ -37,6 +37,7 @@
<creationTime>${maven.build.timestamp}</creationTime>
</manifestEntries>
</archive>
<outputDirectory>${project.basedir}/../../doc/generated</outputDirectory>
</configuration>
</plugin>

View File

@ -15,6 +15,7 @@ public class VehicleBrandDto extends AbstractBaseDto{
private Long id;
private String brandId;
private String name;
private String imageUrl;
private List<VehicleModelDto> models;

View File

@ -13,7 +13,7 @@ public class DeviceDto {
private Long id;
private String devicenumber;
private String deviceNumber;
private String manufacturer;

View File

@ -1,7 +1,6 @@
package eu.csc.ODPAppVehOwnServer.models.regist;
import eu.csc.ODPAppVehOwnServer.models.AbstractBaseDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@ -15,6 +14,6 @@ import lombok.ToString;
public class CustomerDeviceDto extends AbstractBaseDto {
private String deviceNumber;
private String serialnumber;
private String serialNumber;
private String name;
}

View File

@ -4,10 +4,13 @@ import eu.csc.ODPAppVehOwnServer.models.AbstractBaseDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CustomerVehicleDto extends AbstractBaseDto {
private String vin;