You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by dy...@apache.org on 2022/09/16 13:26:52 UTC

[incubator-datalab] 01/01: add autocomplete resource

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

dyankiv pushed a commit to branch DATALAB-2999
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit 1c1fdb8f0306e5b8da4ebdd2d1f2124cbdbf29cd
Author: Denys Yankiv <de...@gmail.com>
AuthorDate: Fri Sep 16 16:25:31 2022 +0300

    add autocomplete resource
---
 .../datalab/backendapi/SelfServiceApplication.java | 22 +---------
 .../epam/datalab/backendapi/dao/UserGroupDAO.java  |  2 +
 .../datalab/backendapi/dao/UserGroupDAOImpl.java   | 10 ++++-
 .../datalab/backendapi/dao/UserSettingsDAO.java    | 11 ++++-
 .../backendapi/resources/AutoCompleteResource.java | 47 ++++++++++++++++++++++
 .../backendapi/service/AutoCompleteService.java    | 47 ++++++++++++++++++++++
 6 files changed, 115 insertions(+), 24 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/SelfServiceApplication.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/SelfServiceApplication.java
index 08ebf1aab..35e19b710 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/SelfServiceApplication.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/SelfServiceApplication.java
@@ -27,26 +27,7 @@ import com.epam.datalab.backendapi.dropwizard.listeners.MongoStartupListener;
 import com.epam.datalab.backendapi.dropwizard.listeners.RestoreHandlerStartupListener;
 import com.epam.datalab.backendapi.healthcheck.MongoHealthCheck;
 import com.epam.datalab.backendapi.modules.ModuleFactory;
-import com.epam.datalab.backendapi.resources.ApplicationSettingResource;
-import com.epam.datalab.backendapi.resources.AuditResource;
-import com.epam.datalab.backendapi.resources.BackupResource;
-import com.epam.datalab.backendapi.resources.EndpointResource;
-import com.epam.datalab.backendapi.resources.EnvironmentResource;
-import com.epam.datalab.backendapi.resources.ExploratoryResource;
-import com.epam.datalab.backendapi.resources.GitCredsResource;
-import com.epam.datalab.backendapi.resources.ImageExploratoryResource;
-import com.epam.datalab.backendapi.resources.InfrastructureInfoResource;
-import com.epam.datalab.backendapi.resources.InfrastructureTemplateResource;
-import com.epam.datalab.backendapi.resources.KeycloakResource;
-import com.epam.datalab.backendapi.resources.LibExploratoryResource;
-import com.epam.datalab.backendapi.resources.OdahuResource;
-import com.epam.datalab.backendapi.resources.ProjectResource;
-import com.epam.datalab.backendapi.resources.SchedulerJobResource;
-import com.epam.datalab.backendapi.resources.SystemInfoResource;
-import com.epam.datalab.backendapi.resources.UserGroupResource;
-import com.epam.datalab.backendapi.resources.UserRoleResource;
-import com.epam.datalab.backendapi.resources.UserSettingsResource;
-import com.epam.datalab.backendapi.resources.ChangePropertiesResource;
+import com.epam.datalab.backendapi.resources.*;
 import com.epam.datalab.backendapi.resources.callback.BackupCallback;
 import com.epam.datalab.backendapi.resources.callback.CheckInactivityCallback;
 import com.epam.datalab.backendapi.resources.callback.ComputationalCallback;
@@ -200,6 +181,7 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 	    jersey.register(injector.getInstance(OdahuResource.class));
 	    jersey.register(injector.getInstance(OdahuCallback.class));
 	    jersey.register(injector.getInstance(ChangePropertiesResource.class));
+	    jersey.register(injector.getInstance(AutoCompleteResource.class));
     }
 
     private void disableGzipHandlerForGuacamoleServlet(Server server) {
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAO.java
index 1411bf941..75df7d279 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAO.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAO.java
@@ -30,4 +30,6 @@ public interface UserGroupDAO {
     Set<String> getUserGroups(String user);
 
     Set<String> getUsers(String group);
+
+    Set<String> getGroupNames(String name);
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAOImpl.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAOImpl.java
index 4fa04887c..26eaae80b 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserGroupDAOImpl.java
@@ -28,8 +28,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.epam.datalab.backendapi.dao.MongoCollections.USER_GROUPS;
-import static com.mongodb.client.model.Filters.elemMatch;
-import static com.mongodb.client.model.Filters.eq;
+import static com.mongodb.client.model.Filters.*;
 
 @Singleton
 public class UserGroupDAOImpl extends BaseDAO implements UserGroupDAO {
@@ -65,4 +64,11 @@ public class UserGroupDAOImpl extends BaseDAO implements UserGroupDAO {
                 .map(document -> (List<String>) document.get(USERS_FIELD))
                 .orElseThrow(() -> new DatalabException(String.format("Group %s not found", group))));
     }
+
+    @Override
+    public Set<String> getGroupNames(String name) {
+        return stream(find(USER_GROUPS, regex(ID, name,"i")))
+                .map(document -> document.getString(ID))
+                .collect(Collectors.toSet());
+    }
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserSettingsDAO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserSettingsDAO.java
index ab8552ce3..dad4c0fa4 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserSettingsDAO.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/UserSettingsDAO.java
@@ -28,10 +28,11 @@ import org.bson.Document;
 
 
 import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import static com.epam.datalab.backendapi.dao.MongoCollections.USER_SETTINGS;
-import static com.mongodb.client.model.Filters.and;
-import static com.mongodb.client.model.Filters.eq;
+import static com.mongodb.client.model.Filters.*;
 import static com.mongodb.client.model.Projections.*;
 import static com.mongodb.client.model.Updates.set;
 
@@ -95,4 +96,10 @@ public class UserSettingsDAO extends BaseDAO {
                 true);
     }
 
+    public Set<String> getUserNames(String name){
+        return stream(find(USER_SETTINGS, regex(ID, name,"i")))
+                .map(document -> document.getString(ID))
+                .collect(Collectors.toSet());
+    }
+
 }
\ No newline at end of file
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/AutoCompleteResource.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/AutoCompleteResource.java
new file mode 100644
index 000000000..551a54414
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/AutoCompleteResource.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 com.epam.datalab.backendapi.resources;
+
+import com.epam.datalab.auth.UserInfo;
+import com.epam.datalab.backendapi.service.AutoCompleteService;
+import com.google.inject.Inject;
+import io.dropwizard.auth.Auth;
+
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+@Path("/autocomplete")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class AutoCompleteResource {
+    private final AutoCompleteService autoCompleteService;
+
+    @Inject
+    public AutoCompleteResource(AutoCompleteService autoCompleteService) {
+        this.autoCompleteService = autoCompleteService;
+    }
+
+    @GET
+    @Path("/users_groups")
+    public Response getUsersAndGroups(@Auth UserInfo userInfo, @NotNull @QueryParam("value") String value){
+        return Response.ok(autoCompleteService.getUsersAndGroupsForSharing(value)).build();
+    }
+}
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/AutoCompleteService.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/AutoCompleteService.java
new file mode 100644
index 000000000..5a06c3c87
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/AutoCompleteService.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 com.epam.datalab.backendapi.service;
+
+import com.epam.datalab.backendapi.dao.UserGroupDAO;
+import com.epam.datalab.backendapi.dao.UserSettingsDAO;
+import com.epam.datalab.backendapi.resources.dto.SharedWithDTO;
+import com.google.inject.Inject;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class AutoCompleteService {
+    public final UserGroupDAO userGroupDAO;
+    public final UserSettingsDAO userSettingsDAO;
+
+    @Inject
+    public AutoCompleteService(UserGroupDAO userGroupDAO, UserSettingsDAO userSettingsDAO) {
+        this.userGroupDAO = userGroupDAO;
+        this.userSettingsDAO = userSettingsDAO;
+    }
+
+    public Set<SharedWithDTO> getUsersAndGroupsForSharing(String name){
+        Set<SharedWithDTO> sharedWithDTOS = new HashSet<>();
+        sharedWithDTOS.addAll(userSettingsDAO.getUserNames(name).stream().map(s -> new SharedWithDTO(SharedWithDTO.Type.USER, s)).collect(Collectors.toSet()));
+        sharedWithDTOS.addAll(userGroupDAO.getGroupNames(name).stream().map(s -> new SharedWithDTO(SharedWithDTO.Type.GROUP, s)).collect(Collectors.toSet()));
+        return sharedWithDTOS;
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org