All pastes #673673 Raw Edit

Stuff

public text v1 · immutable
#673673 ·published 2007-08-28 16:18 UTC
rendered paste body
    protected CompassQuery buildQuery(CompassSearchCommand criteria, CompassSession session)
    {
        if (criteria.getCompassQuery() != null) {
            return criteria.getCompassQuery();
        }
        CompassQueryBuilder queryBuilder = session.queryBuilder();
        
        Long userId = SecurityContextUtils.getUserInContext().getId();
        
        List<Magazine> magazines = SecurityContextUtils.getMagazinesInContext();
        
        CompassQuery ceQuery = queryBuilder.bool()
            .addMust(queryBuilder.term("EditedArticleBean.magazine.chiefEditor.id", userId))
            .toQuery();
        
        CompassQuery editorQuery = queryBuilder.bool()
                .addMust(queryBuilder.alias("EditedArticleBean"))
                .addMust(queryBuilder.term("EditedArticleBean.editor.id", userId))
                .toQuery();
        
        CompassQuery authorQuery = queryBuilder.bool()
               .addMust(queryBuilder.alias("BaseArticleBean"))
               .addMust(queryBuilder.term("BaseArticleBean.author.id", userId))
               .toQuery();

        CompassQuery query = null;
        CompassQuery baseQuery = queryBuilder.queryString(criteria.getQuery().trim()).toQuery();
        
        if (0 == magazines.size()) {
            query = queryBuilder.bool().addMust(baseQuery).addMust(authorQuery).toQuery();
        } else {
            boolean isCE = false;
            CompassQueryBuilder.CompassBooleanQueryBuilder qb = queryBuilder.bool().addMust(baseQuery);
            for (Magazine mag: magazines) {
                if (mag.getChiefEditor().getId() == userId) {
                    isCE = true;
                    break;
                }
            }
            if (isCE) {
                query = qb
                .addMust(queryBuilder.bool()
                        .addShould(authorQuery)
                        .addShould(editorQuery)
                        .addShould(ceQuery)
                        .toQuery())
                .toQuery();
            } else {
                query = qb
                .addMust(queryBuilder.bool()
                        .addShould(authorQuery)
                        .addShould(editorQuery)
                        .toQuery())
                .toQuery();
            }
        }
        return query;
    }