Skip to content
This repository has been archived by the owner on Jul 29, 2021. It is now read-only.

Commit

Permalink
feat(management): allow to filter by context-path
Browse files Browse the repository at this point in the history
  • Loading branch information
phiz71 authored and ytvnr committed May 4, 2021
1 parent d8a2349 commit aae1a3f
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
20 changes: 18 additions & 2 deletions pom.xml
Expand Up @@ -32,8 +32,9 @@
<name>Gravitee.io APIM - Repository - MongoDB</name>

<properties>
<gravitee-repository.version>3.5.2</gravitee-repository.version>
<gravitee-repository-test.version>3.5.3</gravitee-repository-test.version>
<gravitee-repository.version>3.5.3-SNAPSHOT</gravitee-repository.version>
<gravitee-repository-test.version>3.5.4-SNAPSHOT</gravitee-repository-test.version>
<gravitee-definition.version>1.25.0</gravitee-definition.version>
<embed.mongo.version>2.0.0</embed.mongo.version>
<mongo.version>3.12.0</mongo.version>
<mongodb-driver-reactivestreams.version>1.13.0</mongodb-driver-reactivestreams.version>
Expand All @@ -52,6 +53,21 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>io.gravitee.definition</groupId>
<artifactId>gravitee-definition-jackson</artifactId>
<version>${gravitee-definition.version}</version>
<scope>provided</scope>
</dependency>

<!-- Jackson dependencies -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
Expand Down
Expand Up @@ -15,18 +15,24 @@
*/
package io.gravitee.repository.mongodb.management.internal.api;

import com.fasterxml.jackson.core.JsonProcessingException;
import io.gravitee.common.data.domain.Page;
import io.gravitee.definition.jackson.datatype.GraviteeMapper;
import io.gravitee.definition.model.VirtualHost;
import io.gravitee.repository.management.api.search.ApiCriteria;
import io.gravitee.repository.management.api.search.ApiFieldExclusionFilter;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.mongodb.management.internal.model.ApiMongo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;

import java.util.List;
import java.util.stream.Collectors;

import static org.springframework.data.domain.Sort.Direction.ASC;
import static org.springframework.data.mongodb.core.query.Criteria.where;
Expand All @@ -37,6 +43,8 @@
*/
public class ApiMongoRepositoryImpl implements ApiMongoRepositoryCustom {

private final Logger logger = LoggerFactory.getLogger(ApiMongoRepositoryImpl.class);

@Autowired
private MongoTemplate mongoTemplate;

Expand Down Expand Up @@ -94,6 +102,22 @@ public Page<ApiMongo> search(final ApiCriteria criteria, final Pageable pageable
}

List<ApiMongo> apis = mongoTemplate.find(query, ApiMongo.class);
if (criteria != null && criteria.getContextPath() != null && ! criteria.getContextPath().isEmpty()) {
apis = apis.stream()
.filter(apiMongo -> {
try {
io.gravitee.definition.model.Api apiDefinition = new GraviteeMapper().readValue(apiMongo.getDefinition(), io.gravitee.definition.model.Api.class);
VirtualHost searchedVHost = new VirtualHost();
searchedVHost.setPath(criteria.getContextPath());
return apiDefinition.getProxy().getVirtualHosts().contains(searchedVHost);
} catch (JsonProcessingException e) {
logger.error("Problem occured while parsing api definition", e);
return false;
}
})
.collect(Collectors.toList());
}

long total = mongoTemplate.count(query, ApiMongo.class);

return new Page<>(apis,
Expand Down

0 comments on commit aae1a3f

Please sign in to comment.