This is an automated email from the ASF dual-hosted git repository.

lahirujayathilake pushed a commit to branch cybershuttle-staging
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/cybershuttle-staging by this 
push:
     new 226d9629c3 initialize user and changes to rhub service classes
226d9629c3 is described below

commit 226d9629c307bb1f970783ea2ee859c06d9c34d8
Author: lahiruj <[email protected]>
AuthorDate: Mon Mar 31 14:35:51 2025 -0400

    initialize user and changes to rhub service classes
---
 .../research/service/config/AuthzTokenFilter.java  |   8 ++
 .../service/controller/ResearchHubController.java  |   5 +-
 ...jectController.java => ResourceController.java} |  21 ++---
 .../research/service/handlers/ProjectHandler.java  | 101 ---------------------
 .../service/handlers/ResearchHubHandler.java       |   2 +-
 .../{ProjectHandler.java => ResourceHandler.java}  |  11 +--
 .../research/service/handlers/UserHandler.java     |  51 +++++++++--
 .../research/service/model/entity/Session.java     |   7 ++
 .../research/service/model/entity/User.java        |  10 ++
 .../service/model/repo/UserRepository.java         |   4 +
 .../src/main/proto/research-service.proto          |   1 +
 11 files changed, 92 insertions(+), 129 deletions(-)

diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
index a1f46007e2..b8d281b47c 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/config/AuthzTokenFilter.java
@@ -25,6 +25,7 @@ import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import org.apache.airavata.model.security.AuthzToken;
+import org.apache.airavata.research.service.handlers.UserHandler;
 import org.apache.airavata.research.service.model.UserContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,9 +43,15 @@ public class AuthzTokenFilter extends OncePerRequestFilter {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(AuthzTokenFilter.class);
 
+    private final UserHandler userHandler;
+
     @Value("${cybershuttle.hub.url}")
     private String csHubUrl;
 
+    public AuthzTokenFilter(UserHandler userHandler) {
+        this.userHandler = userHandler;
+    }
+
     @Override
     protected void doFilterInternal(HttpServletRequest request, 
HttpServletResponse response, FilterChain filterChain) throws ServletException, 
IOException {
 
@@ -69,6 +76,7 @@ public class AuthzTokenFilter extends OncePerRequestFilter {
             authzToken.setClaimsMap(claimsMap);
 
             UserContext.setAuthzToken(authzToken);
+            userHandler.initializeUser(UserContext.username());
         } catch (Exception e) {
             LOGGER.error("Invalid authorization data", e);
             response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid 
authorization data");
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResearchHubController.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResearchHubController.java
index 04e40858e1..38eab2f9ee 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResearchHubController.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResearchHubController.java
@@ -27,6 +27,7 @@ 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.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.net.URI;
@@ -45,8 +46,8 @@ public class ResearchHubController {
     }
 
     @GetMapping("/project/{projectId}")
-    public ResponseEntity<?> resolveRHubUrl(@PathVariable("projectId") String 
projectId) {
-        String spawnUrl = rHubHandler.spinRHubSession(projectId);
+    public ResponseEntity<?> resolveRHubUrl(@PathVariable("projectId") String 
projectId, @RequestParam("sessionName") String sessionName) {
+        String spawnUrl = rHubHandler.spinRHubSession(projectId, sessionName);
 
         LOGGER.info("Redirecting user to spawn URL: {}", spawnUrl);
         return 
ResponseEntity.status(HttpStatus.FOUND).location(URI.create(spawnUrl)).build();
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResourceController.java
similarity index 82%
rename from 
modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
rename to 
modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResourceController.java
index 884d92af0e..b82025cd56 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ProjectController.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/controller/ResourceController.java
@@ -31,45 +31,44 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.web.bind.annotation.*;
 
-import org.apache.airavata.research.service.handlers.ProjectHandler;
+import org.apache.airavata.research.service.handlers.ResourceHandler;
 
 import org.springframework.http.ResponseEntity;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 @RestController
 @RequestMapping("/api/v1/rf/project-management")
 @Tag(name = "Project", description = "The Project API")
-public class ProjectController {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ProjectController.class);
+public class ResourceController {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ResourceController.class);
 
 
     @org.springframework.beans.factory.annotation.Autowired
-    private ProjectHandler projectHandler;
+    private ResourceHandler resourceHandler;
 
     @PostMapping("/dataset")
     public ResponseEntity<ResourceResponse> createDatasetResource(@RequestBody 
DatasetResource datasetResource) {
-        ResourceResponse response = 
projectHandler.createResource(datasetResource, ResourceTypeEnum.DATASET);
+        ResourceResponse response = 
resourceHandler.createResource(datasetResource, ResourceTypeEnum.DATASET);
         return ResponseEntity.ok(response);
     }
 
     @PostMapping("/notebook")
     public ResponseEntity<ResourceResponse> 
createNotebookResource(@RequestBody NotebookResource notebookResource) {
-        ResourceResponse response = 
projectHandler.createResource(notebookResource, ResourceTypeEnum.NOTEBOOK);
+        ResourceResponse response = 
resourceHandler.createResource(notebookResource, ResourceTypeEnum.NOTEBOOK);
         return ResponseEntity.ok(response);
     }
 
     @PostMapping("/repository")
     public ResponseEntity<ResourceResponse> 
createRepositoryResource(@RequestBody RepositoryResource repositoryResource) {
-        ResourceResponse response = 
projectHandler.createResource(repositoryResource, ResourceTypeEnum.REPOSITORY);
+        ResourceResponse response = 
resourceHandler.createResource(repositoryResource, ResourceTypeEnum.REPOSITORY);
         return ResponseEntity.ok(response);
     }
 
     @PostMapping("/model")
     public ResponseEntity<ResourceResponse> createModelResource(@RequestBody 
ModelResource modelResource) {
-        ResourceResponse response = 
projectHandler.createResource(modelResource, ResourceTypeEnum.MODEL);
+        ResourceResponse response = 
resourceHandler.createResource(modelResource, ResourceTypeEnum.MODEL);
         return ResponseEntity.ok(response);
     }
 
@@ -80,7 +79,7 @@ public class ProjectController {
     )
     @GetMapping(value = "/resources/{id}")
     public ResponseEntity<ResourceResponse> 
getResource(@PathVariable(value="id") String id) {
-        return ResponseEntity.ok(projectHandler.getResourceById(id));
+        return ResponseEntity.ok(resourceHandler.getResourceById(id));
     }
 
     @Operation(
@@ -104,7 +103,7 @@ public class ProjectController {
                 typeList.add(DatasetResource.class);
             }
         }
-        Page<ResourceResponse> response = 
projectHandler.getAllResources(pageNumber, pageSize, typeList);
+        Page<ResourceResponse> response = 
resourceHandler.getAllResources(pageNumber, pageSize, typeList);
 
         return ResponseEntity.ok(response);
     }
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
index 224dc95235..7bea3e254e 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
@@ -18,114 +18,13 @@
  */
 package org.apache.airavata.research.service.handlers;
 
-import org.apache.airavata.research.service.ResponseTypes.ResourceResponse;
-import org.apache.airavata.research.service.enums.ResourceTypeEnum;
-import org.apache.airavata.research.service.model.entity.DatasetResource;
-import org.apache.airavata.research.service.model.entity.ModelResource;
-import org.apache.airavata.research.service.model.entity.NotebookResource;
-import org.apache.airavata.research.service.model.entity.RepositoryResource;
-import org.apache.airavata.research.service.model.entity.Resource;
-import org.apache.airavata.research.service.model.entity.Tag;
-import org.apache.airavata.research.service.model.entity.User;
-import org.apache.airavata.research.service.model.repo.ResourceRepository;
-import org.apache.airavata.research.service.model.repo.TagRepository;
-import org.apache.airavata.research.service.model.repo.UserRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-
 @Service
 public class ProjectHandler {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ProjectHandler.class);
 
-    @Autowired
-    private UserRepository userRepository;
-
-    @Autowired
-    private TagRepository tagRepository;
-
-    @Autowired
-    ResourceRepository resourceRepository;
-
-    public void initializeResource(Resource resource) {
-        Set<User> userSet = new HashSet<>();
-        for (User u: resource.getAuthors()) {
-            Optional<User> fetchedUser = userRepository.findById(u.getId());
-            if (fetchedUser.isEmpty()) {
-                throw new RuntimeException("User not found: " + u.getId());
-            }
-            userSet.add(fetchedUser.get());
-        }
-
-        HashSet<Tag> tags = new HashSet<>();
-        for (Tag t: resource.getTags()) {
-            String tagValue = t.getValue();
-            Tag fetchedTag = tagRepository.findByValue(tagValue);
-            if (fetchedTag == null) {
-                fetchedTag = tagRepository.save(t);
-            }
-            tags.add(fetchedTag);
-        }
-        resource.setAuthors(userSet);
-        resource.setTags(tags);
-    }
-
-    public ResourceResponse createResource(Resource resource, ResourceTypeEnum 
type) {
-        ResourceResponse response = new ResourceResponse();
-
-        initializeResource(resource);
-        response.setResource(resourceRepository.save(resource));
-        response.setType(type);
-
-        return response;
-    }
-
-    public ResourceResponse resourceToResponse(Resource resource) {
-        ResourceResponse response = new ResourceResponse();
-        response.setResource(resource);
-
-        if (resource instanceof DatasetResource) {
-            response.setType(ResourceTypeEnum.DATASET);
-        } else if (resource instanceof NotebookResource) {
-            response.setType(ResourceTypeEnum.NOTEBOOK);
-        } else if (resource instanceof RepositoryResource) {
-            response.setType(ResourceTypeEnum.REPOSITORY);
-        } else if (resource instanceof ModelResource) {
-            response.setType(ResourceTypeEnum.MODEL);
-        } else {
-            throw new RuntimeException("Unknown resource type: " + 
resource.getClass().getName());
-        }
-
-        return response;
-    }
-
-    public ResourceResponse getResourceById(String id)
-    {
-        // Your logic to fetch the resource by ID
-        Optional<Resource> opResource = resourceRepository.findById(id);
-
-        if (opResource.isEmpty()) {
-            throw new RuntimeException("Resource not found: " + id);
-        }
-
-        Resource resource = opResource.get();
-        return resourceToResponse(resource);
-    }
-
-    public Page<ResourceResponse> getAllResources(int pageNumber, int 
pageSize, List<Class<? extends Resource>> typeList) {
-        Pageable pageable = PageRequest.of(pageNumber, pageSize);
-        Page<Resource> resources = resourceRepository.findAllByTypes(typeList, 
pageable);
-        return resources.map(this::resourceToResponse);
-    }
-
 }
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
index eae2cb1b11..01d8cc01fb 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResearchHubHandler.java
@@ -45,7 +45,7 @@ public class ResearchHubHandler {
         this.sessionHandler = sessionHandler;
     }
 
-    public String spinRHubSession(String projectId) {
+    public String spinRHubSession(String projectId, String sessionName) {
         // TODO fix the conflict of Project vs Resource
         // TODO extract the data using the projectId
         String gitUrl = "https://github.com/AllenInstitute/bmtk-workshop.git";;
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResourceHandler.java
similarity index 96%
copy from 
modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
copy to 
modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResourceHandler.java
index 224dc95235..c07c28aafa 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ProjectHandler.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/ResourceHandler.java
@@ -44,9 +44,9 @@ import java.util.Optional;
 import java.util.Set;
 
 @Service
-public class ProjectHandler {
+public class ResourceHandler {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ProjectHandler.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ResourceHandler.class);
 
     @Autowired
     private UserRepository userRepository;
@@ -59,7 +59,7 @@ public class ProjectHandler {
 
     public void initializeResource(Resource resource) {
         Set<User> userSet = new HashSet<>();
-        for (User u: resource.getAuthors()) {
+        for (User u : resource.getAuthors()) {
             Optional<User> fetchedUser = userRepository.findById(u.getId());
             if (fetchedUser.isEmpty()) {
                 throw new RuntimeException("User not found: " + u.getId());
@@ -68,7 +68,7 @@ public class ProjectHandler {
         }
 
         HashSet<Tag> tags = new HashSet<>();
-        for (Tag t: resource.getTags()) {
+        for (Tag t : resource.getTags()) {
             String tagValue = t.getValue();
             Tag fetchedTag = tagRepository.findByValue(tagValue);
             if (fetchedTag == null) {
@@ -109,8 +109,7 @@ public class ProjectHandler {
         return response;
     }
 
-    public ResourceResponse getResourceById(String id)
-    {
+    public ResourceResponse getResourceById(String id) {
         // Your logic to fetch the resource by ID
         Optional<Resource> opResource = resourceRepository.findById(id);
 
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
index 2f2ab3cadb..e984a53f08 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/handlers/UserHandler.java
@@ -1,20 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.airavata.research.service.handlers;
 
-import org.springframework.stereotype.Service;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.apache.airavata.research.service.model.repo.UserRepository;
-
-import org.apache.airavata.research.service.model.entity.User;
-
 import org.apache.airavata.research.CreateUserRequest;
+import org.apache.airavata.research.service.model.entity.User;
+import org.apache.airavata.research.service.model.repo.UserRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.Date;
 
 @Service
 public class UserHandler {
-    @Autowired
-    private UserRepository userRepository;
 
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(UserHandler.class);
+
+    private final UserRepository userRepository;
+
+    public UserHandler(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
 
     public User createUser(CreateUserRequest userRequest) {
         if (userRepository.existsByEmail(userRequest.getEmail())) {
@@ -22,6 +44,7 @@ public class UserHandler {
         }
 
         User user = new User();
+        user.setUsername(userRequest.getUserName());
         user.setFirstName(userRequest.getFirstName());
         user.setLastName(userRequest.getLastName());
         user.setEmail(userRequest.getEmail());
@@ -47,4 +70,16 @@ public class UserHandler {
         return userRepository.findByEmail(email);
     }
 
+    public void initializeUser(String username) {
+        userRepository.findByUsername(username).ifPresentOrElse(
+                user -> LOGGER.info("User {} is already registered.", 
username),
+                () -> {
+                    // TODO initialize this using the airavata userprofile
+                    User newUser = new User(username, "CHANGE_ME", 
"CHANGE_ME", username);
+                    userRepository.save(newUser);
+                    LOGGER.info("Initialized new user with username {}.", 
username);
+                }
+        );
+    }
+
 }
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
index e5c8a86c3a..a436d03b43 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/Session.java
@@ -65,6 +65,13 @@ public class Session {
     @LastModifiedDate
     private Date updatedAt;
 
+    public Session() {
+    }
+
+    public Session(String sessionName, User user) {
+        this.sessionName = sessionName;
+        this.user = user;
+    }
 
     public String getId() {
         return id;
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
index 3a362bd5b3..e1b4b59746 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/entity/User.java
@@ -66,6 +66,16 @@ public class User {
     @Column(nullable = true)
     private String avatar;
 
+    public User() {
+    }
+
+    public User(String username, String firstName, String lastName, String 
email) {
+        this.username = username;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.email = email;
+    }
+
     public String getId() {
         return id;
     }
diff --git 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/UserRepository.java
 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/UserRepository.java
index b0ee4f21be..fd822074fd 100644
--- 
a/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/UserRepository.java
+++ 
b/modules/research-framework/research-service/src/main/java/org/apache/airavata/research/service/model/repo/UserRepository.java
@@ -21,8 +21,12 @@ package org.apache.airavata.research.service.model.repo;
 import org.apache.airavata.research.service.model.entity.User;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.Optional;
+
 public interface UserRepository extends JpaRepository<User, String> {
 
+    Optional<User> findByUsername(String username);
+
     boolean existsByEmail(String email);
 
     User findByEmail(String email);
diff --git 
a/modules/research-framework/research-service/src/main/proto/research-service.proto
 
b/modules/research-framework/research-service/src/main/proto/research-service.proto
index ccab060223..702a41a41b 100644
--- 
a/modules/research-framework/research-service/src/main/proto/research-service.proto
+++ 
b/modules/research-framework/research-service/src/main/proto/research-service.proto
@@ -11,6 +11,7 @@ service ResearchService {
 }
 
 message CreateUserRequest {
+  string userName = 1;
   string firstName = 2;
   string lastName = 3;
   string email = 4;

Reply via email to