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