RelationPreferenceConfiguration configuration = preferenceService
.getConfigurationService().getRelationPreferenceConfiguration(
configurationName);
List<ColumnVisualizationConfiguration> columns = configuration
.getColumnsVisualizationConfiguration();
RelatedObjects result = new RelatedObjects();
List<RelatedObject> related = result.getObjects();
String query = MessageFormat.format(configuration
.getRelationConfiguration().getQuery(), cris.getCrisID(), cris
.getUuid());
boolean sysAdmin = AuthorizeManager.isAdmin(context);
SolrQuery solrQuery = new SolrQuery();
if (StringUtils.isNotEmpty(userQuery))
{
solrQuery.addFilterQuery("{!tag=user}"
+ ClientUtils.escapeQueryChars(userQuery) + "*");
solrQuery.addFacetQuery("{!ex=user}*:*");
}
if (!configuration.isActionEnabled(RelationPreference.HIDED, sysAdmin))
{
solrQuery.addFilterQuery(getHiddenFilter(cris, configurationName));
}
if (!configuration.isActionEnabled(RelationPreference.SELECTED,
sysAdmin))
{
solrQuery
.addFilterQuery(getSelectedFilter(cris, configurationName));
}
if (configuration
.isActionEnabled(RelationPreference.UNLINKED, sysAdmin))
{
query = getUnlinkedFilter(cris, configurationName, query);
}
solrQuery.setQuery(query);
if (StringUtils.isNotEmpty(status))
{
solrQuery
.addFilterQuery(RelationPreference.PREFIX_RELATIONPREFERENCES
+ configurationName
+ "."
+ status.toLowerCase()
+ ":\"" + cris.getUuid() + "\"");
}
if (sorts != null)
{
for (Sort s : sorts)
{
if (s.col < 0)
{
solrQuery.addSortField("cris-uuid", s.asc ? ORDER.asc
: ORDER.desc);
solrQuery.addSortField("search.resourceid",
s.asc ? ORDER.asc : ORDER.desc);
}
else
{
solrQuery.addSortField(columns.get(s.col).getSortField(),
s.asc ? ORDER.asc : ORDER.desc);
}
}
}
solrQuery.setRows(rpp);
solrQuery.setStart(offset);
solrQuery
.setFields("search.resourceid", "cris-uuid",
RelationPreference.PREFIX_RELATIONPREFERENCES
+ configurationName + "."
+ RelationPreference.UNLINKED,
RelationPreference.PREFIX_RELATIONPREFERENCES
+ configurationName + "."
+ RelationPreference.HIDED,
RelationPreference.PREFIX_RELATIONPREFERENCES
+ configurationName + "."
+ RelationPreference.SELECTED);
QueryResponse qRes = searcher.search(solrQuery);
result.setFilterRecords((int) qRes.getResults().getNumFound());
if (StringUtils.isNotEmpty(userQuery))
{
result.setTotalRecords(qRes.getFacetQuery().get("{!ex=user}*:*"));
}
else
{
result.setTotalRecords((int) qRes.getResults().getNumFound());
}
List<Object[]> dsoList = new ArrayList<Object[]>();
for (SolrDocument doc : qRes.getResults())
{
List<String> unlinked = (List<String>) doc