java - 如何使用Alfresco OperationContext过滤掉文档?

标签 java alfresco alfresco-share opencmis

我在 Alfresco 的一个文件夹中有很多文档。其中一些是pdf。 我想过滤 pdf 上的所有文档并仅检索 pdf 文档。 现在我通过迭代一个非常大的列表来完成此操作,该列表是我通过 opencmis 从 alfresco 获得的,并查看文档名称并过滤它们(如果它们是 .pdf)。 我研究了 api,并看到使用 OperationContext 来实现此目的的可能性,但我不知道该怎么做。 任何例子都将受到欢迎。

在我获取所有文档进行过滤之前,是否有更好的方法来做到这一点?

这就是我现在所做的:

public List< Document > retrieveAllPdfInFolder( Folder target )
{
    List< Document > documentList = GenericsUtil.makeList();
    for (CmisObject cmisObject: target.getChildren())
    {
        if (BaseTypeId.CMIS_DOCUMENT.equals(cmisObject.getBaseTypeId()))
        {
            Document doc =( Document ) cmisObject;
            if(doc.getName().endsWith( ".pdf" ))
                documentList.add( doc);
            System.out.println("[Docment] " + cmisObject.getName());
        }
    }

    return  documentList ;
}

这就是我想要达到的目标:

public List< Document > retrieveAllPdfInFolder( Folder target, boolean all )
{
    OperationContext operationContext = OperationContextUtils.createOperationContext();
    Set<String> propertyFilter = new HashSet<String>();
    propertyFilter.add( PropertyIds.CONTENT_STREAM_MIME_TYPE);
    operationContext.setFilter( propertyFilter );
    operationContext.setFilterString(  ".pdf" );
    // i dont know how to set filter on operationContext

    List< Document > finalDocumentList = GenericsUtil.makeList();

    ItemIterable< CmisObject > documents = all ? target.getChildren() :  target.getChildren(operationContext);
    for (CmisObject cmisObject: documents)
    {
        if (BaseTypeId.CMIS_DOCUMENT.equals(cmisObject.getBaseTypeId()))
            finalDocumentList.add( ( Document ) cmisObject);
    }

    return  finalDocumentList ;   
}

最佳答案

您可以使用 CMIS 查询。像这样的东西应该有效:

QueryStatement stmt = session.createQueryStatement("IN_FOLDER(?) AND cmis:contentStreamMimeType=?");
stmt.setString(1, target.getId());
stmt.setString(2, "application/pdf");

ItemIterable<CmisObject> documents = session.queryObjects("cmis:document", stmt.toString(), false, session.getDefaultContext());

for (CmisObject cmisObject: documents)
{
  finalDocumentList.add((Document)cmisObject);
}

关于java - 如何使用Alfresco OperationContext过滤掉文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725326/

相关文章:

javascript - 将字符串写入文件

postgresql - 如何在不丢失数据的情况下将 alfresco 社区版从一台 Ubuntu 机器移动到另一台 ubuntu 机器?

java - Alfresco:搜索所有工作流程中的所有文档

java - 如何用java编写JavaScript解析器

eclipse - 即使导入 oracle.sql.blob 后也无法识别 GetBlob() 方法

java - 在远程或虚拟机上启动和调试 Java 应用程序

java - 具有多个 JFrame 窗口的 EDT 位置

pdf - StackOverflowError 应用 Alfresco 规则将 Word Doc 转换为 PDF 时

java - 如何指定列表中的元素名称?

alfresco - 在 Alfresco 中创建方面时出错