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

Commit

Permalink
Browse files Browse the repository at this point in the history
feat(repository): Preserve a single method to search for events.
  • Loading branch information
brasseld committed Sep 5, 2016
1 parent 47c062a commit be7e483
Show file tree
Hide file tree
Showing 23 changed files with 328 additions and 832 deletions.
2 changes: 1 addition & 1 deletion Jenkinsfile
@@ -1 +1 @@
mavenBuild()
mavenBuild("U", "-DREDIS_HOST=$REDIS_TEST_HOST", "-DREDIS_PORT=$REDIS_TEST_PORT", "clean", "deploy")
49 changes: 35 additions & 14 deletions pom.xml
Expand Up @@ -32,10 +32,13 @@
<name>Gravitee IO - API Management - Repository Redis</name>

<properties>
<jedis.version>2.8.0</jedis.version>
<jedis.version>2.9.0</jedis.version>
<jackson.version>2.5.3</jackson.version>
<gravitee-repository.version>0.13.0</gravitee-repository.version>
<spring-data-redis.version>1.6.4.RELEASE</spring-data-redis.version>
<gravitee-repository.version>0.16.0-SNAPSHOT</gravitee-repository.version>
<spring-data-redis.version>1.7.2.RELEASE</spring-data-redis.version>

<gravitee-repository-test.version>0.3.0-SNAPSHOT</gravitee-repository-test.version>
<maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>
</properties>

<dependencies>
Expand Down Expand Up @@ -102,6 +105,15 @@
<scope>test</scope>
</dependency>

<!-- Test dependencies -->
<dependency>
<groupId>io.gravitee.repository</groupId>
<artifactId>gravitee-repository-test</artifactId>
<version>${gravitee-repository-test.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.github.spullara.redis</groupId>
<artifactId>netty4-server</artifactId>
Expand All @@ -118,17 +130,6 @@
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>RedisManagementSuiteTest.java</include>
<include>RedisRateLimitSuiteTest.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
Expand All @@ -148,6 +149,26 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
<executions>
<execution>
<id>unpack-repository-tests</id>
<phase>test-compile</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>io.gravitee.repository</includeGroupIds>
<includeArtifactIds>gravitee-repository-test</includeArtifactIds>
<includeClassifiers>tests</includeClassifiers>
<outputDirectory>${project.build.directory}/test-classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Expand Up @@ -62,12 +62,34 @@ public Optional<Api> findById(String apiId) throws TechnicalException {
@Override
public Api create(Api api) throws TechnicalException {
RedisApi redisApi = apiRedisRepository.saveOrUpdate(convert(api));

if (api.getMembers() != null) {
api.getMembers().forEach(membership -> {
try {
saveMember(api.getId(), membership.getUser().getUsername(), membership.getMembershipType());
} catch (TechnicalException e) {
e.printStackTrace();
}
});
}

return convert(redisApi);
}

@Override
public Api update(Api api) throws TechnicalException {
RedisApi redisApi = apiRedisRepository.saveOrUpdate(convert(api));

if (api.getMembers() != null) {
api.getMembers().forEach(membership -> {
try {
saveMember(api.getId(), membership.getUser().getUsername(), membership.getMembershipType());
} catch (TechnicalException e) {
e.printStackTrace();
}
});
}

return convert(redisApi);
}

Expand All @@ -88,7 +110,8 @@ public Set<Api> findByMember(String username, MembershipType membershipType, Vis
))))
.map(RedisMembership::getOwner)
.distinct()
.map(api -> convert(apiRedisRepository.find(api)))
.map(apiId -> convert(apiRedisRepository.find(apiId)))
.filter(redisApi -> visibility == null || redisApi.getVisibility() == visibility)
.collect(Collectors.toSet());
} else {
return apiRedisRepository.findByVisibility(visibility.name()).stream()
Expand Down
Expand Up @@ -17,7 +17,6 @@

import io.gravitee.repository.exceptions.TechnicalException;
import io.gravitee.repository.management.api.ApplicationRepository;
import io.gravitee.repository.management.api.UserRepository;
import io.gravitee.repository.management.model.Application;
import io.gravitee.repository.management.model.Membership;
import io.gravitee.repository.management.model.MembershipType;
Expand Down Expand Up @@ -66,12 +65,42 @@ public Optional<Application> findById(String applicationId) throws TechnicalExce
@Override
public Application create(Application application) throws TechnicalException {
RedisApplication redisApplication = applicationRedisRepository.saveOrUpdate(convert(application));

if (application.getMembers() != null) {
application.getMembers().forEach(membership -> {
try {
saveMember(application.getId(), membership.getUser().getUsername(), membership.getMembershipType());
} catch (TechnicalException e) {
e.printStackTrace();
}
});
}

return convert(redisApplication);
}

@Override
public Application update(Application application) throws TechnicalException {
RedisApplication redisApplication = applicationRedisRepository.saveOrUpdate(convert(application));
RedisApplication redisApplication = applicationRedisRepository.find(application.getId());

// Update, but don't change invariant other creation information
redisApplication.setName(application.getName());
redisApplication.setDescription(application.getDescription());
redisApplication.setUpdatedAt(application.getUpdatedAt().getTime());
redisApplication.setType(application.getType());

applicationRedisRepository.saveOrUpdate(redisApplication);

if (application.getMembers() != null) {
application.getMembers().forEach(membership -> {
try {
saveMember(application.getId(), membership.getUser().getUsername(), membership.getMembershipType());
} catch (TechnicalException e) {
e.printStackTrace();
}
});
}

return convert(redisApplication);
}

Expand Down
Expand Up @@ -15,16 +15,21 @@
*/
package io.gravitee.repository.redis.management;

import io.gravitee.common.data.domain.Page;
import io.gravitee.repository.exceptions.TechnicalException;
import io.gravitee.repository.management.api.EventRepository;
import io.gravitee.repository.management.api.search.EventCriteria;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.management.model.Event;
import io.gravitee.repository.management.model.EventType;
import io.gravitee.repository.redis.management.internal.EventRedisRepository;
import io.gravitee.repository.redis.management.model.RedisEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
Expand All @@ -38,26 +43,23 @@ public class RedisEventRepository implements EventRepository {
private EventRedisRepository eventRedisRepository;

@Override
public Set<Event> findByType(List<EventType> eventTypes) {
Set<Event> events = new HashSet<>();
public Page<Event> search(EventCriteria filter, Pageable pageable) {
Page<RedisEvent> pagedEvents = eventRedisRepository.search(filter, pageable);

for(EventType eventType : eventTypes) {
events.addAll(
eventRedisRepository.findByType(eventType.name())
.stream()
.map(this::convert)
.collect(Collectors.toSet()));
}

return events;
}
return new Page<>(
pagedEvents.getContent().stream().map(this::convert).collect(Collectors.toList()),
pagedEvents.getPageNumber(), (int) pagedEvents.getTotalElements(),
pagedEvents.getTotalElements());
}

@Override
public Set<Event> findByProperty(String key, String value) {
return eventRedisRepository.findByProperty(key, value)
public List<Event> search(EventCriteria filter) {
Page<RedisEvent> pagedEvents = eventRedisRepository.search(filter, null);

return pagedEvents.getContent()
.stream()
.map(this::convert)
.collect(Collectors.toSet());
.collect(Collectors.toList());
}

@Override
Expand All @@ -68,7 +70,6 @@ public Optional<Event> findById(String eventId) throws TechnicalException {

@Override
public Event create(Event event) throws TechnicalException {
event.setId(UUID.randomUUID().toString());
RedisEvent redisEvent = eventRedisRepository.saveOrUpdate(convert(event));
return convert(redisEvent);
}
Expand Down
Expand Up @@ -18,6 +18,7 @@
import io.gravitee.repository.exceptions.TechnicalException;
import io.gravitee.repository.management.api.PageRepository;
import io.gravitee.repository.management.model.Page;
import io.gravitee.repository.management.model.PageSource;
import io.gravitee.repository.management.model.PageType;
import io.gravitee.repository.redis.management.internal.PageRedisRepository;
import io.gravitee.repository.redis.management.model.RedisPage;
Expand Down Expand Up @@ -91,6 +92,13 @@ private Page convert(RedisPage redisPage) {
page.setOrder(redisPage.getOrder());
page.setPublished(redisPage.isPublished());
page.setType(PageType.valueOf(redisPage.getType()));

if (redisPage.getSourceType() != null) {
PageSource pageSource = new PageSource();
pageSource.setType(redisPage.getSourceType());
pageSource.setConfiguration(redisPage.getSourceConfiguration());
}

return page;
}

Expand All @@ -106,6 +114,11 @@ private RedisPage convert(Page page) {
redisPage.setOrder(page.getOrder());
redisPage.setPublished(page.isPublished());
redisPage.setType(page.getType().name());

if (page.getSource() != null) {
redisPage.setSourceType(page.getSource().getType());
redisPage.setSourceConfiguration(page.getSource().getConfiguration());
}
return redisPage;
}
}
Expand Up @@ -80,6 +80,12 @@ private User convert(RedisUser redisUser) {
user.setCreatedAt(new Date(redisUser.getCreatedAt()));
user.setUpdatedAt(new Date(redisUser.getUpdatedAt()));
user.setPicture(redisUser.getPicture());
user.setSource(redisUser.getSource());
user.setSourceId(redisUser.getSourceId());

if (redisUser.getLastConnectionAt() != 0) {
user.setLastConnectionAt(new Date(redisUser.getLastConnectionAt()));
}

return user;
}
Expand All @@ -95,7 +101,12 @@ private RedisUser convert(User user) {
redisUser.setCreatedAt(user.getCreatedAt().getTime());
redisUser.setUpdatedAt(user.getUpdatedAt().getTime());
redisUser.setPicture(user.getPicture());
redisUser.setSource(user.getSource());
redisUser.setSourceId(user.getSourceId());

if (user.getLastConnectionAt() != null) {
redisUser.setLastConnectionAt(user.getLastConnectionAt().getTime());
}
return redisUser;
}
}
Expand Up @@ -15,21 +15,20 @@
*/
package io.gravitee.repository.redis.management.internal;

import io.gravitee.common.data.domain.Page;
import io.gravitee.repository.management.api.search.EventCriteria;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.redis.management.model.RedisEvent;

import java.util.Set;

/**
* @author David BRASSELY (brasseld at gmail.com)
* @author David BRASSELY (david at graviteesource.com)
* @author GraviteeSource Team
*/
public interface EventRedisRepository {

RedisEvent find(String event);

Set<RedisEvent> findByType(String eventType);

Set<RedisEvent> findByProperty(String propertyKey, String propertyValue);
Page<RedisEvent> search(EventCriteria filter, Pageable pageable);

RedisEvent saveOrUpdate(RedisEvent event);

Expand Down
Expand Up @@ -17,12 +17,14 @@

import io.gravitee.repository.redis.management.internal.ApiRedisRepository;
import io.gravitee.repository.redis.management.model.RedisApi;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -67,11 +69,18 @@ public Set<RedisApi> findByVisibility(String visibility) {
@Override
public RedisApi saveOrUpdate(RedisApi api) {
RedisApi oldApi = find(api.getId());
redisTemplate.opsForHash().put(REDIS_KEY, api.getId(), api);
redisTemplate.opsForSet().add(REDIS_KEY + ":visibility:" + api.getVisibility(), api.getId());
if (oldApi != null) {
redisTemplate.opsForSet().remove(REDIS_KEY + ":visibility:" + oldApi.getVisibility(), api.getId());
}
redisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
redisTemplate.opsForHash().put(REDIS_KEY, api.getId(), api);
redisTemplate.opsForSet().add(REDIS_KEY + ":visibility:" + api.getVisibility(), api.getId());
if (oldApi != null) {
redisTemplate.opsForSet().remove(REDIS_KEY + ":visibility:" + oldApi.getVisibility(), api.getId());
}

return null;
}
});
return api;
}

Expand Down

0 comments on commit be7e483

Please sign in to comment.