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:
@@ -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;
|
||||
@@ -54,14 +58,21 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||
public class NodesGet extends DeclarativeWebScript
|
||||
{
|
||||
protected static final Log logger = LogFactory.getLog(NodesGet.class);
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -127,10 +138,10 @@ public class NodesGet extends DeclarativeWebScript
|
||||
|
||||
// 0 or Integer.MAX_VALUE => ignore
|
||||
int maxResults = o.has("maxResults") ? o.getInt("maxResults") : 0;
|
||||
|
||||
|
||||
String storeProtocol = o.has("storeProtocol") ? o.getString("storeProtocol") : null;
|
||||
String storeIdentifier = o.has("storeIdentifier") ? o.getString("storeIdentifier") : null;
|
||||
|
||||
|
||||
List<Long> txnIds = null;
|
||||
if(aTxnIds != null)
|
||||
{
|
||||
@@ -140,8 +151,7 @@ public class NodesGet extends DeclarativeWebScript
|
||||
txnIds.add(aTxnIds.getLong(i));
|
||||
}
|
||||
}
|
||||
|
||||
WebNodeQueryCallback nodeQueryCallback = new WebNodeQueryCallback(maxResults);
|
||||
|
||||
NodeParameters nodeParameters = new NodeParameters();
|
||||
nodeParameters.setTransactionIds(txnIds);
|
||||
nodeParameters.setFromTxnId(fromTxnId);
|
||||
@@ -152,20 +162,36 @@ public class NodesGet extends DeclarativeWebScript
|
||||
nodeParameters.setIncludeAspects(includeAspects);
|
||||
nodeParameters.setExcludeNodeTypes(excludeNodeTypes);
|
||||
nodeParameters.setIncludeNodeTypes(includeNodeTypes);
|
||||
nodeParameters.setStoreProtocol(storeProtocol);
|
||||
nodeParameters.setStoreIdentifier(storeIdentifier);
|
||||
|
||||
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);
|
||||
List<Node> nodes = nodeQueryCallback.getNodes();
|
||||
model.put("nodes", nodes);
|
||||
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Result: \n\tRequest: " + req + "\n\tModel: " + model);
|
||||
}
|
||||
|
||||
|
||||
return model;
|
||||
}
|
||||
catch(IOException e)
|
||||
@@ -181,28 +207,49 @@ 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)
|
||||
{
|
||||
super();
|
||||
nodes = new ArrayList<Node>(count == 0 || count == Integer.MAX_VALUE ? 100 : count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleNode(Node node)
|
||||
{
|
||||
nodes.add(node);
|
||||
|
||||
// continue - get next node
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<Node> getNodes()
|
||||
{
|
||||
return nodes;
|
||||
}
|
||||
private ArrayList<Node> nodes;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
public List<Node> getNodes()
|
||||
{
|
||||
return nodes;
|
||||
}
|
||||
}
|
||||
}
|
@@ -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