mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-21 18:09:20 +00:00
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:
@@ -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>
|
||||
|
@@ -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"
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user