diff --git a/config/alfresco/subsystems/Search/solr/solr-search-context.xml b/config/alfresco/subsystems/Search/solr/solr-search-context.xml index c033697cb6..dc82848a2a 100644 --- a/config/alfresco/subsystems/Search/solr/solr-search-context.xml +++ b/config/alfresco/subsystems/Search/solr/solr-search-context.xml @@ -34,6 +34,9 @@ + + + diff --git a/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSet.java b/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSet.java index a1ed6ab96e..baf38b83ff 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSet.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSet.java @@ -28,6 +28,7 @@ import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.search.SimpleResultSetMetaData; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.LimitBy; import org.alfresco.service.cmr.search.PermissionEvaluationMode; @@ -48,6 +49,8 @@ public class SolrJSONResultSet implements ResultSet { private NodeDAO nodeDAO; + private NodeService nodeService; + private ArrayList> page; private ResultSetMetaData rsmd; @@ -70,10 +73,11 @@ public class SolrJSONResultSet implements ResultSet * Detached result set based on that provided * @param resultSet */ - public SolrJSONResultSet(JSONObject json, NodeDAO nodeDAO, SearchParameters searchParameters) + public SolrJSONResultSet(JSONObject json, NodeDAO nodeDAO, SearchParameters searchParameters, NodeService nodeService) { // Note all properties are returned as multi-valued from the WildcardField "*" definition in the SOLR schema.xml this.nodeDAO = nodeDAO; + this.nodeService = nodeService; this.resultSetMetaData = new SimpleResultSetMetaData(LimitBy.UNLIMITED, PermissionEvaluationMode.EAGER, searchParameters); try { @@ -137,6 +141,12 @@ public class SolrJSONResultSet implements ResultSet } + public NodeService getNodeService() + { + return nodeService; + } + + /* * (non-Javadoc) * @see org.alfresco.service.cmr.search.ResultSetSPI#close() diff --git a/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSetRow.java b/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSetRow.java index d22de3f86e..c40b42e794 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSetRow.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/SolrJSONResultSetRow.java @@ -18,11 +18,13 @@ */ package org.alfresco.repo.search.impl.lucene; +import java.io.Serializable; import java.util.Map; import org.alfresco.repo.search.AbstractResultSetRow; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.namespace.QName; /** * @author Andy @@ -78,5 +80,11 @@ public class SolrJSONResultSetRow extends AbstractResultSetRow { throw new UnsupportedOperationException(); } + + protected Map getDirectProperties() + { + SolrJSONResultSet rs = (SolrJSONResultSet) getResultSet(); + return rs.getNodeService().getProperties(rs.getNodeRef(getIndex())); + } } diff --git a/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java b/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java index eea6369126..326275476a 100644 --- a/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java +++ b/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java @@ -30,12 +30,15 @@ import javax.servlet.http.HttpServletResponse; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.httpclient.HttpClientFactory; +import org.alfresco.model.ContentModel; import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.search.impl.lucene.LuceneQueryParserException; import org.alfresco.repo.search.impl.lucene.SolrJSONResultSet; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.search.LimitBy; import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.cmr.search.ResultSetRow; import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchParameters.FieldFacet; import org.alfresco.service.cmr.search.SearchParameters.FieldFacetMethod; @@ -69,6 +72,8 @@ public class SolrQueryHTTPClient static Log s_logger = LogFactory.getLog(SolrQueryHTTPClient.class); private NodeDAO nodeDAO; + + private NodeService nodeService; private PermissionService permissionService; @@ -107,6 +112,11 @@ public class SolrQueryHTTPClient this.nodeDAO = nodeDAO; } + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + public void setPermissionService(PermissionService permissionService) { this.permissionService = permissionService; @@ -338,14 +348,14 @@ public class SolrQueryHTTPClient Reader reader = new BufferedReader(new InputStreamReader(post.getResponseBodyAsStream())); // TODO - replace with streaming-based solution e.g. SimpleJSON ContentHandler JSONObject json = new JSONObject(new JSONTokener(reader)); - SolrJSONResultSet results = new SolrJSONResultSet(json, nodeDAO, searchParameters); + SolrJSONResultSet results = new SolrJSONResultSet(json, nodeDAO, searchParameters, nodeService); if (s_logger.isDebugEnabled()) { s_logger.debug("Sent :" + url); s_logger.debug(" with: " + body.toString()); s_logger.debug("Got: " + results.getNumberFound() + " in " + results.getQueryTime() + " ms"); } - + return results; } finally