alfresco
Gedrag en beleid
Zoeken…
Automatisch versiebestand als het bestaat met dezelfde naam
Als het bestand met dezelfde naam bestaat, wordt het bestand bijgewerkt met de nieuwe versie.
Voor register bean Class in het bestand 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>
en de Java-klasse
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow