You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/01/29 15:44:29 UTC

[incubator-dlab] branch develop updated: [DLAB-1447] Verification of the endpoint url field (#542)

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

ofuks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/develop by this push:
     new 8b453ea  [DLAB-1447] Verification of the endpoint url field (#542)
8b453ea is described below

commit 8b453ea8eb145ef12200d4f7fac17bb6d55b3803
Author: Pavel Papou <pp...@gmail.com>
AuthorDate: Wed Jan 29 10:44:21 2020 -0500

    [DLAB-1447] Verification of the endpoint url field (#542)
    
    [DLAB-1447] Verification of the endpoint url field
---
 .../java/com/epam/dlab/backendapi/dao/EndpointDAO.java  | 14 ++++++++++++++
 .../com/epam/dlab/backendapi/dao/EndpointDAOImpl.java   | 17 ++++++++++++++++-
 .../backendapi/service/impl/EndpointServiceImpl.java    | 13 ++++++++++++-
 3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java
index bb2597b..f28539e 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java
@@ -24,13 +24,27 @@ import com.epam.dlab.backendapi.domain.EndpointDTO;
 import java.util.List;
 import java.util.Optional;
 
+/**
+ * The interface specifies behaviour for objects, which retrieve, update, remove
+ * the endpoints entities from the DataBase, according passed fields, i.e name, url, status.
+ */
 public interface EndpointDAO {
 	List<EndpointDTO> getEndpoints();
 
 	List<EndpointDTO> getEndpointsWithStatus(String status);
 
+	/*** Retrieve the Endpoint entity according required name
+	 * @param name - the Endpoint regular title
+	 * @return the Optional object
+	 */
 	Optional<EndpointDTO> get(String name);
 
+	/*** Retrieve the Endpoint entity according required Endpoint URL
+	 * @param url - the Endpoint web address
+	 * @return the Optional object
+	 */
+	Optional<EndpointDTO> getEndpointWithUrl(String url);
+
 	void create(EndpointDTO endpointDTO);
 
 	void updateEndpointStatus(String name, String status);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java
index 5dc9e46..02a67bb 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java
@@ -25,14 +25,18 @@ import org.bson.conversions.Bson;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.regex.Pattern;
 
 import static com.mongodb.client.model.Filters.eq;
+import static com.mongodb.client.model.Filters.regex;
+
 
 public class EndpointDAOImpl extends BaseDAO implements EndpointDAO {
 
 	private static final String ENDPOINTS_COLLECTION = "endpoints";
 	private static final String ENDPOINT_NAME_FIELD = "name";
 	private static final String ENDPOINT_STATUS_FIELD = "status";
+	private static final String ENDPOINT_URL_FIELD = "url";
 
 	@Override
 	public List<EndpointDTO> getEndpoints() {
@@ -45,6 +49,11 @@ public class EndpointDAOImpl extends BaseDAO implements EndpointDAO {
 	}
 
 	@Override
+	public Optional<EndpointDTO> getEndpointWithUrl(String url) {
+		return findOne(ENDPOINTS_COLLECTION, endpointUrlCondition(url), EndpointDTO.class);
+	}
+
+	@Override
 	public Optional<EndpointDTO> get(String name) {
 		return findOne(ENDPOINTS_COLLECTION, endpointCondition(name), EndpointDTO.class);
 	}
@@ -66,7 +75,13 @@ public class EndpointDAOImpl extends BaseDAO implements EndpointDAO {
 	}
 
 	private Bson endpointCondition(String name) {
-		return eq(ENDPOINT_NAME_FIELD, name);
+		Pattern endPointName = Pattern.compile(name, Pattern.CASE_INSENSITIVE);
+		return regex(ENDPOINT_NAME_FIELD, endPointName);
+	}
+
+	private Bson endpointUrlCondition(String url) {
+		Pattern endPointUrl = Pattern.compile(url, Pattern.CASE_INSENSITIVE);
+		return regex(ENDPOINT_URL_FIELD, endPointUrl);
 	}
 
 	private Bson endpointStatusCondition(String status) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
index a8e1177..4880fbc 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
@@ -27,6 +27,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -76,8 +77,18 @@ public class EndpointServiceImpl implements EndpointService {
 				.orElseThrow(() -> new ResourceNotFoundException("Endpoint with name " + name + " not found"));
 	}
 
+	/**
+	 * Create new endpoint object in the System.
+	 * The Endpoint objects should contain Unique values of the 'url' and 'name' fields,
+	 * i.e two objects with same URLs should not be created in the system.
+	 * @param userInfo user properties
+	 * @param endpointDTO object with endpoint fields
+	 */
 	@Override
 	public void create(UserInfo userInfo, EndpointDTO endpointDTO) {
+		if(endpointDAO.getEndpointWithUrl(endpointDTO.getUrl()).isPresent()) {
+		    throw new ResourceConflictException("The Endpoint URL with this address already exists in system");
+		}
 		CloudProvider cloudProvider = checkUrl(userInfo, endpointDTO.getUrl());
 		if (!endpointDAO.get(endpointDTO.getName()).isPresent()) {
 			if (!Objects.nonNull(cloudProvider)) {
@@ -87,7 +98,7 @@ public class EndpointServiceImpl implements EndpointService {
 					endpointDTO.getTag(), EndpointDTO.EndpointStatus.ACTIVE, cloudProvider));
 			userRoleDao.updateMissingRoles(cloudProvider);
 		} else {
-			throw new ResourceConflictException("Endpoint with passed name already exist in system");
+			throw new ResourceConflictException("The Endpoint with this name already exists in system");
 		}
 	}
 


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