Adobe AEM(CQ)5.6删除再现工作流程

时间:2013-11-29 12:45:01

标签: workflow cq5 aem

我正在寻找一种移除/清除再现的方法(最好是工作流程)! 我的问题是,随着时间的推移,我有大量不再使用的再现图像。

有没有一种很好的方法来清理它并“回收”我的磁盘空间? :)

1 个答案:

答案 0 :(得分:1)

虽然我想建议您将servlet路由删除,因为您可以更好地控制应删除的内容以及从哪条路径中删除。

您也可以重复使用下面的一些代码。

几个星期前我创建了一个示例程序来删除除原始图像之外的版本,只要添加了新图像并且我正在使用工作流程:

以下代码是一个组件。创建了一个工作流,然后将该类作为流程步骤添加到工作流中,并在任何启动器中设置了相同的工作流,并创建了事件类型。

基本上,我使用了Query builder api和workflow api,并且能够实现相同的目标。如果您按照建议使用servlet方式,则可以将path作为参数,然后使用查询构建器api找到renditions文件夹,然后对其进行迭代并删除节点。

将通过查询构建器提取的示例值:

http://localhost:4502/bin/querybuilder.json?path=%2fcontent%2fdam%2fgeometrixx%2ficons&property=jcr%3aprimaryType&property.1_value=nt%3afolder



public void execute(WorkItem item, WorkflowSession wfsession, MetaDataMap args)
            throws WorkflowException {
            try {
                resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
                WorkflowData workflowData = item.getWorkflowData();
                String path = workflowData.getPayload().toString();
                path = path.replace("/jcr:content/renditions", "");
                session = resourceResolver.adaptTo(Session.class);
                Map<String, String> map = new HashMap<String, String>();
                map.put("path", path);
                map.put("property", "jcr:primaryType");
                map.put("property.1_value", "nt:folder");
                Query query = builder.createQuery(PredicateGroup.create(map), session);
                SearchResult result = query.getResult();
                List<Hit> hits = result.getHits();
                Resource renditionResource = resourceResolver.resolve(hits.get(0).getPath());   
                Iterator<Resource> reneditionIterator = renditionResource.listChildren();
                while(reneditionIterator.hasNext()){
                    Resource specificResource=  reneditionIterator.next();
                    Node renditionNode = specificResource.adaptTo(Node.class);
                    if(!renditionNode.getName().equals("original")){
                        renditionNode.remove();
                    }
                }

            } catch (LoginException e) {
                e.printStackTrace();
            } 

Servlet

ResourceResolver resourceResolver = slingHTTPrequest.getResourceResolver();
            String path = slingHTTPrequest.getParameter("path");
            session = resourceResolver.adaptTo(Session.class);
            Map<String, String> map = new HashMap<String, String>();
            map.put("path", path);
            map.put("property", "jcr:primaryType");
            map.put("property.1_value", "nt:folder");
            Query query = builder.createQuery(PredicateGroup.create(map), session);
            SearchResult result = query.getResult();
            List<Hit> hits = result.getHits();
            for(Hit hit: hits){
                Resource renditionResource = resourceResolver.resolve(hit.getPath());   
                Iterator<Resource> reneditionIterator = renditionResource.listChildren();
                 while(reneditionIterator.hasNext()){
                    Resource specificResource=  reneditionIterator.next();
                    Node renditionNode = specificResource.adaptTo(Node.class);
                    LoggerUtil.debugLog(this.getClass(),"Node name will be {}",renditionNode.getName());
                    if(!renditionNode.getName().equals("original")){
                        LoggerUtil.debugLog(this.getClass(), "removing rendition, parent node name is{}",renditionNode.getParent().getParent().getParent().getName());
                        renditionNode.remove();
                    }
                 }
            }