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;
}