This is an automated email from the ASF dual-hosted git repository. machristie pushed a commit to branch airavata-v2-refactoring in repository https://gitbox.apache.org/repos/asf/airavata.git
commit 0e7e968bd5f12b88310388cd916ec15f2f22eea1 Author: Marcus Christie <[email protected]> AuthorDate: Wed May 31 16:10:08 2023 -0400 Initial integration with Dozer to map protobuf messages to JPA entities --- modules/airavata-apis/airavata-apis-server/pom.xml | 13 ++++++++-- .../airavata/apis/handlers/ExecutionHandler.java | 24 ++++++------------- .../airavata/apis/mapper/ExperimentMapper.java | 28 ++++++++++++++++++++++ .../apache/airavata/apis/mapper/ObjectMapper.java | 8 +++++++ .../apis/handlers/ExecutionHandlerTest.java | 6 +++-- .../src/main/proto/execution/experiment_stub.proto | 12 +++++----- 6 files changed, 64 insertions(+), 27 deletions(-) diff --git a/modules/airavata-apis/airavata-apis-server/pom.xml b/modules/airavata-apis/airavata-apis-server/pom.xml index b25b9ecee0..05be9af07a 100644 --- a/modules/airavata-apis/airavata-apis-server/pom.xml +++ b/modules/airavata-apis/airavata-apis-server/pom.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.airavata</groupId> @@ -75,6 +74,16 @@ <version>${spring.boot.data.jpa}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>com.github.dozermapper</groupId> + <artifactId>dozer-spring-boot-starter</artifactId> + <version>6.5.2</version> + </dependency> + <dependency> + <groupId>com.github.dozermapper</groupId> + <artifactId>dozer-proto3</artifactId> + <version>6.5.2</version> + </dependency> </dependencies> <properties> <maven.compiler.source>18</maven.compiler.source> diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/handlers/ExecutionHandler.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/handlers/ExecutionHandler.java index 664e460722..7012010e98 100644 --- a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/handlers/ExecutionHandler.java +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/handlers/ExecutionHandler.java @@ -2,18 +2,14 @@ package org.apache.airavata.apis.handlers; import io.grpc.stub.StreamObserver; import org.apache.airavata.api.execution.stubs.Experiment; -import org.apache.airavata.api.execution.stubs.RunConfiguration; import org.apache.airavata.api.gateway.*; import org.apache.airavata.apis.db.entity.ExperimentEntity; -import org.apache.airavata.apis.db.entity.RunConfigurationEntity; import org.apache.airavata.apis.db.repository.ExperimentRepository; +import org.apache.airavata.apis.mapper.ExperimentMapper; import org.apache.airavata.apis.scheduling.MetaScheduler; import org.lognet.springboot.grpc.GRpcService; import org.springframework.beans.factory.annotation.Autowired; -import java.util.ArrayList; -import java.util.List; - @GRpcService public class ExecutionHandler extends ExecutionServiceGrpc.ExecutionServiceImplBase { @@ -23,23 +19,17 @@ public class ExecutionHandler extends ExecutionServiceGrpc.ExecutionServiceImplB @Autowired ExperimentRepository experimentRepository; + @Autowired + ExperimentMapper experimentMapper; + @Override public void registerExperiment(ExperimentRegisterRequest request, StreamObserver<ExperimentRegisterResponse> responseObserver) { Experiment experiment = request.getExperiment(); - ExperimentEntity experimentEntity = new ExperimentEntity(); - experimentEntity.setExperimentName(experiment.getExperimentName()); - experimentEntity.setDescription(experiment.getDescription()); - experimentEntity.setCreationTime(experiment.getCreationTime()); - - List<RunConfigurationEntity> runConfigs = new ArrayList<>(); - for (RunConfiguration rc : experiment.getRunConfigsList()) { - RunConfigurationEntity runConfigurationEntity = new RunConfigurationEntity(); - // Fill - - } - experimentEntity.setRunConfigs(runConfigs); + + ExperimentEntity experimentEntity = experimentMapper.mapModelToEntity(experiment); ExperimentEntity savedExperimentEntity = experimentRepository.save(experimentEntity); + responseObserver.onNext(ExperimentRegisterResponse.newBuilder() .setExperimentId(savedExperimentEntity.getExperimentId()).build()); responseObserver.onCompleted(); diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/mapper/ExperimentMapper.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/mapper/ExperimentMapper.java new file mode 100644 index 0000000000..eb96cdabfe --- /dev/null +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/mapper/ExperimentMapper.java @@ -0,0 +1,28 @@ +package org.apache.airavata.apis.mapper; + +import com.github.dozermapper.core.Mapper; +import org.apache.airavata.api.execution.stubs.Experiment; +import org.apache.airavata.apis.db.entity.ExperimentEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ExperimentMapper implements ObjectMapper<ExperimentEntity, Experiment> { + + @Autowired + Mapper dozerMapper; + + @Override + public Experiment mapEntityToModel(ExperimentEntity entity) { + + return dozerMapper.map(entity, Experiment.class); + } + + @Override + public ExperimentEntity mapModelToEntity(Experiment model) { + ExperimentEntity entity = new ExperimentEntity(); + dozerMapper.map(model, entity); + return entity; + } + +} diff --git a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/mapper/ObjectMapper.java b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/mapper/ObjectMapper.java new file mode 100644 index 0000000000..0f68d325df --- /dev/null +++ b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/mapper/ObjectMapper.java @@ -0,0 +1,8 @@ +package org.apache.airavata.apis.mapper; + +public interface ObjectMapper<E, M> { + + M mapEntityToModel(E entity); + + E mapModelToEntity(M model); +} diff --git a/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java b/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java index 3987e829ea..4cb42d4a70 100644 --- a/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java +++ b/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java @@ -7,12 +7,12 @@ import org.apache.airavata.apis.db.entity.ExperimentEntity; import org.apache.airavata.apis.db.repository.ExperimentRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.context.SpringBootTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -@DataJpaTest +@SpringBootTest public class ExecutionHandlerTest { @Autowired @@ -28,6 +28,7 @@ public class ExecutionHandlerTest { .setCreationTime(System.currentTimeMillis()) .setDescription("Sample Exp") .setExperimentName("Exp Name") + .setGatewayId("gateway-id") .build(); ExperimentRegisterRequest experimentRegisterRequest = ExperimentRegisterRequest.newBuilder() @@ -43,6 +44,7 @@ public class ExecutionHandlerTest { assertEquals(experiment.getCreationTime(), experimentEntity.getCreationTime()); assertEquals(experiment.getDescription(), experimentEntity.getDescription()); assertEquals(experiment.getExperimentName(), experimentEntity.getExperimentName()); + assertEquals(experiment.getGatewayId(), experimentEntity.getGatewayId()); } } diff --git a/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto b/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto index bd87663933..47a4093c41 100644 --- a/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto +++ b/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto @@ -153,13 +153,13 @@ message DataMovementConfiguration { } message Experiment { - string experimentId = 1; - string projectId = 2; - string gatewayId = 3; - string experimentName = 6; - int64 creationTime = 7; + string experiment_id = 1; + string project_id = 2; + string gateway_id = 3; + string experiment_name = 6; + int64 creation_time = 7; string description = 8; - repeated RunConfiguration runConfigs = 9; + repeated RunConfiguration run_configs = 9; } message ExperimentSummaryModel {
