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 {

Reply via email to