CCM NG/ccm-cms: Fixed some bugs in the AssetRepository

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4672 8810af33-2d31-482b-a856-94f89814c4df
jensp 2017-04-13 09:36:16 +00:00
parent e7a1d68db2
commit d66287322c
4 changed files with 29 additions and 28 deletions

View File

@ -70,11 +70,11 @@ import static org.librecms.CmsConstants.*;
, ,
@NamedQuery(name = "Asset.findByTitle'", @NamedQuery(name = "Asset.findByTitle'",
query = "SELECT a FROM Asset a JOIN a.title.values t " query = "SELECT a FROM Asset a JOIN a.title.values t "
+ "WHERE t LIKE :query") + "WHERE LOWER(t) LIKE CONCAT('%', :title, '%')")
, ,
@NamedQuery(name = "Asset.findByTitleAndType", @NamedQuery(name = "Asset.findByTitleAndType",
query = "SELECT a FROM Asset a " query = "SELECT a FROM Asset a JOIN a.title.values t "
+ "WHERE :title MEMBER OF a.title.values " + "WHERE LOWER(t) LIKE CONCAT('%', :title, '%') "
+ "AND TYPE(a) = :type") + "AND TYPE(a) = :type")
, ,
@NamedQuery( @NamedQuery(
@ -126,12 +126,13 @@ import static org.librecms.CmsConstants.*;
+ "AND TYPE(a) = :type") + "AND TYPE(a) = :type")
, ,
@NamedQuery( @NamedQuery(
name = "Asset.filterByFolderAndNameAndType", name = "Asset.filterByFolderAndTitleAndType",
query = "SELECT a FROM Asset a " query = "SELECT a FROM Asset a "
+ "JOIN a.title.values t "
+ "JOIN a.categories c " + "JOIN a.categories c "
+ "WHERE c.category = :folder " + "WHERE c.category = :folder "
+ "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' "
+ "AND LOWER(a.displayName) LIKE CONCAT(LOWER(:name), '%') " + "AND LOWER(t) LIKE CONCAT('%', LOWER(:title), '%') "
+ "AND TYPE(a) = :type") + "AND TYPE(a) = :type")
, ,
@NamedQuery( @NamedQuery(
@ -205,8 +206,8 @@ public class Asset extends CcmObject {
private Optional<CcmObject> getFolder() { private Optional<CcmObject> getFolder() {
final Optional<Categorization> result = getCategories() final Optional<Categorization> result = getCategories()
.stream() .stream()
.filter(categorization -> CmsConstants.CATEGORIZATION_TYPE_FOLDER .filter(categorization -> CmsConstants.CATEGORIZATION_TYPE_FOLDER.
.equals(categorization.getType())) equals(categorization.getType()))
.findFirst(); .findFirst();
if (result.isPresent()) { if (result.isPresent()) {

View File

@ -353,7 +353,7 @@ public class AssetManager {
} }
if (targetFolder.equals(getAssetFolder(asset).orElse(null))) { if (targetFolder.equals(getAssetFolder(asset).orElse(null))) {
final long number = assetRepo.countFilterByFolderAndName( final long number = assetRepo.countFilterByFolderAndTitle(
targetFolder, String.format("%s_copy", targetFolder, String.format("%s_copy",
asset.getDisplayName())); asset.getDisplayName()));
final long index = number + 1; final long index = number + 1;

View File

@ -195,7 +195,7 @@ public class AssetRepository
final TypedQuery<Asset> query = entityManager.createNamedQuery( final TypedQuery<Asset> query = entityManager.createNamedQuery(
"Asset.findByTitle", Asset.class); "Asset.findByTitle", Asset.class);
query.setParameter("query", String.format("%%%s%%", title)); query.setParameter("title", title);
return query.getResultList(); return query.getResultList();
} }
@ -224,7 +224,7 @@ public class AssetRepository
final TypedQuery<Asset> query = entityManager.createNamedQuery( final TypedQuery<Asset> query = entityManager.createNamedQuery(
"Asset.findByTitle", Asset.class); "Asset.findByTitle", Asset.class);
query.setParameter("query", title); query.setParameter("title", title);
query.setParameter("type", type); query.setParameter("type", type);
return query.getResultList(); return query.getResultList();
@ -291,19 +291,19 @@ public class AssetRepository
* *
* @param folder The {@link Folder} which {@link Asset}s are filtered using * @param folder The {@link Folder} which {@link Asset}s are filtered using
* the provided {@code name}. * the provided {@code name}.
* @param name The string used to fiter the {@link Assets} in the provided * @param title The string used to fiter the {@link Assets} in the provided
* {@code folder}. * {@code folder}.
* *
* @return The number of {@link Asset}s in the provided {@link Folder} which * @return The number of {@link Asset}s in the provided {@link Folder} which
* name starts with the provided string. * name starts with the provided string.
*/ */
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public long countFilterByFolderAndName(final Folder folder, public long countFilterByFolderAndTitle(final Folder folder,
final String name) { final String title) {
final TypedQuery<Long> query = entityManager.createNamedQuery( final TypedQuery<Long> query = entityManager.createNamedQuery(
"Asset.countFilterByFolderAndName", Long.class); "Asset.countFilterByFolderAndTitle", Long.class);
query.setParameter("folder", folder); query.setParameter("folder", folder);
query.setParameter("name", name); query.setParameter("title", title);
return query.getSingleResult(); return query.getSingleResult();
} }

View File

@ -355,7 +355,7 @@ public class AssetRepositoryTest {
@InSequence(500) @InSequence(500)
@UsingDataSet( @UsingDataSet(
"datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml") "datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml")
public void filterAssetByFolderAndName() { public void filterAssetByFolderAndTitle() {
final Folder media = folderRepo.findById(-400L).get(); final Folder media = folderRepo.findById(-400L).get();
final List<Asset> result1 = assetRepo.filterByFolderAndTitle(media, final List<Asset> result1 = assetRepo.filterByFolderAndTitle(media,
@ -363,7 +363,7 @@ public class AssetRepositoryTest {
final List<Asset> result2 = assetRepo.filterByFolderAndTitle(media, final List<Asset> result2 = assetRepo.filterByFolderAndTitle(media,
"photo"); "photo");
assertThat(result1.size(), is(1)); assertThat(result1.size(), is(2));
assertThat(result2.size(), is(0)); assertThat(result2.size(), is(0));
assertThat(result1.get(0).getDisplayName(), is(equalTo("header.png"))); assertThat(result1.get(0).getDisplayName(), is(equalTo("header.png")));
@ -372,18 +372,18 @@ public class AssetRepositoryTest {
/** /**
* Tries to count the {@link Asset}s in a {@link Folder} matching a name * Tries to count the {@link Asset}s in a {@link Folder} matching a name
* pattern by using * pattern by using
* {@link AssetRepository#countFilterByFolderAndName(org.librecms.contentsection.Folder, java.lang.String)}. * {@link AssetRepository#countFilterByFolderAndTitle(org.librecms.contentsection.Folder, java.lang.String)}.
*/ */
@Test @Test
@InSequence(510) @InSequence(510)
@UsingDataSet( @UsingDataSet(
"datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml") "datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml")
public void countFilterAssetByFolderAndName() { public void countFilterAssetByFolderAndTitle() {
final Folder media = folderRepo.findById(-400L).get(); final Folder media = folderRepo.findById(-400L).get();
assertThat(assetRepo.countFilterByFolderAndName(media, "hea"), assertThat(assetRepo.countFilterByFolderAndTitle(media, "hea"),
is(1L)); is(2L));
assertThat(assetRepo.countFilterByFolderAndName(media, "photo"), assertThat(assetRepo.countFilterByFolderAndTitle(media, "photo"),
is(0L)); is(0L));
} }
@ -449,7 +449,7 @@ public class AssetRepositoryTest {
@InSequence(600) @InSequence(600)
@UsingDataSet( @UsingDataSet(
"datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml") "datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml")
public void filterAssetsByFolderAndTypeAndName() { public void filterAssetsByFolderAndTypeAndTitle() {
final Folder media = folderRepo.findById(-400L).get(); final Folder media = folderRepo.findById(-400L).get();
final List<Asset> result1 = assetRepo.filterByFolderAndTypeAndTitle( final List<Asset> result1 = assetRepo.filterByFolderAndTypeAndTitle(
@ -457,7 +457,7 @@ public class AssetRepositoryTest {
final List<Asset> result2 = assetRepo.filterByFolderAndTypeAndTitle( final List<Asset> result2 = assetRepo.filterByFolderAndTypeAndTitle(
media, File.class, "hea"); media, File.class, "hea");
assertThat(result1.size(), is(1)); assertThat(result1.size(), is(2));
assertThat(result2.size(), is(0)); assertThat(result2.size(), is(0));
} }
@ -471,12 +471,12 @@ public class AssetRepositoryTest {
@InSequence(610) @InSequence(610)
@UsingDataSet( @UsingDataSet(
"datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml") "datasets/org/librecms/contentsection/AssetRepositoryTest/data.xml")
public void countFilterAssetsByFolderAndTypeAndName() { public void countFilterAssetsByFolderAndTypeAndTitle() {
final Folder media = folderRepo.findById(-400L).get(); final Folder media = folderRepo.findById(-400L).get();
assertThat(assetRepo.countFilterByFolderAndTypeAndTitle( assertThat(assetRepo.countFilterByFolderAndTypeAndTitle(
media, Image.class, "hea"), media, Image.class, "hea"),
is(1L)); is(2L));
assertThat(assetRepo.countFilterByFolderAndTypeAndTitle( assertThat(assetRepo.countFilterByFolderAndTypeAndTitle(
media, File.class, "hea"), media, File.class, "hea"),
is(0L)); is(0L));