Buscar..


Archivo de versión automática si existe con el mismo nombre

Si el archivo existe con el mismo nombre, se actualizará con una nueva versión.

Para el registro de clase de bean en el archivo service-context.xml

<bean id="autoVersionByNameBehaviour" class="test.demoamp.AutoVersionByNameBehaviour" init-method="init">
     <property name="policyComponent" ref="policyComponent"/>
     <property name="nodeService" ref="NodeService"/>
     <property name="contentService" ref="ContentService"/>
     <property name="siteService" ref="SiteService" />
     <property name="fileFolderService" ref="FileFolderService"/>
     
     <property name="activityService" ref="activityService"/>
     </bean>

y la clase de java

import java.net.URLEncoder;

import org.alfresco.model.ContentModel;
import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.Behaviour;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.service.cmr.activities.ActivityService;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.site.SiteInfo;
import org.alfresco.service.cmr.site.SiteService;
import org.apache.commons.io.FilenameUtils;
import org.json.JSONStringer;
import org.json.JSONWriter;

public class AutoVersionByNameBehaviour
implements NodeServicePolicies.OnCreateNodePolicy {
    private PolicyComponent policyComponent;
    private NodeService nodeService;
    private ContentService contentService;
    private ActivityService activityService;
    private SiteService siteService;
    private FileFolderService fileFolderService;

    public void init() {
        this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateNodePolicy.QNAME, ContentModel.TYPE_CONTENT, (Behaviour)new JavaBehaviour((Object)this, "onCreateNode", Behaviour.NotificationFrequency.TRANSACTION_COMMIT));
    }

    public void onCreateNode(ChildAssociationRef childAssocRef) {
        NodeRef previouslyExistentDoc;
        NodeRef uploadedNodeRef = childAssocRef.getChildRef();
        if (this.nodeService.exists(uploadedNodeRef) && this.isContentDoc(uploadedNodeRef) && (previouslyExistentDoc = this.existedPreviousDocument(uploadedNodeRef)) != null) {
            ContentReader reader = this.contentService.getReader(uploadedNodeRef, ContentModel.PROP_CONTENT);
            ContentWriter writer = this.contentService.getWriter(previouslyExistentDoc, ContentModel.PROP_CONTENT, true);
            writer.putContent(reader);
            this.nodeService.addAspect(uploadedNodeRef, ContentModel.ASPECT_HIDDEN, null);
            this.postActivityUpdated(previouslyExistentDoc);
            this.nodeService.deleteNode(uploadedNodeRef);
        }
    }

    private void postActivityUpdated(NodeRef nodeRef) {
        SiteInfo siteInfo = this.siteService.getSite(nodeRef);
        String jsonActivityData = "";
        try {
            JSONWriter jsonWriter = new JSONStringer().object();
            jsonWriter.key("title").value((Object)this.nodeService.getProperty(nodeRef, ContentModel.PROP_NAME).toString());
            jsonWriter.key("nodeRef").value((Object)nodeRef.toString());
            StringBuilder sb = new StringBuilder("document-details?nodeRef=");
            sb.append(URLEncoder.encode(nodeRef.toString(), "UTF-8"));
            jsonWriter.key("page").value((Object)sb.toString());
            jsonActivityData = jsonWriter.endObject().toString();
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
        FileInfo fileInfo = this.fileFolderService.getFileInfo(nodeRef);
        this.activityService.postActivity("org.alfresco.documentlibrary.file-updated", siteInfo == null ? null : siteInfo.getShortName(), siteInfo == null ? null : "documentLibrary", jsonActivityData, null, fileInfo);
    }

    private boolean isContentDoc(NodeRef nodeRef) {
        return this.nodeService.getType(this.nodeService.getPrimaryParent(nodeRef).getParentRef()).isMatch(ContentModel.TYPE_FOLDER);
    }

    private NodeRef existedPreviousDocument(NodeRef currentNodeRef) {
        String fileName = AutoVersionByNameBehaviour.cleanNumberedSuffixes(this.nodeService.getProperty(currentNodeRef, ContentModel.PROP_NAME).toString());
        if (!fileName.equals(this.nodeService.getProperty(currentNodeRef, ContentModel.PROP_NAME).toString())) {
            NodeRef folder = this.nodeService.getPrimaryParent(currentNodeRef).getParentRef();
            return this.nodeService.getChildByName(folder, ContentModel.ASSOC_CONTAINS, fileName);
        }
        return null;
    }

    public static String cleanNumberedSuffixes(String fileName) {
        String cleanedFileName = fileName;
        String baseName = FilenameUtils.getBaseName((String)fileName);
        if (baseName.indexOf("-") != -1 && AutoVersionByNameBehaviour.isInteger(baseName.substring(baseName.lastIndexOf("-") + 1, baseName.length()))) {
            return baseName.substring(0, baseName.lastIndexOf("-")) + FilenameUtils.EXTENSION_SEPARATOR_STR + FilenameUtils.getExtension((String)fileName);
        }
        return cleanedFileName;
    }

    public static boolean isInteger(String s) {
        boolean isValidInteger = false;
        try {
            Integer.parseInt(s);
            isValidInteger = true;
        }
        catch (NumberFormatException var2_2) {
            // empty catch block
        }
        return isValidInteger;
    }

    public void setPolicyComponent(PolicyComponent policyComponent) {
        this.policyComponent = policyComponent;
    }

    public void setNodeService(NodeService nodeService) {
        this.nodeService = nodeService;
    }

    public void setContentService(ContentService contentService) {
        this.contentService = contentService;
    }

    public void setActivityService(ActivityService activityService) {
        this.activityService = activityService;
    }

    public void setSiteService(SiteService siteService) {
        this.siteService = siteService;
    }

    public void setFileFolderService(FileFolderService fileFolderService) {
        this.fileFolderService = fileFolderService;
    }

}



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow