diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java index 50eeec850c2b84f4cea92dee0cf4fe7caa8d4740..06bcb5134c79bba156374c04f350425f66921352 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryAuthorQueries.java @@ -203,19 +203,38 @@ public class RepositoryEntryAuthorQueries { String refs = null; if(StringHelper.containsNonWhitespace(params.getIdAndRefs())) { refs = params.getIdAndRefs(); + sb.append(" and (v.externalId=:ref or v.externalRef=:ref or v.softkey=:ref"); if(StringHelper.isLong(refs)) { try { id = Long.parseLong(refs); + sb.append(" or v.key=:vKey or res.resId=:vKey"); } catch (NumberFormatException e) { // } } - sb.append(" and (v.externalId=:ref or v.externalRef=:ref or v.softkey=:ref"); - if(id != null) { - sb.append(" or v.key=:vKey or res.resId=:vKey)"); + sb.append(")"); + } + + //quick search + Long quickId = null; + String quickRefs = null; + String quickText = null; + if(StringHelper.containsNonWhitespace(params.getIdRefsAndTitle())) { + quickRefs = params.getIdRefsAndTitle(); + sb.append(" and (v.externalId=:quickRef or v.externalRef=:quickRef or v.softkey=:quickRef or "); + quickText = PersistenceHelper.makeFuzzyQueryString(quickRefs); + PersistenceHelper.appendFuzzyLike(sb, "v.displayname", "quickText", dbInstance.getDbVendor()); + if(StringHelper.isLong(quickRefs)) { + try { + quickId = Long.parseLong(quickRefs); + sb.append(" or v.key=:quickVKey or res.resId=:quickVKey)"); + } catch (NumberFormatException e) { + // + } } sb.append(")"); } + if(!count) { appendAuthorViewOrderBy(params.getOrderBy(), params.isOrderByAsc(), sb); } @@ -234,6 +253,16 @@ public class RepositoryEntryAuthorQueries { if(refs != null) { dbQuery.setParameter("ref", refs); } + + if(quickId != null) { + dbQuery.setParameter("quickVKey", quickId); + } + if(quickRefs != null) { + dbQuery.setParameter("quickRef", quickRefs); + } + if(quickText != null) { + dbQuery.setParameter("quickText", quickText); + } if (StringHelper.containsNonWhitespace(author)) { // fuzzy author search dbQuery.setParameter("author", author); } diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryLifeIndexer.java b/src/main/java/org/olat/repository/manager/RepositoryEntryLifeIndexer.java index 618bf124518f3b6c8fe7e1842e5002201714fe42..9d13b0f0f641fa94b015aa1c48967dfc993f9552 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryLifeIndexer.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryLifeIndexer.java @@ -34,15 +34,17 @@ import org.olat.search.service.document.RepositoryEntryDocument; import org.olat.search.service.indexer.LifeFullIndexer; import org.olat.search.service.indexer.LifeIndexer; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; /** + * + * The life indexer for the repository entry is disabled. + * It's not used anymore. * * Initial date: 13.03.2014<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -@Service +//@Service public class RepositoryEntryLifeIndexer implements LifeIndexer { private static final OLog log = Tracing.createLoggerFor(RepositoryEntryLifeIndexer.class); private static final int BATCH_SIZE = 100; diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java index bcbea4c31add4cfdd032c6c6c81394c0059259f8..1f734301a57af6cfbbe78f0d0d4db37d6dc15ebd 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java +++ b/src/main/java/org/olat/repository/manager/RepositoryEntryMyCourseQueries.java @@ -267,16 +267,35 @@ public class RepositoryEntryMyCourseQueries { String refs = null; if(StringHelper.containsNonWhitespace(params.getIdAndRefs())) { refs = params.getIdAndRefs(); + sb.append(" and (v.externalId=:ref or v.externalRef=:ref or v.softkey=:ref"); if(StringHelper.isLong(refs)) { try { id = Long.parseLong(refs); + sb.append(" or v.key=:vKey or res.resId=:vKey"); } catch (NumberFormatException e) { // } } - sb.append(" and (v.externalId=:ref or v.externalRef=:ref or v.softkey=:ref"); - if(id != null) { - sb.append(" or v.key=:vKey or res.resId=:vKey)"); + sb.append(")"); + } + + //alt id, refs and title + Long quickId = null; + String quickRefs = null; + String quickText = null; + if(StringHelper.containsNonWhitespace(params.getIdRefsAndTitle())) { + quickRefs = params.getIdRefsAndTitle(); + quickText = PersistenceHelper.makeFuzzyQueryString(quickRefs); + + sb.append(" and (v.externalId=:quickRef or v.externalRef=:quickRef or v.softkey=:quickRef or "); + PersistenceHelper.appendFuzzyLike(sb, "v.displayname", "quickText", dbInstance.getDbVendor()); + if(StringHelper.isLong(quickRefs)) { + try { + quickId = Long.parseLong(quickRefs); + sb.append(" or v.key=:quickVKey or res.resId=:quickVKey"); + } catch (NumberFormatException e) { + // + } } sb.append(")"); } @@ -305,6 +324,16 @@ public class RepositoryEntryMyCourseQueries { if(refs != null) { dbQuery.setParameter("ref", refs); } + if(quickId != null) { + dbQuery.setParameter("quickVKey", quickId); + } + if(quickRefs != null) { + dbQuery.setParameter("quickRef", quickRefs); + } + if(quickText != null) { + dbQuery.setParameter("quickText", quickText); + + } if(StringHelper.containsNonWhitespace(text)) { dbQuery.setParameter("displaytext", text); } diff --git a/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java b/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java index a48d43277f4db23f8ccff16e1edb93ea76afb3a9..4df59e42cc8e8697aa6c3459689a52d37bc4ebcc 100644 --- a/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java +++ b/src/main/java/org/olat/repository/model/SearchAuthorRepositoryEntryViewParams.java @@ -39,6 +39,7 @@ public class SearchAuthorRepositoryEntryViewParams { private boolean ownedResourcesOnly; private String idAndRefs; + private String idRefsAndTitle; private String author; private String displayname; private String description; @@ -61,6 +62,14 @@ public class SearchAuthorRepositoryEntryViewParams { this.idAndRefs = idAndRefs; } + public String getIdRefsAndTitle() { + return idRefsAndTitle; + } + + public void setIdRefsAndTitle(String idRefsAndTitle) { + this.idRefsAndTitle = idRefsAndTitle; + } + public boolean isOwnedResourcesOnly() { return ownedResourcesOnly; } diff --git a/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java b/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java index 38c6c3b2f205363800359519ed99040c71014025..426141ee3f63cf2172d00852b163f18497598307 100644 --- a/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java +++ b/src/main/java/org/olat/repository/model/SearchMyRepositoryEntryViewParams.java @@ -47,6 +47,7 @@ public class SearchMyRepositoryEntryViewParams { private List<Long> repoEntryKeys; private String idAndRefs; + private String idRefsAndTitle; private String author; private String text; @@ -88,6 +89,14 @@ public class SearchMyRepositoryEntryViewParams { this.idAndRefs = idAndRefs; } + public String getIdRefsAndTitle() { + return idRefsAndTitle; + } + + public void setIdRefsAndTitle(String idRefsAndTitle) { + this.idRefsAndTitle = idRefsAndTitle; + } + public String getAuthor() { return author; } diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java index 3bbc32c7f25c47a6e34d4d4c92f2bfede450bf87..191048b3c5d9d1629e7ca5f77b6665d10735301f 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java @@ -26,14 +26,11 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.lucene.queryparser.classic.ParseException; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DefaultResultInfos; import org.olat.core.commons.persistence.ResultInfos; import org.olat.core.commons.persistence.SortKey; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataSourceDelegate; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.repository.RepositoryEntryAuthorView; import org.olat.repository.RepositoryService; @@ -47,10 +44,6 @@ import org.olat.resource.accesscontrol.method.AccessMethodHandler; import org.olat.resource.accesscontrol.model.OLATResourceAccess; import org.olat.resource.accesscontrol.model.PriceMethodBundle; import org.olat.resource.accesscontrol.ui.PriceFormat; -import org.olat.search.QueryException; -import org.olat.search.ServiceNotAvailableException; -import org.olat.search.service.searcher.SearchClient; -import org.olat.search.service.searcher.SearchClientLocal; import org.olat.user.UserManager; /** @@ -60,15 +53,12 @@ import org.olat.user.UserManager; * */ public class AuthoringEntryDataSource implements FlexiTableDataSourceDelegate<AuthoringEntryRow> { - - private static final OLog log = Tracing.createLoggerFor(AuthoringEntryDataSource.class); private final SearchAuthorRepositoryEntryViewParams searchParams; private final ACService acService; private final AccessControlModule acModule; private final UserManager userManager; - private final SearchClient searchClient; private final RepositoryService repositoryService; private final AuthoringEntryDataSourceUIFactory uifactory; private Integer count; @@ -81,7 +71,6 @@ public class AuthoringEntryDataSource implements FlexiTableDataSourceDelegate<Au acService = CoreSpringFactory.getImpl(ACService.class); acModule = CoreSpringFactory.getImpl(AccessControlModule.class); userManager = CoreSpringFactory.getImpl(UserManager.class); - searchClient = CoreSpringFactory.getImpl(SearchClientLocal.class); repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); } @@ -122,18 +111,9 @@ public class AuthoringEntryDataSource implements FlexiTableDataSourceDelegate<Au } if(StringHelper.containsNonWhitespace(query)) { - try { - List<Long> fullTextResults = searchClient.doSearch(query, null, searchParams.getIdentity(), searchParams.getRoles(), 0, 100); - if(fullTextResults.isEmpty()) { - count = new Integer(0); - return new DefaultResultInfos<AuthoringEntryRow>(); - } - searchParams.setRepoEntryKeys(fullTextResults); - } catch (ServiceNotAvailableException | ParseException | QueryException e) { - log.error("", e); - } + searchParams.setIdRefsAndTitle(query); } else { - searchParams.setRepoEntryKeys(null); + searchParams.setIdRefsAndTitle(null); } List<RepositoryEntryAuthorView> views = repositoryService.searchAuthorView(searchParams, firstResult, maxResults); diff --git a/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java b/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java index 6b196c17676839f079deb00e46c474cf91b90358..3b9c94c49b55c6d5bef30ff8f901a01d3b4434e6 100644 --- a/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java +++ b/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java @@ -23,14 +23,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.apache.lucene.queryparser.classic.ParseException; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DefaultResultInfos; import org.olat.core.commons.persistence.ResultInfos; import org.olat.core.commons.persistence.SortKey; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataSourceDelegate; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.core.util.vfs.VFSLeaf; import org.olat.repository.RepositoryEntryMyView; @@ -47,10 +44,6 @@ import org.olat.resource.accesscontrol.method.AccessMethodHandler; import org.olat.resource.accesscontrol.model.OLATResourceAccess; import org.olat.resource.accesscontrol.model.PriceMethodBundle; import org.olat.resource.accesscontrol.ui.PriceFormat; -import org.olat.search.QueryException; -import org.olat.search.ServiceNotAvailableException; -import org.olat.search.service.searcher.SearchClient; -import org.olat.search.service.searcher.SearchClientLocal; /** * @@ -60,15 +53,12 @@ import org.olat.search.service.searcher.SearchClientLocal; */ public class DefaultRepositoryEntryDataSource implements FlexiTableDataSourceDelegate<RepositoryEntryRow> { - private static final OLog log = Tracing.createLoggerFor(DefaultRepositoryEntryDataSource.class); - private final RepositoryEntryDataSourceUIFactory uifactory; private final SearchMyRepositoryEntryViewParams searchParams; private final ACService acService; private final AccessControlModule acModule; - private final SearchClient searchClient; private final RepositoryService repositoryService; private final RepositoryManager repositoryManager; @@ -81,7 +71,6 @@ public class DefaultRepositoryEntryDataSource implements FlexiTableDataSourceDel acService = CoreSpringFactory.getImpl(ACService.class); acModule = CoreSpringFactory.getImpl(AccessControlModule.class); - searchClient = CoreSpringFactory.getImpl(SearchClientLocal.class); repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class); } @@ -132,18 +121,9 @@ public class DefaultRepositoryEntryDataSource implements FlexiTableDataSourceDel } if(StringHelper.containsNonWhitespace(query)) { - try { - List<Long> fullTextResults = searchClient.doSearch(query, null, searchParams.getIdentity(), searchParams.getRoles(), 0, 100); - if(fullTextResults.isEmpty()) { - count = new Integer(0); - return new DefaultResultInfos<RepositoryEntryRow>(); - } - searchParams.setRepoEntryKeys(fullTextResults); - } catch (ServiceNotAvailableException | ParseException | QueryException e) { - log.error("", e); - } + searchParams.setIdRefsAndTitle(query); } else { - searchParams.setRepoEntryKeys(null); + searchParams.setIdRefsAndTitle(null); } List<RepositoryEntryMyView> views = repositoryService.searchMyView(searchParams, firstResult, maxResults);