Ejemplo n.º 1
0
 /**
  * Map query term.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  */
 private void mapFulltextQueryTearm(
     final QueryCriteria queryCriteria, final SQLQueryBuilder queryBuilder, LOGICAL condition) {
   String keyword = queryCriteria.getKeyword();
   if (keyword == null || keyword.length() == 0) return;
   QueryTermHelper queryTermHelper = new QueryTermHelper();
   String queryTerm = null;
   if (isEnabledFuzzySearch) {
     if (keyword.contains("*") || keyword.contains("?") || keyword.contains("~")) {
       queryTerm = queryTermHelper.contains(keyword).buildTerm();
     } else {
       queryTerm =
           queryTermHelper.contains(keyword).allowFuzzySearch(fuzzySearchIndex).buildTerm();
     }
   } else {
     keyword = keyword.replace("~", "\\~");
     keyword = keyword.replace("*", "\\*");
     keyword = keyword.replace("?", "\\?");
     queryTerm = queryTermHelper.contains(keyword).buildTerm();
   }
   String[] props = queryCriteria.getFulltextSearchProperty();
   if (props == null || props.length == 0 || QueryCriteria.ALL_PROPERTY_SCOPE.equals(props[0])) {
     queryBuilder.contains(null, queryTerm, LOGICAL.NULL);
   } else {
     queryBuilder.contains(props[0], queryTerm, LOGICAL.NULL);
     for (int i = 1; i < props.length; i++) {
       queryBuilder.contains(props[i], queryTerm, condition);
     }
   }
 }
Ejemplo n.º 2
0
 /**
  * Map query term.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  */
 private void mapFulltextQueryTearm(
     final QueryCriteria queryCriteria, final SQLQueryBuilder queryBuilder, LOGICAL condition) {
   String queryString = queryCriteria.getKeyword();
   if (queryString == null || queryString.length() == 0) return;
   int count = 0;
   for (String keyword : getKeywords(queryString, queryCriteria.isMultiplePhaseSearch())) {
     keyword = keyword.trim();
     if (StringUtils.isBlank(keyword)) continue;
     QueryTermHelper queryTermHelper = new QueryTermHelper();
     String queryTerm = null;
     if (isEnabledFuzzySearch) {
       if (keyword.contains("*") || keyword.contains("?") || keyword.contains("~")) {
         queryTerm = queryTermHelper.contains(keyword).buildTerm();
       } else {
         queryTerm =
             queryTermHelper.contains(keyword).allowFuzzySearch(fuzzySearchIndex).buildTerm();
       }
     } else {
       keyword = keyword.replace("~", "\\~");
       keyword = keyword.replace("*", "\\*");
       keyword = keyword.replace("?", "\\?");
       queryTerm = queryTermHelper.contains(keyword).buildTerm();
     }
     String[] props = queryCriteria.getFulltextSearchProperty();
     if (props == null || props.length == 0 || QueryCriteria.ALL_PROPERTY_SCOPE.equals(props[0])) {
       queryBuilder.contains(null, queryTerm, (count++ == 0 ? LOGICAL.NULL : LOGICAL.OR));
     } else {
       queryBuilder.contains(props[0], queryTerm, (count++ == 0 ? LOGICAL.NULL : LOGICAL.OR));
       for (int i = 1; i < props.length; i++) {
         queryBuilder.contains(props[i], queryTerm, condition);
       }
     }
   }
 }
    private QueryCriteria queryCriteriaCase(
        AttributeQueryCriteria criteria, List<AttributeReference.Key> arg) {
      final AttributeReference basicAttRef;
      if (arg.isEmpty()) {
        basicAttRef = criteria.getAttributeReference();
      } else {
        basicAttRef = criteria.getAttributeReference().prepend(arg);
      }

      DisjunctionBuilder disjunctionBuilder = new DisjunctionBuilder();

      disjunctionBuilder.add(criteria);

      for (int i = 0; i < basicAttRef.getKeys().size(); i++) {
        AttributeReference existsAttRef = basicAttRef.subReference(0, i + 1);

        List<AttributeReference.Key> newArg =
            basicAttRef.getKeys().subList(i + 1, basicAttRef.getKeys().size());

        QueryCriteria plainNewBody = criteria.accept(QUERY_CRITERIA_FACTORY, newArg);

        QueryCriteria newBody =
            plainNewBody.accept(this, Collections.<AttributeReference.Key>emptyList());

        disjunctionBuilder.add(new ExistsQueryCriteria(existsAttRef, newBody));
      }

      return disjunctionBuilder.build();
    }
Ejemplo n.º 4
0
 private Query createSearchPageQuery(QueryCriteria queryCriteria, QueryManager queryManager)
     throws Exception {
   SQLQueryBuilder queryBuilder = new SQLQueryBuilder();
   List<String> mopPages =
       this.searchPageByTitle(queryCriteria.getSiteName(), queryCriteria.getKeyword());
   List<QueryProperty> queryProps = new ArrayList<QueryCriteria.QueryProperty>();
   for (String page : mopPages) {
     QueryProperty prop = queryCriteria.new QueryProperty();
     prop.setName("mop:page");
     prop.setValue(page);
     prop.setComparisonType(COMPARISON_TYPE.EQUAL);
     queryProps.add(prop);
   }
   QueryProperty prop = queryCriteria.new QueryProperty();
   prop.setName("exo:name");
   prop.setValue("mop:" + queryCriteria.getKeyword().toLowerCase());
   queryProps.add(prop);
   queryCriteria.setQueryMetadatas(queryProps.toArray(new QueryProperty[queryProps.size()]));
   mapQueryTypes(queryCriteria, queryBuilder);
   if (queryCriteria.isFulltextSearch()) {
     mapQueryPath(queryCriteria, queryBuilder);
     mapFulltextQueryTearm(queryCriteria, queryBuilder, LOGICAL.OR);
   } else {
     searchByNodeName(queryCriteria, queryBuilder);
   }
   mapCategoriesCondition(queryCriteria, queryBuilder);
   mapDatetimeRangeSelected(queryCriteria, queryBuilder);
   mapMetadataProperties(queryCriteria, queryBuilder, LOGICAL.OR);
   orderBy(queryCriteria, queryBuilder);
   String queryStatement = queryBuilder.createQueryStatement();
   Query query = queryManager.createQuery(queryStatement, Query.SQL);
   return query;
 }
Ejemplo n.º 5
0
 /**
  * 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();
 }
    @Override
    public QueryCriteria visit(NotQueryCriteria criteria, List<AttributeReference.Key> arg) {
      QueryCriteria subQuery = criteria.getSubQueryCriteria().accept(this, arg);

      if (subQuery.equals(criteria.getSubQueryCriteria())) {
        return criteria;
      }
      return new NotQueryCriteria(subQuery);
    }
    @Override
    public QueryCriteria visit(NotQueryCriteria criteria, Void arg) {
      QueryCriteria subQuery = criteria.getSubQueryCriteria().accept(this, null);

      if (subQuery.equals(criteria.getSubQueryCriteria())) {
        return criteria;
      }

      return new NotQueryCriteria(subQuery);
    }
    @Override
    public QueryCriteria visit(OrQueryCriteria criteria, List<AttributeReference.Key> arg) {
      QueryCriteria subQuery1 = criteria.getSubQueryCriteria1().accept(this, arg);
      QueryCriteria subQuery2 = criteria.getSubQueryCriteria2().accept(this, arg);

      if (subQuery1.equals(criteria.getSubQueryCriteria1())
          && subQuery2.equals(criteria.getSubQueryCriteria2())) {
        return criteria;
      }

      return new OrQueryCriteria(subQuery1, subQuery2);
    }
    @Override
    public QueryCriteria visit(OrQueryCriteria criteria, Void arg) {
      QueryCriteria subQuery1 = criteria.getSubQueryCriteria1().accept(this, null);
      QueryCriteria subQuery2 = criteria.getSubQueryCriteria2().accept(this, null);

      if (subQuery1.equals(criteria.getSubQueryCriteria1())
          && subQuery2.equals(criteria.getSubQueryCriteria2())) {
        return criteria;
      }

      return new OrQueryCriteria(subQuery1, subQuery2);
    }
Ejemplo n.º 10
0
 /**
  * Order by.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  */
 private void orderBy(final QueryCriteria criteria, final SQLQueryBuilder queryBuilder) {
   String sortBy = "jcr:score";
   String orderBy = "desc";
   // sort by
   if (BaseSearchServiceConnector.sortByTitle.equals(criteria.getSortBy())) {
     sortBy = NodetypeConstant.EXO_TITLE;
   } else if (BaseSearchServiceConnector.sortByDate.equals(criteria.getSortBy())) {
     sortBy = NodetypeConstant.EXO_LAST_MODIFIED_DATE;
   }
   if (StringUtils.isNotBlank(criteria.getOrderBy())) {
     orderBy = criteria.getOrderBy();
   }
   queryBuilder.orderBy(sortBy, "desc".equals(orderBy) ? ORDERBY.DESC : ORDERBY.ASC);
 }
Ejemplo n.º 11
0
  public AbstractPageList<ResultNode> searchPageContents(
      SessionProvider sessionProvider,
      QueryCriteria queryCriteria,
      int pageSize,
      boolean isSearchContent)
      throws Exception {
    ManageableRepository currentRepository = repositoryService.getCurrentRepository();
    Session session = sessionProvider.getSession("portal-system", currentRepository);
    QueryManager queryManager = session.getWorkspace().getQueryManager();
    long startTime = System.currentTimeMillis();
    Query query = createSearchPageQuery(queryCriteria, queryManager);
    String suggestion = getSpellSuggestion(queryCriteria.getKeyword(), currentRepository);
    if (LOG.isDebugEnabled()) {
      LOG.debug("execute query: " + query.getStatement().toLowerCase());
    }
    AbstractPageList<ResultNode> pageList =
        PageListFactory.createPageList(
            query.getStatement(),
            session.getWorkspace().getName(),
            query.getLanguage(),
            true,
            new PageNodeFilter(),
            new PageDataCreator(),
            pageSize,
            0);

    long queryTime = System.currentTimeMillis() - startTime;
    pageList.setQueryTime(queryTime);
    pageList.setSpellSuggestion(suggestion);
    return pageList;
  }
Ejemplo n.º 12
0
 /**
  * Map query specific node types.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  * @param nodeTypeManager the node type manager
  * @throws Exception the exception
  */
 private void mapQuerySpecificNodeTypes(
     final QueryCriteria queryCriteria,
     final SQLQueryBuilder queryBuilder,
     final NodeTypeManager nodeTypeManager)
     throws Exception {
   String[] contentTypes = queryCriteria.getContentTypes();
   NodeType fistType = nodeTypeManager.getNodeType(contentTypes[0]);
   queryBuilder.openGroup(LOGICAL.AND);
   if (fistType.isMixin()) {
     queryBuilder.like("jcr:mixinTypes", contentTypes[0], LOGICAL.NULL);
   } else {
     queryBuilder.equal("jcr:primaryType", contentTypes[0], LOGICAL.NULL);
   }
   if (contentTypes.length > 1) {
     for (int i = 1; i < contentTypes.length; i++) {
       String type = contentTypes[i];
       NodeType nodetype = nodeTypeManager.getNodeType(type);
       if (nodetype.isMixin()) {
         queryBuilder.like("jcr:mixinTypes", type, LOGICAL.OR);
       } else {
         queryBuilder.equal("jcr:primaryType", type, LOGICAL.OR);
       }
     }
   }
   queryBuilder.closeGroup();
   // Remove some specific mimtype
   queryBuilder.openGroup(LOGICAL.AND_NOT);
   queryBuilder.like("jcr:mixinTypes", "exo:cssFile", LOGICAL.NULL);
   queryBuilder.like("jcr:mixinTypes", "exo:jsFile", LOGICAL.OR);
   queryBuilder.closeGroup();
 }
Ejemplo n.º 13
0
 /**
  * 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;
 }
Ejemplo n.º 14
0
 protected Node getNodeToCheckState(Node node) throws Exception {
   Node displayNode = node;
   if (node.getPath().contains("web contents/site artifacts")) {
     return null;
   }
   if (displayNode.isNodeType("nt:resource")) {
     displayNode = node.getParent();
   }
   if (displayNode.isNodeType("exo:htmlFile")) {
     Node parent = displayNode.getParent();
     if (queryCriteria.isSearchWebContent()) {
       if (parent.isNodeType("exo:webContent")) return parent;
       return null;
     }
     if (parent.isNodeType("exo:webContent")) return null;
     return displayNode;
   }
   /*
   if(queryCriteria.isSearchWebContent()) {
     if(!queryCriteria.isSearchDocument()) {
       if(!displayNode.isNodeType("exo:webContent"))
         return null;
     }
     if(queryCriteria.isSearchWebpage()) {
       if (!displayNode.isNodeType("publication:webpagesPublication"))
         return null;
     }
   } else if(queryCriteria.isSearchWebpage()) {
       if (queryCriteria.isSearchDocument()) {
         return displayNode;
       } else if (!displayNode.isNodeType("publication:webpagesPublication"))
         return null;
   }
   */
   String[] contentTypes = queryCriteria.getContentTypes();
   if (contentTypes != null && contentTypes.length > 0) {
     String primaryNodeType = displayNode.getPrimaryNodeType().getName();
     if (!ArrayUtils.contains(contentTypes, primaryNodeType)) return null;
   }
   return displayNode;
 }
Ejemplo n.º 15
0
 /**
  * Map categories condition.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  */
 private void mapCategoriesCondition(QueryCriteria queryCriteria, SQLQueryBuilder queryBuilder) {
   String[] categoryUUIDs = queryCriteria.getCategoryUUIDs();
   if (categoryUUIDs == null) return;
   queryBuilder.openGroup(LOGICAL.AND);
   queryBuilder.like("exo:category", categoryUUIDs[0], LOGICAL.NULL);
   if (categoryUUIDs.length > 1) {
     for (int i = 1; i < categoryUUIDs.length; i++) {
       queryBuilder.like("exo:category", categoryUUIDs[i], LOGICAL.OR);
     }
   }
   queryBuilder.closeGroup();
 }
Ejemplo n.º 16
0
 /**
  * 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;
 }
Ejemplo n.º 17
0
 /**
  * @return return the JCR path of the mop:page nodes that have gtn:name (page's title) containing
  *     the given specified <code>keyword</code>
  * @throws Exception
  */
 private List<String> searchPageByTitle(String siteName, String keyword) throws Exception {
   SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
   ManageableRepository currentRepository = repositoryService.getCurrentRepository();
   Session session = sessionProvider.getSession("portal-system", currentRepository);
   QueryManager queryManager = session.getWorkspace().getQueryManager();
   QueryCriteria queryCriteria = new QueryCriteria();
   queryCriteria.setSiteName(siteName);
   queryCriteria.setKeyword(keyword);
   queryCriteria.setSearchWebpage(true);
   Query query = createSearchPageByTitleQuery(queryCriteria, queryManager);
   if (LOG.isDebugEnabled()) {
     LOG.debug("execute query: " + query.getStatement().toLowerCase());
   }
   List<String> pageList =
       PageListFactory.createPageList(
           query.getStatement(),
           session.getWorkspace().getName(),
           query.getLanguage(),
           true,
           new PageTitleDataCreator());
   return pageList;
 }
Ejemplo n.º 18
0
  /*
   * (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;
  }
Ejemplo n.º 19
0
 /**
  * Map datetime range selected.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  */
 private void mapDatetimeRangeSelected(
     final QueryCriteria queryCriteria, final SQLQueryBuilder queryBuilder) {
   DATE_RANGE_SELECTED selectedDateRange = queryCriteria.getDateRangeSelected();
   if (selectedDateRange == null) return;
   if (DATE_RANGE_SELECTED.CREATED == selectedDateRange) {
     DatetimeRange createdDateRange = queryCriteria.getCreatedDateRange();
     queryBuilder.betweenDates(
         "exo:dateCreated",
         createdDateRange.getFromDate(),
         createdDateRange.getToDate(),
         LOGICAL.AND);
   } else if (DATE_RANGE_SELECTED.MODIFIDED == selectedDateRange) {
     DatetimeRange modifiedDateRange = queryCriteria.getLastModifiedDateRange();
     queryBuilder.betweenDates(
         "exo:dateModified",
         modifiedDateRange.getFromDate(),
         modifiedDateRange.getToDate(),
         LOGICAL.AND);
   } else if (DATE_RANGE_SELECTED.START_PUBLICATION == selectedDateRange) {
     throw new UnsupportedOperationException();
   } else if (DATE_RANGE_SELECTED.END_PUBLICATION == selectedDateRange) {
     throw new UnsupportedOperationException();
   }
 }
Ejemplo n.º 20
0
 /**
  * Search site content.
  *
  * @param queryCriteria the query criteria
  * @param queryManager the query manager
  * @return the query result
  * @throws Exception the exception
  */
 private Query createQuery(QueryCriteria queryCriteria, QueryManager queryManager)
     throws Exception {
   SQLQueryBuilder queryBuilder = new SQLQueryBuilder();
   mapQueryTypes(queryCriteria, queryBuilder);
   if (queryCriteria.isFulltextSearch()) {
     mapQueryPath(queryCriteria, queryBuilder);
     mapFulltextQueryTearm(queryCriteria, queryBuilder, LOGICAL.OR);
   } else {
     searchByNodeName(queryCriteria, queryBuilder);
   }
   mapCategoriesCondition(queryCriteria, queryBuilder);
   mapDatetimeRangeSelected(queryCriteria, queryBuilder);
   mapMetadataProperties(queryCriteria, queryBuilder, LOGICAL.AND);
   orderBy(queryCriteria, queryBuilder);
   String queryStatement = queryBuilder.createQueryStatement();
   Query query = queryManager.createQuery(queryStatement, Query.SQL);
   return query;
 }
Ejemplo n.º 21
0
 protected Node getNodeToCheckState(Node node) throws Exception {
   Node displayNode = node;
   if (displayNode.isNodeType("nt:resource")) {
     displayNode = node.getParent();
   }
   // return exo:webContent when exo:htmlFile found
   if (displayNode.isNodeType("exo:htmlFile")) {
     Node parent = displayNode.getParent();
     if (parent.isNodeType("exo:webContent")) return parent;
     return displayNode;
   }
   //
   String[] contentTypes = queryCriteria.getContentTypes();
   if (contentTypes != null && contentTypes.length > 0) {
     String primaryNodeType = displayNode.getPrimaryNodeType().getName();
     if (!ArrayUtils.contains(contentTypes, primaryNodeType)) return null;
   }
   return displayNode;
 }
Ejemplo n.º 22
0
 @Override
 public Node filterNodeToDisplay(Node node) {
   try {
     Node displayNode = getNodeToCheckState(node);
     if (displayNode == null) return null;
     if (isSearchContent) return displayNode;
     NodeLocation nodeLocation = NodeLocation.getNodeLocationByNode(displayNode);
     WCMComposer wcmComposer = WCMCoreUtils.getService(WCMComposer.class);
     HashMap<String, String> filters = new HashMap<String, String>();
     filters.put(
         WCMComposer.FILTER_MODE,
         queryCriteria.isLiveMode() ? WCMComposer.MODE_LIVE : WCMComposer.MODE_EDIT);
     return wcmComposer.getContent(
         nodeLocation.getWorkspace(),
         nodeLocation.getPath(),
         filters,
         WCMCoreUtils.getSystemSessionProvider());
   } catch (Exception e) {
     return null;
   }
 }
Ejemplo n.º 23
0
 /**
  * Map metadata properties.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  */
 private void mapMetadataProperties(
     final QueryCriteria queryCriteria, SQLQueryBuilder queryBuilder, LOGICAL condition) {
   QueryProperty[] queryProperty = queryCriteria.getQueryMetadatas();
   if (queryProperty == null || queryProperty.length == 0) return;
   queryBuilder.openGroup(condition);
   if (queryProperty[0].getComparisonType() == COMPARISON_TYPE.EQUAL) {
     queryBuilder.equal(queryProperty[0].getName(), queryProperty[0].getValue(), LOGICAL.NULL);
   } else {
     queryBuilder.like(queryProperty[0].getName(), queryProperty[0].getValue(), LOGICAL.NULL);
   }
   if (queryProperty.length > 1) {
     for (int i = 1; i < queryProperty.length; i++) {
       if (queryProperty[i].getComparisonType() == COMPARISON_TYPE.EQUAL) {
         queryBuilder.equal(queryProperty[i].getName(), queryProperty[i].getValue(), LOGICAL.OR);
       } else {
         queryBuilder.like(queryProperty[i].getName(), queryProperty[i].getValue(), LOGICAL.OR);
       }
     }
   }
   queryBuilder.closeGroup();
 }
Ejemplo n.º 24
0
  /**
   * @param queryCriteria
   * @param queryManager
   * @return
   * @throws Exception
   */
  private Query createSearchPageByTitleQuery(QueryCriteria queryCriteria, QueryManager queryManager)
      throws Exception {
    SQLQueryBuilder queryBuilder = new SQLQueryBuilder();

    // select *
    queryBuilder.selectTypes(null);

    // from mop:page node type
    queryBuilder.fromNodeTypes(new String[] {"mop:page"});

    mapQueryPath(queryCriteria, queryBuilder);

    queryCriteria.setFulltextSearchProperty(new String[] {"gtn:name"});

    mapFulltextQueryTearm(queryCriteria, queryBuilder, LOGICAL.OR);

    String queryStatement = queryBuilder.createQueryStatement();
    Query query = queryManager.createQuery(queryStatement, Query.SQL);

    return query;
  }
  public static QueryCriteria translate(QueryCriteria queryCriteria) {
    QueryCriteria withArrayAlternative = queryCriteria.accept(ARRAY_REFERENCE_CREATOR, null);

    return withArrayAlternative.accept(
        OR_EXISTS_CREATOR, Collections.<AttributeReference.Key>emptyList());
  }
Ejemplo n.º 26
0
 /**
  * Search by node name.
  *
  * @param queryCriteria the query criteria
  * @param queryBuilder the query builder
  * @throws Exception the exception
  */
 private void searchByNodeName(
     final QueryCriteria queryCriteria, final SQLQueryBuilder queryBuilder) throws Exception {
   queryBuilder.queryByNodeName(getSitePath(queryCriteria), queryCriteria.getKeyword());
 }
Ejemplo n.º 27
0
 /**
  * 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();
 }