Merged DEV to HEAD:

30289, 30366, 30381, 30607: (record-only)
    30621, 30658, 30674, 30689, 30700: MT-aware Solr (THOR-129) - enabler only (subject to QA)


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31975 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2011-11-15 12:02:28 +00:00
parent 648c99a281
commit 86c4319f5c
4 changed files with 95 additions and 36 deletions

View File

@@ -17,6 +17,7 @@
{
"aclId": ${aclReaders.aclId?c},
"aclChangeSetId": ${aclReaders.aclChangeSetId?c},
"tenantDomain" : "${aclReaders.tenantDomain}",
"readers" :
[
<#list aclReaders.readers as reader>
@@ -47,6 +48,7 @@
<#macro nodeMetaDataJSON nodeMetaData filter>
{
"id": ${nodeMetaData.nodeId?c}
, "tenantDomain": "${nodeMetaData.tenantDomain}"
<#if filter.includeNodeRef??><#if nodeMetaData.nodeRef??>, "nodeRef": "${nodeMetaData.nodeRef.toString()}"</#if></#if>
<#if filter.includeType??><#if nodeMetaData.nodeType??>, "type": <@qNameJSON qName=nodeMetaData.nodeType/></#if></#if>
<#if filter.includeAclId??><#if nodeMetaData.aclId??>, "aclId": ${nodeMetaData.aclId?c}</#if></#if>

View File

@@ -1469,6 +1469,7 @@
class="org.alfresco.repo.web.scripts.solr.NodesGet"
parent="webscript">
<property name="solrTrackingComponent" ref="solrTrackingComponent"/>
<property name="tenantService" ref="tenantService"/>
</bean>
<bean id="webscript.org.alfresco.repository.solr.nodesMetaData.post"

View File

@@ -27,9 +27,13 @@ import java.util.Map;
import java.util.Set;
import org.alfresco.repo.domain.node.Node;
import org.alfresco.repo.domain.node.StoreEntity;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.solr.NodeParameters;
import org.alfresco.repo.solr.SOLRTrackingComponent;
import org.alfresco.repo.solr.SOLRTrackingComponent.NodeQueryCallback;
import org.alfresco.repo.tenant.TenantService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -57,11 +61,18 @@ public class NodesGet extends DeclarativeWebScript
private SOLRTrackingComponent solrTrackingComponent;
private TenantService tenantService;
public void setSolrTrackingComponent(SOLRTrackingComponent solrTrackingComponent)
{
this.solrTrackingComponent = solrTrackingComponent;
}
public void setTenantService(TenantService tenantService)
{
this.tenantService = tenantService;
}
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status)
{
@@ -141,7 +152,6 @@ public class NodesGet extends DeclarativeWebScript
}
}
WebNodeQueryCallback nodeQueryCallback = new WebNodeQueryCallback(maxResults);
NodeParameters nodeParameters = new NodeParameters();
nodeParameters.setTransactionIds(txnIds);
nodeParameters.setFromTxnId(fromTxnId);
@@ -152,9 +162,25 @@ public class NodesGet extends DeclarativeWebScript
nodeParameters.setIncludeAspects(includeAspects);
nodeParameters.setExcludeNodeTypes(excludeNodeTypes);
nodeParameters.setIncludeNodeTypes(includeNodeTypes);
StoreRef storeRef = null;
if (AuthenticationUtil.isMtEnabled())
{
// MT - use Java filter (post query) and then add tenant context for each node
storeRef = new StoreRef(storeProtocol, storeIdentifier);
}
else
{
// non-MT - use DB filter (in query)
nodeParameters.setStoreProtocol(storeProtocol);
nodeParameters.setStoreIdentifier(storeIdentifier);
}
nodeParameters.setMaxResults(maxResults);
WebNodeQueryCallback nodeQueryCallback = new WebNodeQueryCallback(maxResults, storeRef, tenantService);
solrTrackingComponent.getNodes(nodeParameters, nodeQueryCallback);
Map<String, Object> model = new HashMap<String, Object>(1, 1.0f);
@@ -181,20 +207,41 @@ public class NodesGet extends DeclarativeWebScript
/**
* Callback for DAO get nodes query
*/
private static class WebNodeQueryCallback implements NodeQueryCallback
private class WebNodeQueryCallback implements NodeQueryCallback
{
private ArrayList<Node> nodes;
public WebNodeQueryCallback(int count)
private StoreRef storeRef;
private TenantService tenantService;
public WebNodeQueryCallback(int count, StoreRef storeRef, TenantService tenantService)
{
super();
this.storeRef = storeRef;
this.tenantService = tenantService;
nodes = new ArrayList<Node>(count == 0 || count == Integer.MAX_VALUE ? 100 : count);
}
@Override
public boolean handleNode(Node node)
{
if (storeRef != null)
{
// MT - since storeRef is not null, filter by store here
StoreRef tenantStoreRef = node.getStore().getStoreRef();
StoreRef baseStoreRef = new StoreRef(tenantStoreRef.getProtocol(), tenantService.getBaseName(tenantStoreRef.getIdentifier(), true));
if (storeRef.equals(baseStoreRef))
{
nodes.add(node);
}
}
else
{
nodes.add(node);
}
// continue - get next node
return true;

View File

@@ -38,12 +38,10 @@ import org.alfresco.repo.solr.SOLRTrackingComponent.NodeMetaDataQueryCallback;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.repository.Path.Element;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.Pair;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.document.Field;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -252,10 +250,12 @@ public class NodesMetaDataGet extends DeclarativeWebScript
private String owner;
private Long txnId;
private Set<String> ancestors;
private String tenantDomain;
public FreemarkerNodeMetaData(SOLRSerializer solrSerializer, NodeMetaData nodeMetaData) throws IOException, JSONException
{
setNodeId(nodeMetaData.getNodeId());
setTenantDomain(nodeMetaData.getTenantDomain());
setAclId(nodeMetaData.getAclId());
setNodeRef(nodeMetaData.getNodeRef());
setNodeType(nodeMetaData.getNodeType());
@@ -418,6 +418,15 @@ public class NodesMetaDataGet extends DeclarativeWebScript
this.txnId = txnId;
}
public String getTenantDomain()
{
return tenantDomain;
}
public void setTenantDomain(String tenantDomain)
{
this.tenantDomain = tenantDomain;
}
private ArrayList<NodeRef> getAncestors(Path path)
{
ArrayList<NodeRef> ancestors = new ArrayList<NodeRef>(8);