/** * Map query types. * * @param queryCriteria the query criteria * @param queryBuilder the query builder * @throws Exception the exception */ private void mapQueryTypes(final QueryCriteria queryCriteria, final SQLQueryBuilder queryBuilder) throws Exception { queryBuilder.selectTypes(null); // Searh on nt:base queryBuilder.fromNodeTypes(queryCriteria.getNodeTypes()); ManageableRepository currentRepository = repositoryService.getCurrentRepository(); NodeTypeManager manager = currentRepository.getNodeTypeManager(); // Query all documents for specific content types String[] contentTypes = queryCriteria.getContentTypes(); if ((contentTypes != null && contentTypes.length > 0 && queryCriteria.getKeyword() == null) || queryCriteria.isSearchWebpage()) { mapQuerySpecificNodeTypes(queryCriteria, queryBuilder, manager); return; } List<String> selectedNodeTypes = templateService.getDocumentTemplates(); queryBuilder.openGroup(LOGICAL.AND); queryBuilder.equal("jcr:primaryType", "nt:resource", LOGICAL.NULL); // query on exo:rss-enable nodetypes for title, summary field queryBuilder.equal("jcr:mixinTypes", "exo:rss-enable", LOGICAL.OR); // query on metadata nodetype List<String> publicatioTypes = new ArrayList<String>(4); for (NodeTypeIterator iterator = manager.getAllNodeTypes(); iterator.hasNext(); ) { NodeType nodeType = iterator.nextNodeType(); if (nodeType.isNodeType("publication:webpagesPublication")) { publicatioTypes.add(nodeType.getName()); continue; } if (!nodeType.isNodeType("exo:metadata")) continue; if (nodeType.isMixin()) { queryBuilder.equal("jcr:mixinTypes", nodeType.getName(), LOGICAL.OR); } else { queryBuilder.equal("jcr:primaryType", nodeType.getName(), LOGICAL.OR); } } for (String type : selectedNodeTypes) { NodeType nodetype = manager.getNodeType(type); if (nodetype.isMixin()) { queryBuilder.like("jcr:mixinTypes", type, LOGICAL.OR); } else { queryBuilder.equal("jcr:primaryType", type, LOGICAL.OR); } } queryBuilder.closeGroup(); // unwanted document types: exo:cssFile, exo:jsFile if (excludeMimeTypes.size() < 1) return; queryBuilder.openGroup(LOGICAL.AND_NOT); String[] mimetypes = excludeMimeTypes.toArray(new String[] {}); queryBuilder.equal("jcr:mimeType", mimetypes[0], LOGICAL.NULL); for (int i = 1; i < mimetypes.length; i++) { queryBuilder.equal("jcr:mimeType", mimetypes[i], LOGICAL.OR); } queryBuilder.closeGroup(); // Unwanted document by mixin nodetypes queryBuilder.openGroup(LOGICAL.AND_NOT); queryBuilder.like("jcr:mixinTypes", "exo:cssFile", LOGICAL.NULL); queryBuilder.like("jcr:mixinTypes", "exo:jsFile", LOGICAL.OR); queryBuilder.closeGroup(); }
/** * Gets the site path. * * @param queryCriteria the query criteria * @return the site path * @throws Exception the exception */ private String getSitePath(final QueryCriteria queryCriteria) throws Exception { String siteName = queryCriteria.getSiteName(); if (queryCriteria.isSearchWebpage()) { if ("all".equals(siteName) || siteName == null || siteName.trim().length() == 0) { return "/production/mop:workspace/mop:portalsites"; } return "/production/mop:workspace/mop:portalsites/mop:" + siteName; } String sitePath = null; if (siteName != null) { sitePath = livePortalManagerService.getPortalPathByName(siteName); } else { sitePath = configurationService.getLivePortalsLocation().getPath(); } return sitePath; }
/** * Gets the site path. * * @param queryCriteria the query criteria * @return the site path * @throws Exception the exception */ private String getPath(final QueryCriteria queryCriteria) throws Exception { String siteName = queryCriteria.getSiteName(); // search page path if (queryCriteria.isSearchWebpage()) { if ("all".equals(siteName) || siteName == null || siteName.trim().length() == 0) { return PATH_PORTAL_SITES; } return PATH_PORTAL_SITES.concat("/mop:").concat(siteName); } // search document path if (queryCriteria.getSearchPath() != null) { return queryCriteria.getSearchPath(); } String sitePath = null; if (siteName != null) { sitePath = livePortalManagerService.getPortalPathByName(siteName); } else { sitePath = configurationService.getLivePortalsLocation().getPath(); } return sitePath; }
/* * (non-Javadoc) * @see * org.exoplatform.services.wcm.search.SiteSearchService#searchSiteContents * (org.exoplatform.services.wcm.search.QueryCriteria, * org.exoplatform.services.jcr.ext.common.SessionProvider, int) */ public AbstractPageList<ResultNode> searchSiteContents( SessionProvider sessionProvider, QueryCriteria queryCriteria, int pageSize, boolean isSearchContent) throws Exception { ManageableRepository currentRepository = repositoryService.getCurrentRepository(); NodeLocation location = configurationService.getLivePortalsLocation(); Session session = sessionProvider.getSession(location.getWorkspace(), currentRepository); if (queryCriteria.isSearchWebpage()) { session = sessionProvider.getSession("portal-system", WCMCoreUtils.getRepository()); } QueryManager queryManager = session.getWorkspace().getQueryManager(); long startTime = System.currentTimeMillis(); Query query = createQuery(queryCriteria, queryManager); String suggestion = getSpellSuggestion(queryCriteria.getKeyword(), currentRepository); AbstractPageList<ResultNode> pageList = null; if (LOG.isDebugEnabled()) { LOG.debug("execute query: " + query.getStatement().toLowerCase()); } pageList = PageListFactory.createPageList( query.getStatement(), session.getWorkspace().getName(), query.getLanguage(), IdentityConstants.SYSTEM.equals(session.getUserID()), new NodeFilter(isSearchContent, queryCriteria), new DataCreator(), pageSize, 0, queryCriteria); long queryTime = System.currentTimeMillis() - startTime; pageList.setQueryTime(queryTime); pageList.setSpellSuggestion(suggestion); return pageList; }
/** * Map query types. * * @param queryCriteria the query criteria * @param queryBuilder the query builder * @throws Exception the exception */ private void mapQueryTypes(final QueryCriteria queryCriteria, final SQLQueryBuilder queryBuilder) throws Exception { queryBuilder.selectTypes(null); // Searh on nt:base queryBuilder.fromNodeTypes(queryCriteria.getNodeTypes()); ManageableRepository currentRepository = repositoryService.getCurrentRepository(); NodeTypeManager manager = currentRepository.getNodeTypeManager(); // Query all documents for specific content types String[] contentTypes = queryCriteria.getContentTypes(); if ((contentTypes != null && contentTypes.length > 0 && queryCriteria.getKeyword() == null) || queryCriteria.isSearchWebpage()) { mapQuerySpecificNodeTypes(queryCriteria, queryBuilder, manager); return; } List<String> selectedNodeTypes = (contentTypes != null && contentTypes.length > 0) ? Arrays.asList(contentTypes) : templateService.getDocumentTemplates(); queryBuilder.openGroup(LOGICAL.AND); if (selectedNodeTypes.contains("nt:file")) { queryBuilder.equal("jcr:primaryType", "nt:resource", LOGICAL.NULL); } else { // searching only document, not file. In this case, search nt:resource with // exo:webContentChild mixin queryBuilder.openGroup(null); queryBuilder.equal( NodetypeConstant.JCR_PRIMARY_TYPE, NodetypeConstant.NT_RESOURCE, LOGICAL.NULL); queryBuilder.equal( NodetypeConstant.JCR_MIXIN_TYPES, NodetypeConstant.EXO_WEBCONTENT_CHILD, LOGICAL.AND); queryBuilder.closeGroup(); } // query on exo:rss-enable nodetypes for title, summary field queryBuilder.equal("jcr:mixinTypes", "exo:rss-enable", LOGICAL.OR); for (String type : selectedNodeTypes) { NodeType nodetype = manager.getNodeType(type); if (nodetype.isMixin()) { if (selectedNodeTypes.contains("nt:file") || !NodetypeConstant.EXO_CSS_FILE.equals(type) && !NodetypeConstant.EXO_JS_FILE.equals(type) && !NodetypeConstant.EXO_HTML_FILE.equals(type)) { queryBuilder.like("jcr:mixinTypes", type, LOGICAL.OR); } else { // searching only document, not file. In this case, search nt:resource with // exo:webContentChild mixin queryBuilder.openGroup(LOGICAL.OR); queryBuilder.equal(NodetypeConstant.JCR_MIXIN_TYPES, type, LOGICAL.NULL); queryBuilder.equal( NodetypeConstant.JCR_MIXIN_TYPES, NodetypeConstant.EXO_WEBCONTENT_CHILD, LOGICAL.AND); queryBuilder.closeGroup(); } } else { queryBuilder.equal("jcr:primaryType", type, LOGICAL.OR); } } queryBuilder.closeGroup(); // unwanted document types: exo:cssFile, exo:jsFile if (excludeMimeTypes.size() < 1) return; queryBuilder.openGroup(LOGICAL.AND_NOT); String[] mimetypes = excludeMimeTypes.toArray(new String[] {}); queryBuilder.equal("jcr:mimeType", mimetypes[0], LOGICAL.NULL); for (int i = 1; i < mimetypes.length; i++) { queryBuilder.equal("jcr:mimeType", mimetypes[i], LOGICAL.OR); } queryBuilder.closeGroup(); // Unwanted document by mixin nodetypes queryBuilder.openGroup(LOGICAL.AND_NOT); queryBuilder.like("jcr:mixinTypes", "exo:cssFile", LOGICAL.NULL); queryBuilder.like("jcr:mixinTypes", "exo:jsFile", LOGICAL.OR); queryBuilder.closeGroup(); }