added client

added methods

added controller functions
This commit is contained in:
yannick.blanken@csc-online.eu 2022-06-22 07:02:44 +02:00
parent 8ac3305646
commit 4f3085b52b
28 changed files with 373 additions and 55 deletions

View File

@ -0,0 +1,7 @@
package eu.csc.ODPAppVehOwnServer.data;
import java.util.concurrent.atomic.AtomicInteger;
public class LicensePlate {
}

View File

@ -1,5 +1,6 @@
package eu.csc.ODPAppVehOwnServer.persistence.services.storage;
import com.google.gson.reflect.TypeToken;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
@ -137,7 +138,7 @@ public class MetaDataStorageService
@Override
public List<LanguageDto> openLanguages(String filename) throws FileNotFoundException {
return gsonService.readJson(gsonService.getTypeTokenList(), storageService.load(filename).toFile());
return gsonService.readJson(new TypeToken<List<LanguageDto>>(){}.getType(), storageService.load(filename).toFile());
}

View File

@ -0,0 +1,20 @@
package eu.csc.ODPAppVehOwnServer.services;
import java.io.IOException;
public final class DatabaseUtil {
public static boolean restore(String dbUsername, String dbPassword, String dbName, String sourceFile)
throws IOException, InterruptedException {
String[] command = new String[]{
"mysql",
"-u" + dbUsername,
"-p" + dbPassword,
"-e",
" source " + sourceFile,
dbName
};
Process runtimeProcess = Runtime.getRuntime().exec(command);
int processComplete = runtimeProcess.waitFor();
return processComplete == 0;
}
}

Binary file not shown.

View File

@ -0,0 +1,26 @@
package eu.csc.ODPAppVehOwnServer.persistence.entity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Lob;
@Embeddable
@Getter
@Setter
@NoArgsConstructor
public class EmbImageDataEntity {
@Column
private String imageName;
@Column
private String imageType;
@Lob
private byte[] imageData;
}

View File

@ -1,6 +1,7 @@
package eu.csc.ODPAppVehOwnServer.persistence.entity.data;
import eu.csc.ODPAppVehOwnServer.persistence.entity.AbstractEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.EmbImageDataEntity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@ -17,7 +18,6 @@ import java.util.List;
@Table(name = "tvehicle_brands")
@ToString(callSuper = true, onlyExplicitlyIncluded = true)
//@ToString(callSuper = true, onlyExplicitlyIncluded = true)
public class VehicleBrandEntity extends AbstractEntity {
@Column(name = "brand_id", unique = true, nullable = false)
@ -26,10 +26,20 @@ public class VehicleBrandEntity extends AbstractEntity {
@Column(nullable = false)
private String name;
@Column(nullable = true)
private String imageName;
@Embedded
private EmbImageDataEntity imageData;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "brand", cascade = CascadeType.ALL)
private List<VehicleModelEntity> modelEntities;
public void setImageName(String imageName) {
if (this.imageData == null)
this.imageData = new EmbImageDataEntity();
this.imageData.setImageName(imageName);
}
public String getImageName() {
return this.imageData != null ? this.imageData.getImageName() : null;
}
}

View File

@ -15,6 +15,6 @@ public interface LanguageRepository extends JpaRepository<LanguageEntity, Long>
LanguageEntity getByLocale(String locale);
@Query(value = "select e from LanguageEntity e where e.isStandard")
@Query(value = "select e from LanguageEntity e where e.isStandard = true ")
Optional<LanguageEntity> findDefaultLanguage();
}

View File

@ -10,7 +10,6 @@ import java.util.Optional;
@Repository
public interface PropulsionTypeRepository extends JpaRepository<PropulsionTypeEntity, Long> {
Optional<PropulsionTypeEntity> findByTypeId(String propulsionId);
PropulsionTypeEntity getByTypeId(String propulsionId);

View File

@ -2,12 +2,14 @@ package eu.csc.ODPAppVehOwnServer.persistence.services;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.LanguageEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.PropulsionTypeEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.VehicleBrandEntity;
import eu.csc.ODPAppVehOwnServer.persistence.respository.LanguageRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.PropulsionTypeRepository;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@ -61,6 +63,7 @@ public class DataService {
var defLanguage = getDefaultLanguage();
if (!defLanguage.isPresent())
return;
defLanguage.get().setStandard(false);
languageRepository.save(defLanguage.get());
}
@ -80,4 +83,8 @@ public class DataService {
public Optional<LanguageEntity> getDefaultLanguage() {
return languageRepository.findDefaultLanguage();
}
public List<VehicleBrandEntity> getBrands() {
return vehicleService.findAllBrands();
}
}

View File

@ -26,12 +26,11 @@ public class VehicleService {
private PropulsionTypeRepository propulsionTypeRepository;
public List<VehicleBrandEntity> findAllBrands(){
public List<VehicleBrandEntity> findAllBrands() {
return vehicleBrandRepository.findAll();
}
public VehicleBrandEntity addVehicle(String brand, String name){
public VehicleBrandEntity addVehicle(String brand, String name) {
VehicleBrandEntity vb = new VehicleBrandEntity();
vb.setName(name);
@ -45,7 +44,7 @@ public class VehicleService {
}
public VehicleModelEntity addVehicleModel(String brand, String model, String name){
public VehicleModelEntity addVehicleModel(String brand, String model, String name) {
var parent = vehicleBrandRepository.findOneByBrandId(brand);
@ -73,13 +72,13 @@ public class VehicleService {
return vehicleModelRepository.findAllByBrand_BrandId(brand);
}
public List<PropulsionTypeEntity> findAllPropulsionTypes() {
public List<PropulsionTypeEntity> findAllPropulsionTypes() {
return propulsionTypeRepository.findAll();
}
public VehicleBrandEntity addVehicleIfNotExists(String brandId, String name) {
if(vehicleBrandRepository.findOneByBrandId(brandId).isPresent())
if (vehicleBrandRepository.findOneByBrandId(brandId).isPresent())
return vehicleBrandRepository.getOneByBrandId(brandId);
return addVehicle(brandId, name);
@ -90,15 +89,14 @@ public class VehicleService {
var brand = vehicleBrandRepository.findOneByBrandId(brandId);
if(!brand.isPresent())
if (!brand.isPresent())
throw new EntityNotFoundException();
brand.get().setImageName(brandId + "." + fileExtension);
vehicleBrandRepository.save(brand.get());
return brand.get().getImageName();
return brand.get().getImageName();
}
}

17
pom.xml
View File

@ -29,7 +29,8 @@
<tomcat.configuration.url>http://configuration:8080/manager/text</tomcat.configuration.url>
<files.sqls>${project.basedir}/gen</files.sqls>
<asncore.version>0.9.0-SNAPSHOT</asncore.version>
<asncore.version>0.9.1-SNAPSHOT</asncore.version>
</properties>
@ -60,10 +61,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
@ -122,11 +125,6 @@
<optional>true</optional>
</dependency>
<dependency>
<groupId>eu.csc.core</groupId>
<artifactId>asnfilehandler</artifactId>
<version>${asncore.version}</version>
</dependency>
<dependency>
<groupId>eu.csc.core</groupId>
@ -149,6 +147,11 @@
<artifactId>asnfilegenerator</artifactId>
<version>${asncore.version}</version>
</dependency>
<dependency>
<groupId>eu.csc.core</groupId>
<artifactId>asnfilehandler</artifactId>
<version>${asncore.version}</version>
</dependency>
<dependency>
<groupId>eu.csc.core</groupId>

View File

@ -27,6 +27,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
new AntPathRequestMatcher("/login/**"),
new AntPathRequestMatcher("/devices/**"),
new AntPathRequestMatcher("/vehicles/**"),
new AntPathRequestMatcher("/leasgen/**"),
new AntPathRequestMatcher("/languages/**"),
new AntPathRequestMatcher("/signup/**")
);

View File

@ -0,0 +1,77 @@
package eu.csc.ODPAppVehOwnServer.controller.customer;
import asn.GTMaintenance.Lease;
import eu.csc.ODPAppVehOwnServer.controller.AbstractRestController;
import eu.csc.ODPAppVehOwnServer.models.lease.CustomLeaseGenDto;
import eu.csc.ODPAppVehOwnServer.persistence.services.StorageService;
import eu.csc.ODPAppVehOwnServer.persistence.services.storage.FileSystemStorageService;
import eu.csc.ODPAppVehOwnServer.services.LeaseServices;
import eu.csc.asn.Asn1FileBase;
import eu.csc.util.LeaseUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.ByteArrayOutputStream;
@RestController
@RequestMapping(value = "/leasgen")
public class LeaseGeneratorController extends AbstractRestController {
private final StorageService storageService;
private final LeaseServices leaseServices;
private final Log logger = LogFactory.getLog(LeaseGeneratorController.class);
@Autowired
public LeaseGeneratorController(FileSystemStorageService storageService, LeaseServices leaseServices) {
this.storageService = storageService;
this.leaseServices = leaseServices;
}
@PostMapping
@RequestMapping("custom")
public ResponseEntity<Resource> generateLease(@RequestBody CustomLeaseGenDto body) {
Lease lease = new Lease();
lease.setIssuer(body.getIssuer());
lease.setSystems(body.getSystems());
lease.setStartTime(body.getStartTime());
lease.setExpirationTime(body.getExpirationTime());
lease.setUser(body.getUser());
if (body.getToken() != null) {
lease.setToken(body.getToken());
} else {
lease.setToken(LeaseUtils.generateNewToken());
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
try {
logger.info("GENERATING LEASE");
Asn1FileBase.getInstance().encode(lease, stream);
} catch (Exception ex) {
logger.error("LeaseGen Error", ex);
return getErrorOkResponse(ex);
}
ByteArrayResource resource = new ByteArrayResource(stream.toByteArray());
return ResponseEntity.ok()
//.headers(headers)
.contentLength(stream.size())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
}

View File

@ -0,0 +1,16 @@
package eu.csc.ODPAppVehOwnServer.controller.data;
import eu.csc.ODPAppVehOwnServer.controller.AbstractRestController;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//@RestController
//@RequestMapping("/vin")
public class VinController extends AbstractRestController {
}

View File

@ -1,5 +1,6 @@
package eu.csc.ODPAppVehOwnServer.controller.registration;
import eu.csc.ODPAppVehOwnServer.models.MessageDto;
import eu.csc.ODPAppVehOwnServer.models.UserRegistrationDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.UserEntity;
import eu.csc.ODPAppVehOwnServer.persistence.respository.UserRepository;
@ -30,7 +31,7 @@ public class RegistrationController {
// add check for email exists in DB
if (userRepository.existsByEmail(signUpDto.getEmail())) {
return new ResponseEntity<>("Email is already taken!", HttpStatus.BAD_REQUEST);
return new ResponseEntity<>(new MessageDto(1, "Email is already taken!"), HttpStatus.BAD_REQUEST);
}
// create user object
@ -42,6 +43,7 @@ public class RegistrationController {
user.setPhone(signUpDto.getPhone());
user.setStreet(signUpDto.getStreet());
//user.setPostal(signUpDto.getStreet());
userRepository.save(user);

View File

@ -25,6 +25,7 @@ public class MetaDataTester {
Assertions.assertNotNull(resource);
}
@Test
void testLanguages(){
@ -35,4 +36,6 @@ public class MetaDataTester {
System.out.println(items);
}
}

View File

@ -1,4 +1,4 @@
import com.mongodb.assertions.Assertions;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.net.URL;
@ -28,4 +28,11 @@ public class RegExTester {
Assertions.assertNotNull(resource);
}
@Test
void testLocation(){
URL resouce = getClass().getClassLoader().getResource("");
System.out.println(resouce.getPath().toString());
}
}

View File

@ -0,0 +1,42 @@
package eu.csc.ODPAppVehOwnServer.shell;
import eu.csc.ODPAppVehOwnServer.persistence.services.GsonService;
import eu.csc.ODPAppVehOwnServer.services.ExportDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
@ShellComponent
public class ExportCommands extends BaseCommands{
@Autowired
private ExportDataService exportDataService;
@Autowired
private GsonService gsonService;
@ShellMethod(value = "export All", key = {"export_all"})
public String exportAll(){
addMessageString(exportLanguages());
addMessageString(exportBrands());
return getMessageString();
}
@ShellMethod(value = "export Languages", key = {"export_languages"})
public String exportLanguages(){
getStartMessages("Export Languages");
addMessageString(gsonService.getJsonString(exportDataService.getLanguages()));
return getMessageString();
}
@ShellMethod(value = "export exportBrands", key = {"export_brands"})
public String exportBrands(){
getStartMessages("Export Brands");
addMessageString(gsonService.getJsonString(exportDataService.getBrands()));
return getMessageString();
}
}

View File

@ -81,10 +81,10 @@ public class InfoCommands extends BaseCommands {
for (var language : languages
) {
if (language.getId().equals("en"))
dataService.getOrAddLanguage(language.getId(), language.getName(), true);
if (language.getLocale().equals("en"))
dataService.getOrAddLanguage(language.getLocale(), language.getName(), true);
else
dataService.getOrAddLanguage(language.getId(), language.getName());
dataService.getOrAddLanguage(language.getLocale(), language.getName());
}
for (var brand : brands

View File

@ -51,10 +51,10 @@ public class InitCommands
for (var language:languages
) {
addMessageString(" - ADDING LANGUAGE: " + language.toString());
if (language.getId().equals("en"))
dataService.getOrAddLanguage(language.getId(), language.getName(), true);
if (language.getLocale().equals("en"))
dataService.getOrAddLanguage(language.getLocale(), language.getName(), true);
else
dataService.getOrAddLanguage(language.getId(), language.getName());
dataService.getOrAddLanguage(language.getLocale(), language.getName());
}

View File

@ -12,6 +12,7 @@ import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.LanguageEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.VehicleBrandEntity;
import lombok.var;
import org.mapstruct.Mapping;
import java.util.List;
import java.util.stream.Collectors;
@ -65,7 +66,7 @@ public class DtoMapper {
result.setDefault(item.isStandard());
result.setName(item.getName());
result.setId(item.getLocale());
result.setLocale(item.getLocale());
return result;
}
@ -91,4 +92,15 @@ public class DtoMapper {
return result;
}
public VehicleBrandDto mapVehicleBrandToDto(VehicleBrandEntity item) {
var result = new VehicleBrandDto();
result.setBrandId(item.getBrandId());
result.setName(item.getName());
result.setId(item.getId());
result.setImageName(item.getImageName());
return result;
}
}

View File

@ -0,0 +1,40 @@
package eu.csc.ODPAppVehOwnServer.services;
import eu.csc.ODPAppVehOwnServer.mapper.DtoMapper;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.data.LanguageDto;
import eu.csc.ODPAppVehOwnServer.persistence.services.DataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class ExportDataService {
private final DataService dataService;
private final DtoMapper dtoMapper = DtoMapper.getInstance();
@Autowired
public ExportDataService(DataService dataService) {
this.dataService = dataService;
}
public List<LanguageDto> getLanguages(){
return dataService.getLanguages()
.stream().map(dtoMapper::mapLanguageToDto)
.collect(Collectors.toList());
}
public List<VehicleBrandDto> getBrands(){
return dataService.getBrands()
.stream().map(dtoMapper::mapVehicleBrandToDto)
.collect(Collectors.toList());
}
}

View File

@ -16,7 +16,6 @@ import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
@ -33,8 +32,6 @@ public class ImportContentService {
private final VehicleService vehicleService;
@Autowired
public ImportContentService(DataService dataService, DeviceService deviceService, VehicleService vehicleService) {
this.dataService = dataService;
@ -42,7 +39,7 @@ public class ImportContentService {
this.vehicleService = vehicleService;
}
public void importFromFiles(IMetaDataStorage metaDataStorage){
public void importFromFiles(IMetaDataStorage metaDataStorage) {
importLanguages(metaDataStorage.openLanguagesOrEmpty());
@ -50,14 +47,13 @@ public class ImportContentService {
importVehicleBrands(metaDataStorage.openBrandsOrEmpty());
}
public List<PropulsionTypeEntity> importPropulsionTypes(List<PropulsionTypeDto> items) {
List<PropulsionTypeEntity> result = new ArrayList<>();
for (var item:items
) {
for (var item : items
) {
result.add(dataService.getOrCreatePropulsionType(item.getPropulsionId(), item.getName()));
}
@ -68,7 +64,7 @@ public class ImportContentService {
var result = new ArrayList<VehicleBrandEntity>();
for (var item:items
for (var item : items
) {
result.add(importVehicleBrand(item));
}
@ -81,11 +77,11 @@ public class ImportContentService {
return vehicleService.addVehicleIfNotExists(item.getBrandId(), item.getName());
}
public List<DeviceEntity> importDevices(List<DeviceDto> items){
public List<DeviceEntity> importDevices(List<DeviceDto> items) {
var result = new ArrayList<DeviceEntity>();
for (var item:items
for (var item : items
) {
result.add(importDevice(item));
}
@ -93,8 +89,9 @@ public class ImportContentService {
return result;
}
public DeviceEntity importDevice(DeviceDto item){
public DeviceEntity importDevice(DeviceDto item) {
var device = DtoMapper.getInstance().mapDeviceFromDto(item);
return deviceService.getOrAddDevice(device);
}
@ -102,24 +99,22 @@ public class ImportContentService {
public void importLanguages(List<LanguageDto> languages) {
logger.info("IMPORTING LANGUAGES");
var defaultLanguage = languages.stream().filter(x -> x.isDefault()).findFirst();
if (defaultLanguage.isPresent())
{
if (defaultLanguage.isPresent()) {
importLanguage(defaultLanguage.get());
}
for (var language : languages) {
importLanguage(language);
}
throw new UnsupportedOperationException();
for (var language : languages) {
importLanguage(language);
}
}
public LanguageEntity importLanguage(LanguageDto item) {
return dataService.getOrAddLanguage(item.getId(), item.getName(), item.isDefault());
return dataService.getOrAddLanguage(item.getLocale(), item.getName(), item.isDefault());
}
}

View File

@ -0,0 +1,17 @@
package eu.csc.ODPAppVehOwnServer.services;
import asn.GTMaintenance.Lease;
import eu.csc.odpconfigserver.persistence.leases.ASNLeaseEntity;
import org.springframework.stereotype.Service;
@Service
public class LeaseServices {
public Lease generateASNLease(){
throw new UnsupportedOperationException();
}
}

View File

@ -5,13 +5,24 @@ import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import eu.csc.ODPAppVehOwnServer.models.data.LanguageDto;
import eu.csc.ODPAppVehOwnServer.models.data.PropulsionTypeDto;
import eu.csc.ODPAppVehOwnServer.models.lease.CustomLeaseGenDto;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import java.util.List;
public interface DataClientService extends IApiService {
//region leases (tmp)
@POST("api/leasgen/custom")
Call<ResponseBody> customLease(@Body CustomLeaseGenDto dto);
//endregion
//region Vehicle
@GET("/api/vehicles/brands")

View File

@ -7,14 +7,13 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LanguageDto {
private String id;
private String locale;
private String name;
private boolean isDefault = false;
public LanguageDto(String id, String name){
this.id = id;
public LanguageDto(String locale, String name){
this.locale = locale;
this.name = name;
}
}

View File

@ -0,0 +1,25 @@
package eu.csc.ODPAppVehOwnServer.models.lease;
import lombok.Data;
import lombok.ToString;
import java.util.List;
@Data
@ToString
public class CustomLeaseGenDto {
private String token;
private String issuer;
private String user;
private Long startTime;
private Long expirationTime;
private List<String> systems;
}