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:51 UTC

[incubator-datalab] branch DATALAB-2999 created (now 1c1fdb8f0)

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

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


      at 1c1fdb8f0 add autocomplete resource

This branch includes the following new commits:

     new 1c1fdb8f0 add autocomplete resource

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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


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

Posted by dy...@apache.org.
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