Search in sources :

Example 1 with ChildAssocRefResultSet

use of org.alfresco.repo.search.results.ChildAssocRefResultSet in project alfresco-repository by Alfresco.

the class ACLEntryAfterInvocationTest method testResultSetFilterAll.

public void testResultSetFilterAll() throws Exception {
    runAs(AuthenticationUtil.getAdminUserName());
    NodeRef n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}one"), ContentModel.TYPE_FOLDER).getChildRef();
    runAs("andy");
    Object o = new ClassWithMethods();
    Method methodResultSet = o.getClass().getMethod("echoResultSet", new Class[] { ResultSet.class });
    Method methodCollection = o.getClass().getMethod("echoCollection", new Class[] { Collection.class });
    Method methodArray = o.getClass().getMethod("echoArray", new Class[] { Object[].class });
    AdvisorAdapterRegistry advisorAdapterRegistry = GlobalAdvisorAdapterRegistry.getInstance();
    ProxyFactory proxyFactory = new ProxyFactory();
    proxyFactory.addAdvisor(advisorAdapterRegistry.wrap(new Interceptor("AFTER_ACL_NODE.sys:base.Read")));
    proxyFactory.setTargetSource(new SingletonTargetSource(o));
    Object proxy = proxyFactory.getProxy();
    List<NodeRef> nodeRefList = new ArrayList<NodeRef>();
    nodeRefList.add(rootNodeRef);
    nodeRefList.add(systemNodeRef);
    nodeRefList.add(n1);
    nodeRefList.add(n1);
    NodeRef[] nodeRefArray = nodeRefList.toArray(new NodeRef[] {});
    Set<NodeRef> nodeRefSet = new HashSet<NodeRef>();
    nodeRefSet.addAll(nodeRefList);
    List<ChildAssociationRef> carList = new ArrayList<ChildAssociationRef>();
    carList.add(nodeService.getPrimaryParent(rootNodeRef));
    carList.add(nodeService.getPrimaryParent(systemNodeRef));
    carList.add(nodeService.getPrimaryParent(n1));
    carList.add(nodeService.getPrimaryParent(n1));
    ChildAssociationRef[] carArray = carList.toArray(new ChildAssociationRef[] {});
    Set<ChildAssociationRef> carSet = new HashSet<ChildAssociationRef>();
    carSet.addAll(carList);
    ChildAssocRefResultSet rsIn = new ChildAssocRefResultSet(nodeService, nodeRefList, false);
    assertEquals(4, rsIn.length());
    ResultSet answerResultSet = (ResultSet) methodResultSet.invoke(proxy, new Object[] { rsIn });
    assertEquals(0, answerResultSet.length());
    Collection answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { nodeRefList });
    assertEquals(0, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { nodeRefSet });
    assertEquals(0, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { carList });
    assertEquals(0, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { carSet });
    assertEquals(0, answerCollection.size());
    Object[] answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { nodeRefArray });
    assertEquals(0, answerArray.length);
    answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { carArray });
    assertEquals(0, answerArray.length);
}
Also used : ProxyFactory(org.springframework.aop.framework.ProxyFactory) ArrayList(java.util.ArrayList) Method(java.lang.reflect.Method) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) SingletonTargetSource(org.springframework.aop.target.SingletonTargetSource) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) ResultSet(org.alfresco.service.cmr.search.ResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) GlobalAdvisorAdapterRegistry(org.springframework.aop.framework.adapter.GlobalAdvisorAdapterRegistry) AdvisorAdapterRegistry(org.springframework.aop.framework.adapter.AdvisorAdapterRegistry) Collection(java.util.Collection) MethodInterceptor(org.aopalliance.intercept.MethodInterceptor) HashSet(java.util.HashSet)

Example 2 with ChildAssocRefResultSet

use of org.alfresco.repo.search.results.ChildAssocRefResultSet in project alfresco-repository by Alfresco.

the class ACLEntryAfterInvocationTest method testResultSetFilterForNullParentOnly.

public void testResultSetFilterForNullParentOnly() throws Exception {
    runAs(AuthenticationUtil.getAdminUserName());
    NodeRef n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}one"), ContentModel.TYPE_FOLDER).getChildRef();
    runAs("andy");
    Object o = new ClassWithMethods();
    Method methodResultSet = o.getClass().getMethod("echoResultSet", new Class[] { ResultSet.class });
    Method methodCollection = o.getClass().getMethod("echoCollection", new Class[] { Collection.class });
    Method methodArray = o.getClass().getMethod("echoArray", new Class[] { Object[].class });
    AdvisorAdapterRegistry advisorAdapterRegistry = GlobalAdvisorAdapterRegistry.getInstance();
    ProxyFactory proxyFactory = new ProxyFactory();
    proxyFactory.addAdvisor(advisorAdapterRegistry.wrap(new Interceptor("AFTER_ACL_PARENT.sys:base.Read")));
    proxyFactory.setTargetSource(new SingletonTargetSource(o));
    Object proxy = proxyFactory.getProxy();
    List<NodeRef> nodeRefList = new ArrayList<NodeRef>();
    nodeRefList.add(rootNodeRef);
    nodeRefList.add(systemNodeRef);
    nodeRefList.add(n1);
    nodeRefList.add(n1);
    NodeRef[] nodeRefArray = nodeRefList.toArray(new NodeRef[] {});
    Set<NodeRef> nodeRefSet = new HashSet<NodeRef>();
    nodeRefSet.addAll(nodeRefList);
    List<ChildAssociationRef> carList = new ArrayList<ChildAssociationRef>();
    carList.add(nodeService.getPrimaryParent(rootNodeRef));
    carList.add(nodeService.getPrimaryParent(systemNodeRef));
    carList.add(nodeService.getPrimaryParent(n1));
    carList.add(nodeService.getPrimaryParent(n1));
    ChildAssociationRef[] carArray = carList.toArray(new ChildAssociationRef[] {});
    Set<ChildAssociationRef> carSet = new HashSet<ChildAssociationRef>();
    carSet.addAll(carList);
    ChildAssocRefResultSet rsIn = new ChildAssocRefResultSet(nodeService, nodeRefList, false);
    assertEquals(4, rsIn.length());
    ResultSet answerResultSet = (ResultSet) methodResultSet.invoke(proxy, new Object[] { rsIn });
    assertEquals(1, answerResultSet.length());
    Collection answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { nodeRefList });
    assertEquals(1, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { nodeRefSet });
    assertEquals(1, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { carList });
    assertEquals(1, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { carSet });
    assertEquals(1, answerCollection.size());
    Object[] answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { nodeRefArray });
    assertEquals(1, answerArray.length);
    answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { carArray });
    assertEquals(1, answerArray.length);
}
Also used : ProxyFactory(org.springframework.aop.framework.ProxyFactory) ArrayList(java.util.ArrayList) Method(java.lang.reflect.Method) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) SingletonTargetSource(org.springframework.aop.target.SingletonTargetSource) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) ResultSet(org.alfresco.service.cmr.search.ResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) GlobalAdvisorAdapterRegistry(org.springframework.aop.framework.adapter.GlobalAdvisorAdapterRegistry) AdvisorAdapterRegistry(org.springframework.aop.framework.adapter.AdvisorAdapterRegistry) Collection(java.util.Collection) MethodInterceptor(org.aopalliance.intercept.MethodInterceptor) HashSet(java.util.HashSet)

Example 3 with ChildAssocRefResultSet

use of org.alfresco.repo.search.results.ChildAssocRefResultSet in project alfresco-repository by Alfresco.

the class FilteringResultSetTest method test.

public void test() {
    StoreRef storeRef = new StoreRef("protocol", "test");
    NodeRef root = new NodeRef(storeRef, "n0");
    NodeRef n1 = new NodeRef(storeRef, "n1");
    NodeRef n2 = new NodeRef(storeRef, "n2");
    NodeRef n3 = new NodeRef(storeRef, "n3");
    NodeRef n4 = new NodeRef(storeRef, "n4");
    NodeRef n5 = new NodeRef(storeRef, "n5");
    ArrayList<ChildAssociationRef> cars = new ArrayList<ChildAssociationRef>();
    ChildAssociationRef car0 = new ChildAssociationRef(null, null, null, root);
    ChildAssociationRef car1 = new ChildAssociationRef(ContentModel.ASSOC_CHILDREN, root, QName.createQName("{test}n2"), n1);
    ChildAssociationRef car2 = new ChildAssociationRef(ContentModel.ASSOC_CHILDREN, n1, QName.createQName("{test}n3"), n2);
    ChildAssociationRef car3 = new ChildAssociationRef(ContentModel.ASSOC_CHILDREN, n2, QName.createQName("{test}n4"), n3);
    ChildAssociationRef car4 = new ChildAssociationRef(ContentModel.ASSOC_CHILDREN, n3, QName.createQName("{test}n5"), n4);
    ChildAssociationRef car5 = new ChildAssociationRef(ContentModel.ASSOC_CHILDREN, n4, QName.createQName("{test}n6"), n5);
    cars.add(car0);
    cars.add(car1);
    cars.add(car2);
    cars.add(car3);
    cars.add(car4);
    cars.add(car5);
    ResultSet in = new ChildAssocRefResultSet(null, cars);
    FilteringResultSet filtering = new FilteringResultSet(in);
    assertEquals(0, filtering.length());
    for (int i = 0; i < 6; i++) {
        filtering.setIncluded(i, true);
        assertEquals(1, filtering.length());
        assertEquals("n" + i, filtering.getNodeRef(0).getId());
        assertEquals(1, filtering.getNodeRefs().size());
        assertEquals(1, filtering.getChildAssocRefs().size());
        assertEquals("n" + i, filtering.getNodeRefs().get(0).getId());
        filtering.setIncluded(i, false);
        assertEquals(0, filtering.length());
    }
    for (int i = 0; i < 6; i++) {
        filtering.setIncluded(i, true);
        assertEquals(i + 1, filtering.length());
        assertEquals("n" + i, filtering.getNodeRef(i).getId());
    }
    int count = 0;
    for (ResultSetRow row : filtering) {
        assertNotNull(row);
        assertTrue(count < 6);
        count++;
    }
    ResultSetRow last = null;
    for (ListIterator<ResultSetRow> it = filtering.iterator(); it.hasNext(); ) /**/
    {
        ResultSetRow row = it.next();
        if (last != null) {
            assertTrue(it.hasPrevious());
            ResultSetRow previous = it.previous();
            assertEquals(last.getIndex(), previous.getIndex());
            row = it.next();
        } else {
            assertFalse(it.hasPrevious());
        }
        last = row;
    }
}
Also used : StoreRef(org.alfresco.service.cmr.repository.StoreRef) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ArrayList(java.util.ArrayList) ResultSet(org.alfresco.service.cmr.search.ResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) ResultSetRow(org.alfresco.service.cmr.search.ResultSetRow) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef)

Example 4 with ChildAssocRefResultSet

use of org.alfresco.repo.search.results.ChildAssocRefResultSet in project alfresco-repository by Alfresco.

the class DbOrIndexSwitchingQueryLanguage method executeHybridQuery.

private ResultSet executeHybridQuery(SearchParameters searchParameters) {
    if (indexQueryLanguage == null || dbQueryLanguage == null) {
        throw new QueryModelException("Both index and DB query language required for hybrid search [index=" + indexQueryLanguage + ", DB=" + dbQueryLanguage + "]");
    }
    StopWatch stopWatch = new StopWatch("hybrid search");
    if (logger.isDebugEnabled()) {
        logger.debug("Hybrid search, using SOLR query: " + dbQueryLanguage.getName() + " for " + searchParameters);
    }
    stopWatch.start("index query");
    ResultSet indexResults = indexQueryLanguage.executeQuery(searchParameters);
    stopWatch.stop();
    if (logger.isDebugEnabled()) {
        logger.debug("SOLR query returned " + indexResults.length() + " results in " + stopWatch.getLastTaskTimeMillis() + "ms");
    }
    if (!(indexResults instanceof SolrJSONResultSet)) {
        if (logger.isWarnEnabled()) {
            logger.warn("Hybrid search can only use database when SOLR is also in use. " + "Skipping DB search, returning results from index.");
        }
        return indexResults;
    }
    long lastTxId = ((SolrJSONResultSet) indexResults).getLastIndexedTxId();
    searchParameters.setSinceTxId(lastTxId);
    if (logger.isDebugEnabled()) {
        logger.debug("Hybrid search, using DB query: " + dbQueryLanguage.getName() + " for " + searchParameters);
    }
    stopWatch.start("database query");
    ResultSet dbResults = dbQueryLanguage.executeQuery(searchParameters);
    stopWatch.stop();
    if (logger.isDebugEnabled()) {
        logger.debug("DB query returned " + dbResults.length() + " results in " + stopWatch.getLastTaskTimeMillis() + "ms");
    }
    // Merge result sets
    List<ChildAssociationRef> childAssocs = new ArrayList<>();
    NodeParameters nodeParameters = new NodeParameters();
    nodeParameters.setFromTxnId(lastTxId + 1);
    // TODO: setToTxnId(null) when SolrDAO behaviour is fixed.
    nodeParameters.setToTxnId(Long.MAX_VALUE);
    stopWatch.start("get changed nodes");
    List<Node> changedNodeList = solrDao.getNodes(nodeParameters, null, null);
    stopWatch.stop();
    if (logger.isDebugEnabled()) {
        logger.debug("Nodes changed since last indexed transaction (ID " + lastTxId + ") = " + changedNodeList.size() + " (took " + stopWatch.getLastTaskTimeMillis() + "ms)");
    }
    stopWatch.start("merge result sets");
    Set<NodeRef> nodeRefs = new HashSet<>(changedNodeList.size());
    for (Node n : changedNodeList) {
        nodeRefs.add(n.getNodeRef());
    }
    // Only use the SOLR results for nodes that haven't changed since indexing.
    for (ChildAssociationRef car : indexResults.getChildAssocRefs()) {
        if (!nodeRefs.contains(car.getChildRef())) {
            childAssocs.add(car);
        }
    }
    // Merge in all the database results.
    childAssocs.addAll(dbResults.getChildAssocRefs());
    ResultSet results = new ChildAssocRefResultSet(nodeService, childAssocs);
    // merge result sets
    stopWatch.stop();
    if (logger.isDebugEnabled()) {
        String stats = String.format("SOLR=%d, DB=%d, total=%d", indexResults.length(), dbResults.length(), results.length());
        logger.debug("Hybrid search returning combined results with counts: " + stats);
        logger.debug(stopWatch.prettyPrint());
    }
    return results;
}
Also used : NodeParameters(org.alfresco.repo.solr.NodeParameters) Node(org.alfresco.repo.domain.node.Node) QueryModelException(org.alfresco.repo.search.impl.querymodel.QueryModelException) ArrayList(java.util.ArrayList) SolrJSONResultSet(org.alfresco.repo.search.impl.lucene.SolrJSONResultSet) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) StopWatch(org.springframework.util.StopWatch) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ResultSet(org.alfresco.service.cmr.search.ResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) SolrJSONResultSet(org.alfresco.repo.search.impl.lucene.SolrJSONResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) HashSet(java.util.HashSet)

Example 5 with ChildAssocRefResultSet

use of org.alfresco.repo.search.results.ChildAssocRefResultSet in project alfresco-repository by Alfresco.

the class ACLEntryAfterInvocationTest method testBasicAllowNullResultSet.

public void testBasicAllowNullResultSet() throws Exception {
    runAs("andy");
    Object o = new ClassWithMethods();
    Method methodResultSet = o.getClass().getMethod("echoResultSet", new Class[] { ResultSet.class });
    Method methodCollection = o.getClass().getMethod("echoCollection", new Class[] { Collection.class });
    Method methodArray = o.getClass().getMethod("echoArray", new Class[] { Object[].class });
    AdvisorAdapterRegistry advisorAdapterRegistry = GlobalAdvisorAdapterRegistry.getInstance();
    ProxyFactory proxyFactory = new ProxyFactory();
    proxyFactory.addAdvisor(advisorAdapterRegistry.wrap(new Interceptor("AFTER_ACL_NODE.sys:base.Read")));
    proxyFactory.setTargetSource(new SingletonTargetSource(o));
    Object proxy = proxyFactory.getProxy();
    List<NodeRef> nodeRefList = new ArrayList<NodeRef>();
    NodeRef[] nodeRefArray = new NodeRef[0];
    Set<NodeRef> nodeRefSet = new HashSet<NodeRef>();
    List<ChildAssociationRef> carList = new ArrayList<ChildAssociationRef>();
    ChildAssociationRef[] carArray = new ChildAssociationRef[0];
    Set<ChildAssociationRef> carSet = new HashSet<ChildAssociationRef>();
    ChildAssocRefResultSet rsIn = new ChildAssocRefResultSet(nodeService, nodeRefList, false);
    assertEquals(0, rsIn.length());
    ResultSet answerResultSet = (ResultSet) methodResultSet.invoke(proxy, new Object[] { rsIn });
    assertEquals(0, answerResultSet.length());
    Collection answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { nodeRefList });
    assertEquals(0, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { nodeRefSet });
    assertEquals(0, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { carList });
    assertEquals(0, answerCollection.size());
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { carSet });
    assertEquals(0, answerCollection.size());
    Object[] answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { nodeRefArray });
    assertEquals(0, answerArray.length);
    answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { carArray });
    assertEquals(0, answerArray.length);
    assertEquals(0, rsIn.length());
    answerResultSet = (ResultSet) methodResultSet.invoke(proxy, new Object[] { null });
    assertNull(answerResultSet);
    answerCollection = (Collection) methodCollection.invoke(proxy, new Object[] { null });
    assertNull(answerCollection);
    answerArray = (Object[]) methodArray.invoke(proxy, new Object[] { null });
    assertNull(answerArray);
}
Also used : ProxyFactory(org.springframework.aop.framework.ProxyFactory) ArrayList(java.util.ArrayList) Method(java.lang.reflect.Method) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) SingletonTargetSource(org.springframework.aop.target.SingletonTargetSource) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) ResultSet(org.alfresco.service.cmr.search.ResultSet) ChildAssocRefResultSet(org.alfresco.repo.search.results.ChildAssocRefResultSet) GlobalAdvisorAdapterRegistry(org.springframework.aop.framework.adapter.GlobalAdvisorAdapterRegistry) AdvisorAdapterRegistry(org.springframework.aop.framework.adapter.AdvisorAdapterRegistry) Collection(java.util.Collection) MethodInterceptor(org.aopalliance.intercept.MethodInterceptor) HashSet(java.util.HashSet)

Aggregations

ArrayList (java.util.ArrayList)7 ChildAssocRefResultSet (org.alfresco.repo.search.results.ChildAssocRefResultSet)7 ChildAssociationRef (org.alfresco.service.cmr.repository.ChildAssociationRef)7 NodeRef (org.alfresco.service.cmr.repository.NodeRef)7 ResultSet (org.alfresco.service.cmr.search.ResultSet)7 HashSet (java.util.HashSet)6 Method (java.lang.reflect.Method)5 Collection (java.util.Collection)5 MethodInterceptor (org.aopalliance.intercept.MethodInterceptor)5 ProxyFactory (org.springframework.aop.framework.ProxyFactory)5 AdvisorAdapterRegistry (org.springframework.aop.framework.adapter.AdvisorAdapterRegistry)5 GlobalAdvisorAdapterRegistry (org.springframework.aop.framework.adapter.GlobalAdvisorAdapterRegistry)5 SingletonTargetSource (org.springframework.aop.target.SingletonTargetSource)5 SimplePermissionEntry (org.alfresco.repo.security.permissions.impl.SimplePermissionEntry)2 Node (org.alfresco.repo.domain.node.Node)1 SolrJSONResultSet (org.alfresco.repo.search.impl.lucene.SolrJSONResultSet)1 QueryModelException (org.alfresco.repo.search.impl.querymodel.QueryModelException)1 NodeParameters (org.alfresco.repo.solr.NodeParameters)1 StoreRef (org.alfresco.service.cmr.repository.StoreRef)1 ResultSetRow (org.alfresco.service.cmr.search.ResultSetRow)1