public Object objectByNamedQuery(SearchParameters sp) {
    if (sp == null || !sp.hasNamedQuery()) {
      throw new IllegalStateException(
          "Invalid search template provided: could not determine which namedQuery to use");
    }

    Query query = entityManager.createNamedQuery(sp.getNamedQuery());
    String queryString = getQueryString(query);

    // append select count if needed
    if (queryString != null
        && queryString.toLowerCase().startsWith("from")
        && !queryString.toLowerCase().contains("count(")) {
      query = recreateQuery(query, "select count(*) " + queryString);
    }

    setQueryParameters(query, sp);

    log.debug("objectNamedQuery : {}", sp.toString());

    // execute
    Object result = query.getSingleResult();

    if (log.isDebugEnabled()) {
      log.debug(
          "{} returned a {} object",
          sp.getNamedQuery(),
          result == null ? "null" : result.getClass());
      if (result instanceof Number) {
        log.debug("{} returned a number with value : {}", sp.getNamedQuery(), result);
      }
    }

    return result;
  }
示例#2
0
  public static void main(String[] args) {
    SearchParameters sps = new SearchParameters();
    sps.setIndexID(66L);

    sps.addFulltextField("Title", "科技");
    SearchResult sr = ArticleIndexer.search(sps);
    System.out.println(sr.Data);
  }
示例#3
0
  public static SearchResult search(Mapx map) {
    SearchParameters sps = new SearchParameters();
    String site = map.getString("site");
    String id = map.getString("id");
    String catalog = map.getString("catalog");
    if (StringUtil.isEmpty(catalog)) {
      catalog = map.getString("Catalog");
    }
    String order = map.getString("order");
    String time = map.getString("time");
    String keyword = map.getString("keyword");
    String query = map.getString("query");
    if (StringUtil.isEmpty(keyword)) {
      keyword = query;
    }
    String page = map.getString("page");
    String size = map.getString("size");

    if (StringUtil.isEmpty(id)) {
      id = SearchAPI.getIndexIDBySiteID(site);
    }

    if (StringUtil.isNotEmpty(keyword)) {
      sps.addFulltextField("Title", keyword, false);
      sps.addFulltextField("Content", keyword, false);
      sps.addFulltextField("_Keyword", keyword, true);
    }

    if ("time".equalsIgnoreCase(order)) {
      sps.setSortField("PublishDate", 3, true);
    }

    if (StringUtil.isNotEmpty(time)) {
      Date today = new Date();
      String StartDate = DateUtil.toString(DateUtil.addDay(today, -36500));
      if (time.equals("week")) StartDate = DateUtil.toString(DateUtil.addDay(today, -7));
      else if (time.equals("month")) StartDate = DateUtil.toString(DateUtil.addDay(today, -30));
      else if (time.equals("quarter")) {
        StartDate = DateUtil.toString(DateUtil.addDay(today, -90));
      }
      String EndDate = "2999-01-01";
      sps.setDateRange("PublishDate", StartDate, EndDate);
    }
    if (StringUtil.isNotEmpty(catalog)) {
      sps.addLeftLikeField("CatalogInnerCode", catalog);
    }
    if (StringUtil.isNotEmpty(page)) {
      sps.setPageIndex(Integer.parseInt(page) - 1);
    }
    if (StringUtil.isNotEmpty(size)) {
      sps.setPageSize(Integer.parseInt(size));
    }
    if (StringUtil.isEmpty(id)) {
      SearchResult sr = new SearchResult();
      sr.Data = new DataTable();
      return sr;
    }
    sps.setIndexID(Long.parseLong(id));
    return ArticleIndexer.search(sps);
  }
  private void setQueryParameters(Query query, SearchParameters sp) {
    // add default parameter if specified in the named query
    for (Parameter<?> p : query.getParameters()) {
      if (NAMED_PARAMETER_CURRENT_USER_ID.equals(p.getName())) {
        query.setParameter(NAMED_PARAMETER_CURRENT_USER_ID, UserContext.getId());
      } else if (NAMED_PARAMETER_NOW.equals(p.getName())) {
        query.setParameter(NAMED_PARAMETER_NOW, Calendar.getInstance().getTime());
      }
    }

    // add parameters for the named query
    for (String paramName : sp.getNamedQueryParameters().keySet()) {
      query.setParameter(paramName, sp.getNamedQueryParameter(paramName));
    }
  }
示例#5
0
 /** Construct a join predicate on collection (eg many to many, List) */
 public <T> List<Predicate> byExampleOnManyToMany(
     ManagedType<T> mt,
     Root<T> mtPath,
     final T mtValue,
     SearchParameters sp,
     CriteriaBuilder builder) {
   List<Predicate> predicates = newArrayList();
   for (PluralAttribute<T, ?, ?> pa : mt.getDeclaredPluralAttributes()) {
     if (pa.getCollectionType() == PluralAttribute.CollectionType.LIST) {
       List<?> values = (List<?>) JpaUtil.getValue(mtValue, mt.getAttribute(pa.getName()));
       if (values != null && !values.isEmpty()) {
         if (sp.getUseANDInManyToMany()) {
           if (values.size() > 3) {
             log.warn(
                 "Please note that using AND restriction on an Many to Many relationship requires as many joins as values");
           }
           for (Object value : values) {
             ListJoin<T, ?> join = mtPath.join(mt.getDeclaredList(pa.getName()));
             predicates.add(join.in(value));
           }
         } else {
           ListJoin<T, ?> join = mtPath.join(mt.getDeclaredList(pa.getName()));
           predicates.add(join.in(values));
         }
       }
     }
   }
   return predicates;
 }
  public <E> Predicate byEntitySelectors(
      Root<E> root, CriteriaBuilder builder, SearchParameters sp) {
    List<EntitySelector<?, ?, ?>> selectors = sp.getEntities();
    List<Predicate> predicates = newArrayList();

    for (EntitySelector<?, ?, ?> s : selectors) {
      @SuppressWarnings("unchecked")
      EntitySelector<? super E, ? extends Identifiable<?>, ?> selector =
          (EntitySelector<? super E, ? extends Identifiable<?>, ?>) s;

      if (selector.isNotEmpty()) {
        List<Predicate> selectorPredicates = newArrayList();

        for (Identifiable<?> selection : selector.getSelected()) {
          selectorPredicates.add(builder.equal(getExpression(root, selector), selection.getId()));
        }

        if (TRUE == selector.getIncludeNull()) {
          selectorPredicates.add(builder.or(builder.isNull(getExpression(root, selector))));
        }

        predicates.add(JpaUtil.orPredicate(builder, selectorPredicates));
      } else if (selector.isIncludeNullSet()) {
        if (selector.getIncludeNull()) {
          predicates.add(builder.isNull(getExpression(root, selector)));
        } else {
          predicates.add(builder.isNotNull(getExpression(root, selector)));
        }
      }
    }

    return JpaUtil.concatPredicate(sp, builder, predicates);
  }
  public <T> List<T> findByNamedQuery(SearchParameters sp) {
    if (sp == null || !sp.hasNamedQuery()) {
      throw new IllegalArgumentException(
          "searchParameters must be non null and must have a namedQuery");
    }

    Query query = entityManager.createNamedQuery(sp.getNamedQuery());
    String queryString = getQueryString(query);

    // append order by if needed
    if (queryString != null && sp.hasOrders()) {
      // create the sql restriction clausis
      StringBuilder orderClausis = new StringBuilder("order by ");
      boolean first = true;
      for (OrderBy orderBy : sp.getOrders()) {
        if (!first) {
          orderClausis.append(", ");
        }
        orderClausis.append(orderBy.getColumn());
        orderClausis.append(orderBy.isOrderDesc() ? " desc" : " asc");
        first = false;
      }

      if (log.isDebugEnabled()) {
        log.debug("appending: [" + orderClausis.toString() + "] to " + queryString);
      }

      query = recreateQuery(query, queryString + " " + orderClausis.toString());
    }

    // pagination
    if (sp.getFirstResult() >= 0) {
      query.setFirstResult(sp.getFirstResult());
    }
    if (sp.getMaxResults() > 0) {
      query.setMaxResults(sp.getMaxResults());
    }

    // named parameters
    setQueryParameters(query, sp);

    // execute
    @SuppressWarnings("unchecked")
    List<T> result = (List<T>) query.getResultList();

    if (result != null && log.isDebugEnabled()) {
      log.debug(sp.getNamedQuery() + " returned a List of size: " + result.size());
    }

    return result;
  }
示例#8
0
  public static SearchResult tagSearch(Mapx map) {
    SearchParameters sps = new SearchParameters();
    String site = map.getString("site");
    String order = map.getString("order");
    String keyword = map.getString("keyword");
    String query = map.getString("query");
    if (StringUtil.isEmpty(keyword)) {
      keyword = query;
    }
    String page = map.getString("page");
    String size = map.getString("size");

    if (StringUtil.isNotEmpty(keyword)) {
      sps.addLikeField("Tag", keyword, false);
    }

    if ("time".equalsIgnoreCase(order)) {
      sps.setSortField("PublishDate", 3, true);
    }
    if (StringUtil.isNotEmpty(page)) {
      sps.setPageIndex(Integer.parseInt(page) - 1);
    }
    if (StringUtil.isNotEmpty(size)) {
      sps.setPageSize(Integer.parseInt(size));
    }
    String id = SearchAPI.getIndexIDBySiteID(site);
    sps.setIndexID(Long.parseLong(id));
    return ArticleIndexer.search(sps);
  }
  // 'g.' preffix because of ERROR 1052 (23000): Column 'column_name' in where
  // clause is ambiguous
  // caused by the same name of columns in m_office and m_group tables
  private String getGroupExtraCriteria(final SearchParameters searchCriteria) {

    String extraCriteria = " and g.level_Id = " + GroupTypes.GROUP.getId();

    String sqlSearch = searchCriteria.getSqlSearch();
    if (sqlSearch != null) {
      sqlSearch = sqlSearch.replaceAll(" display_name ", " g.display_name ");
      sqlSearch = sqlSearch.replaceAll("display_name ", "g.display_name ");
      extraCriteria += " and (" + sqlSearch + ")";
    }

    final Long officeId = searchCriteria.getOfficeId();
    if (officeId != null) {
      extraCriteria += " and g.office_id = " + officeId;
    }

    final String externalId = searchCriteria.getExternalId();
    if (externalId != null) {
      extraCriteria += " and g.external_id = " + ApiParameterHelper.sqlEncodeString(externalId);
    }

    final String name = searchCriteria.getName();
    if (name != null) {
      extraCriteria +=
          " and g.display_name like " + ApiParameterHelper.sqlEncodeString("%" + name + "%");
    }

    final String hierarchy = searchCriteria.getHierarchy();
    if (hierarchy != null) {
      extraCriteria +=
          " and o.hierarchy like " + ApiParameterHelper.sqlEncodeString(hierarchy + "%");
    }

    if (StringUtils.isNotBlank(extraCriteria)) {
      extraCriteria = extraCriteria.substring(4);
    }

    return extraCriteria;
  }
  @Override
  public Page<GroupGeneralData> retrieveAll(final SearchParameters searchParameters) {

    final AppUser currentUser = this.context.authenticatedUser();
    final String hierarchy = currentUser.getOffice().getHierarchy();
    final String hierarchySearchString = hierarchy + "%";

    final StringBuilder sqlBuilder = new StringBuilder(200);
    sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
    sqlBuilder.append(this.allGroupTypesDataMapper.schema());
    sqlBuilder.append(" where o.hierarchy like ?");

    final String extraCriteria = getGroupExtraCriteria(searchParameters);

    if (StringUtils.isNotBlank(extraCriteria)) {
      sqlBuilder.append(" and (").append(extraCriteria).append(")");
    }

    if (searchParameters.isOrderByRequested()) {
      sqlBuilder
          .append(" order by ")
          .append(searchParameters.getOrderBy())
          .append(' ')
          .append(searchParameters.getSortOrder());
    }

    if (searchParameters.isLimited()) {
      sqlBuilder.append(" limit ").append(searchParameters.getLimit());
      if (searchParameters.isOffset()) {
        sqlBuilder.append(" offset ").append(searchParameters.getOffset());
      }
    }

    final String sqlCountRows = "SELECT FOUND_ROWS()";
    return this.paginationHelper.fetchPage(
        this.jdbcTemplate,
        sqlCountRows,
        sqlBuilder.toString(),
        new Object[] {hierarchySearchString},
        this.allGroupTypesDataMapper);
  }
  @RequiredReadAction
  private static boolean processInheritors(
      @NotNull final Processor<DotNetTypeDeclaration> consumer,
      @NotNull final String baseVmQName,
      @NotNull final SearchScope searchScope,
      @NotNull final SearchParameters parameters) {

    if (DotNetTypes.System.Object.equals(baseVmQName)) {
      return AllTypesSearch.search(
              searchScope, parameters.getProject(), parameters.getNameCondition())
          .forEach(
              new Processor<DotNetTypeDeclaration>() {
                @Override
                public boolean process(final DotNetTypeDeclaration aClass) {
                  ProgressIndicatorProvider.checkCanceled();
                  final String qname1 =
                      ApplicationManager.getApplication()
                          .runReadAction(
                              new Computable<String>() {
                                @Override
                                @Nullable
                                public String compute() {
                                  return aClass.getVmQName();
                                }
                              });
                  return DotNetTypes.System.Object.equals(qname1)
                      || consumer.process(parameters.myTransformer.fun(aClass));
                }
              });
    }

    final Ref<String> currentBase = Ref.create(null);
    final Stack<String> stack = new Stack<String>();
    // there are two sets for memory optimization: it's cheaper to hold FQN than PsiClass
    final Set<String> processedFqns =
        new THashSet<String>(); // FQN of processed classes if the class has one

    final Processor<DotNetTypeDeclaration> processor =
        new Processor<DotNetTypeDeclaration>() {
          @Override
          public boolean process(final DotNetTypeDeclaration candidate) {
            ProgressIndicatorProvider.checkCanceled();

            final Ref<Boolean> result = new Ref<Boolean>();
            final Ref<String> vmQNameRef = new Ref<String>();
            ApplicationManager.getApplication()
                .runReadAction(
                    new Runnable() {
                      @Override
                      public void run() {
                        vmQNameRef.set(candidate.getVmQName());
                        if (parameters.isCheckInheritance() || parameters.isCheckDeep()) {
                          if (!candidate.isInheritor(currentBase.get(), false)) {
                            result.set(true);
                            return;
                          }
                        }

                        if (PsiSearchScopeUtil.isInScope(searchScope, candidate)) {
                          final String name = candidate.getName();
                          if (name != null
                              && parameters.getNameCondition().value(name)
                              && !consumer.process(parameters.myTransformer.fun(candidate))) {
                            result.set(false);
                          }
                        }
                      }
                    });
            if (!result.isNull()) {
              return result.get();
            }

            if (parameters.isCheckDeep() && !isSealed(candidate)) {
              stack.push(vmQNameRef.get());
            }

            return true;
          }
        };
    stack.push(baseVmQName);

    final GlobalSearchScope projectScope = GlobalSearchScope.allScope(parameters.getProject());
    while (!stack.isEmpty()) {
      ProgressIndicatorProvider.checkCanceled();

      String vmQName = stack.pop();

      if (!processedFqns.add(vmQName)) {
        continue;
      }

      currentBase.set(vmQName);
      if (!DirectTypeInheritorsSearch.search(parameters.getProject(), vmQName, projectScope, false)
          .forEach(processor)) {
        return false;
      }
    }
    return true;
  }
 private void setQueryParameters(Query query, SearchParameters sp) {
   // add parameters for the named query
   for (Entry<String, Object> entrySet : sp.getNamedQueryParameters().entrySet()) {
     query.setParameter(entrySet.getKey(), entrySet.getValue());
   }
 }
示例#13
0
  public static SearchResult advanceSearch(Mapx map) {
    SearchParameters sps = new SearchParameters();

    String site = map.getString("site");
    String id = map.getString("id");
    String startDate = map.getString("startdate");
    String endDate = map.getString("enddate");
    String catalog = map.getString("catalog");
    String author = map.getString("author");
    String title = map.getString("title");
    String content = map.getString("content");
    String keyword = map.getString("keyword");
    String query = map.getString("query");
    if (StringUtil.isEmpty(keyword)) {
      keyword = query;
    }
    String orderField = map.getString("orderfield");
    String descFlag = map.getString("descflag");
    String page = map.getString("page");
    String size = map.getString("size");

    if (StringUtil.isEmpty(id)) {
      id = SearchAPI.getIndexIDBySiteID(site);
    }

    if ((StringUtil.isNotEmpty(startDate)) && (StringUtil.isEmpty(endDate))) {
      endDate = "2099-01-01";
    }
    if ((StringUtil.isNotEmpty(endDate)) && (StringUtil.isEmpty(startDate))) {
      startDate = "1900-01-01";
    }
    if (StringUtil.isNotEmpty(startDate)) {
      sps.setDateRange("PublishDate", startDate, endDate);
    }
    if (StringUtil.isNotEmpty(catalog)) {
      sps.addLeftLikeField("CatalogInnerCode", catalog, true);
    }
    if (StringUtil.isNotEmpty(title)) {
      sps.addFulltextField("Title", title);
    }
    if (StringUtil.isNotEmpty(content)) {
      sps.addFulltextField("Content", content);
    }
    if (StringUtil.isNotEmpty(keyword)) {
      sps.addFulltextField("Title", keyword, false);
      sps.addFulltextField("Content", keyword, false);
      sps.addFulltextField("_Keyword", keyword, true);
    }
    if (StringUtil.isNotEmpty(orderField)) {
      boolean isDesc = "true".equals(descFlag);
      sps.setSortField(orderField, 3, isDesc);
    }
    if (StringUtil.isNotEmpty(author)) {
      sps.addEqualField("Author", author);
    }
    if (StringUtil.isNotEmpty(page)) {
      sps.setPageIndex(Integer.parseInt(page) - 1);
    }
    if (StringUtil.isNotEmpty(size)) {
      sps.setPageSize(Integer.parseInt(size));
    }
    if (StringUtil.isEmpty(id)) {
      SearchResult sr = new SearchResult();
      sr.Data = new DataTable();
      return sr;
    }

    sps.setIndexID(Long.parseLong(id));
    return ArticleIndexer.search(sps);
  }