Skip to content

Commit

Permalink
#57
Browse files Browse the repository at this point in the history
  • Loading branch information
justinhrobbins committed Nov 29, 2014
1 parent 3587877 commit c904b19
Show file tree
Hide file tree
Showing 40 changed files with 474 additions and 147 deletions.
Original file line number Diff line number Diff line change
@@ -1,27 +1,23 @@

package org.robbins.flashcards.facade;

import java.util.List;
import java.util.Set;

import org.robbins.flashcards.dto.FlashCardDto;
import org.robbins.flashcards.dto.TagDto;
import org.robbins.flashcards.exceptions.FlashcardsException;
import org.robbins.flashcards.facade.base.GenericCrudFacade;
import org.springframework.data.domain.PageRequest;

import java.util.List;
import java.util.Set;

public interface FlashcardFacade extends GenericCrudFacade<FlashCardDto>
{

List<FlashCardDto> findByTagsIn(Set<TagDto> tags) throws FlashcardsException;

List<FlashCardDto> findByTagsIn(Set<TagDto> tags, PageRequest page)
List<FlashCardDto> findByTagsIn(final Set<TagDto> tags) throws FlashcardsException;
List<FlashCardDto> findByTagsIn(final Set<TagDto> tags, final PageRequest page)
throws FlashcardsException;

List<FlashCardDto> findByQuestionLike(String question) throws FlashcardsException;

List<FlashCardDto> findByQuestionLike(String question, PageRequest page)
List<FlashCardDto> findByQuestionLike(final String question) throws FlashcardsException;
List<FlashCardDto> findByQuestionLike(final String question, final PageRequest page)
throws FlashcardsException;

FlashCardDto findByQuestion(String question) throws FlashcardsException;
FlashCardDto findByQuestion(final String question) throws FlashcardsException;
List<FlashCardDto> findFlashcardsForTag(final Long tagId, final Set<String> fields) throws FlashcardsException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,14 @@

import org.robbins.flashcards.dto.TagDto;
import org.robbins.flashcards.exceptions.FlashcardsException;
import org.robbins.flashcards.exceptions.RepositoryException;
import org.robbins.flashcards.facade.base.GenericCrudFacade;

import java.util.List;
import java.util.Set;

public interface TagFacade extends GenericCrudFacade<TagDto> {

TagDto findByName(String name) throws FlashcardsException;
TagDto findByName(final String name) throws FlashcardsException;
List<TagDto> findTagsForFlashcard(final Long flashcardId, final Set<String> fields) throws FlashcardsException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ public void put(E entity) {
httpEntity, ResponseEntity.class, uriVariables);
}

E searchSingleEntity(final Map<String, String> uriVariables) {
public E searchSingleEntity(final Map<String, String> uriVariables) {
// set the Authentication header
@SuppressWarnings({ "unchecked", "rawtypes" })
final HttpEntity httpEntity = new HttpEntity(getAuthHeaders());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package org.robbins.flashcards.client;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.robbins.flashcards.client.util.ResourceUrls;
import org.robbins.flashcards.dto.FlashCardDto;
import org.robbins.flashcards.dto.TagDto;
import org.robbins.flashcards.exceptions.FlashcardsException;
import org.robbins.flashcards.exceptions.ServiceException;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component;

import java.util.*;


@Component
public class DefaultFlashcardClient extends AbstractCrudClient<FlashCardDto> implements FlashcardClient {
Expand Down Expand Up @@ -125,4 +122,13 @@ public List<FlashCardDto> findByQuestionLike(final String question, final PageRe
public FlashCardDto findByQuestion(final String question) throws ServiceException {
return findByQuestionLike(question, null).get(0);
}

@Override
public List<FlashCardDto> findFlashcardsForTag(Long tagId, Set<String> fields) throws FlashcardsException {
Map<String, String> uriVariables = new HashMap<String, String>();

uriVariables.put("id", String.valueOf(tagId));

return Arrays.asList(searchEntities(getEntityListUrl(), uriVariables, FlashCardDto[].class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
import org.robbins.flashcards.exceptions.ServiceException;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.*;

@Component
public class DefaultTagClient extends AbstractCrudClient<TagDto> implements TagClient {
Expand Down Expand Up @@ -62,4 +61,13 @@ public TagDto findByName(final String name) throws ServiceException {

return searchSingleEntity(uriVariables);
}

@Override
public List<TagDto> findTagsForFlashcard(final Long flashcardId, final Set<String> fields) {
Map<String, String> uriVariables = new HashMap<String, String>();

uriVariables.put("id", String.valueOf(flashcardId));

return Arrays.asList(searchEntities(getEntityListUrl(), uriVariables, TagDto[].class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,13 @@
import org.robbins.flashcards.exceptions.ServiceException;
import org.robbins.flashcards.facade.base.GenericCrudFacade;

import java.util.Map;

public interface GenericRestCrudFacade<E> extends GenericCrudFacade<E>, GenericClient {

void put(E entity) throws ServiceException;
void update(E entity) throws ServiceException;
E searchSingleEntity(final Map<String, String> uriVariables);
E[] searchEntities(final String url, final Map<String, String> uriVariables,
final Class<E[]> clazz);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,9 @@
public interface FlashCardRepository extends FlashCardsAppRepository<FlashCard, Long> {

List<FlashCard> findByTagsIn(Set<Tag> tags);

List<FlashCard> findByTagsIn(Set<Tag> tags, PageRequest page);

List<FlashCard> findByQuestionLike(String question);

List<FlashCard> findByQuestionLike(String question, PageRequest page);

FlashCard findByQuestion(String question);
List<FlashCard> findByTags_Id(Long tagId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@

import org.robbins.flashcards.model.Tag;

import java.util.List;

public interface TagRepository extends FlashCardsAppRepository<Tag, Long> {

Tag findByName(String name);
List<Tag> findByFlashcards_Id(Long flashcardId);
}
12 changes: 12 additions & 0 deletions FlashCards_Repository/FlashCards_Repository_Jpa/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,18 @@
<scope>runtime</scope>
</dependency>

<!-- JDBC Connection pooling -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
</dependency>

<!-- H2 driver -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>

<!-- test dependencies -->
<dependency>
<groupId>org.robbins.flashcards</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@
public interface FlashCardRepository extends FlashCardsAppRepository<FlashCard, Long> {

List<FlashCard> findByTagsIn(Set<Tag> tags);

List<FlashCard> findByTagsIn(Set<Tag> tags, Pageable page);

List<FlashCard> findByQuestionLike(String question);

List<FlashCard> findByQuestionLike(String question, Pageable page);

FlashCard findByQuestion(String question);
List<FlashCard> findByTags_Id(Long tagId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,11 @@ public long count() {
Query query = getEm().createQuery("SELECT COUNT(*) FROM FlashCard");
return (Long) query.getSingleResult();
}

@Override
public List<FlashCard> findByTags_Id(Long tagId) {
Query query = getEm().createQuery("SELECT f FROM FlashCard f JOIN f.tags t WHERE t.id = :tagId");
query.setParameter("tagId", tagId);
return query.getResultList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
import org.robbins.flashcards.model.Tag;
import org.robbins.flashcards.repository.FlashCardsAppRepository;

import java.util.List;

public interface TagRepository extends FlashCardsAppRepository<Tag, Long> {

Tag findByName(String name);
List<Tag> findByFlashcards_Id(Long flashcardId);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@

package org.robbins.flashcards.repository;

import java.util.List;

import javax.persistence.Query;

import org.robbins.flashcards.model.Tag;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
Expand All @@ -13,6 +9,9 @@
import org.springframework.data.domain.Sort.Order;
import org.springframework.stereotype.Repository;

import javax.persistence.Query;
import java.util.List;

@Repository
public class TagRepositoryImpl extends AbstractCrudRepositoryImpl<Tag> implements
TagRepository {
Expand Down Expand Up @@ -69,4 +68,11 @@ public long count() {
Query query = getEm().createQuery("SELECT COUNT(*) FROM Tag");
return (Long) query.getSingleResult();
}

@Override
public List<Tag> findByFlashcards_Id(Long flashcardId) {
Query query = getEm().createQuery("SELECT t FROM Tag t JOIN t.flashcards f WHERE f.id = :flashcardId");
query.setParameter("flashcardId", flashcardId);
return query.getResultList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@

package org.robbins.flashcards.repository.jpa;

import com.github.springtestdbunit.annotation.DatabaseSetup;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.robbins.flashcards.model.Tag;
import org.robbins.flashcards.repository.TagRepository;
import org.robbins.tests.BaseIntegrationTest;
import org.robbins.tests.IntegrationTest;
import org.springframework.test.context.ContextConfiguration;

import javax.inject.Inject;
import java.util.List;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;

@ContextConfiguration("classpath:test-applicationContext-repository-jpa.xml")
@DatabaseSetup("classpath:test-flashCardsAppRepository.xml")
@Category(IntegrationTest.class)
public class TagRepositoryIT extends BaseIntegrationTest {

@Inject
private TagRepository tagRepository;

@Test
public void findByName_noSuchTag() {
Tag tag = tagRepository.findByName("DOES_NOT_EXIST");
assertThat(tag, is(nullValue()));
}

@Test
public void findByName() {
Tag tag = tagRepository.findByName("tag1");
assertThat(tag, is(instanceOf(Tag.class)));
}

@Test
public void findByFlashCardsId() {
List<Tag> tags = tagRepository.findByFlashcards_Id(1L);
assertThat(tags.size(), is(1));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

<import resource="classpath:applicationContext-repository-jpa-commons.xml" />
<import resource="classpath:test-infrastructure.xml" />

<bean id="auditorAware" class="org.robbins.flashcards.auditing.AuditingAwareUser" />

<context:component-scan base-package="org.robbins.flashcards.repository" />

</beans>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<user UserId="1" EMAIL="email@test.org" LastLoginDate="2013-01-01"
OPENID="my-open-id" CreatedUserId="1" />
<tag TagId="1" TagName="tag1" CreatedUserId="1" />
<tag TagId="2" TagName="tag2" CreatedUserId="1" />
<flashcard FlashCardId="1" Question="question1" Answer="answer1"
CreatedUserId="1" />
<flashcard_tag FlashCardId="1" TagId="1" />
</dataset>
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="org.h2.Driver" />
<property name="jdbcUrl" value="jdbc:h2:mem:flashcardsDb;MVCC=true" />
</bean>

<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="H2" />
<property name="databasePlatform" value="org.hibernate.dialect.H2Dialect" />
</bean>

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

</beans>
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public List<FlashCardDto> getDtos(final List<FlashCard> entities,
throws RepositoryException {
List<FlashCardDto> dtos = new ArrayList<>();
for (FlashCard entity : entities) {
dtos.add(getDto(entity));
dtos.add(getDto(entity, fields));
}
return dtos;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public List<UserDto> getDtos(final List<User> entities, final Set<String> fields
throws RepositoryException {
List<UserDto> dtos = new ArrayList<>();
for (User entity : entities) {
dtos.add(getDto(entity));
dtos.add(getDto(entity, fields));
}
return dtos;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ else if (!StringUtils.isEmpty(sort)) {
entities = getRepository().findAll(entitySort);
}

if (entities == null) {
if (CollectionUtils.isEmpty(entities)) {
return null;
}

Expand Down
Loading

0 comments on commit c904b19

Please sign in to comment.