add the behavior in the aspect
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2012 04:06 AM
I am looking for a function that when user add/modify the content in some folders, it can auto select the type according to the data and type of the content, and fullfill the corresponding properties.
So I created an aspect, add the behavior in the aspect, and add this aspect to the specific folder to achieve the funciton.
I defined behavior as followed,
What confused me is that, when I added/modified the content in the folder, only the beforeUpdateNode was triggered, I could only get the nodeRef of the folder, but I was unable to get the nodeRef of the content that I added/modified.
An other question is why OnCreateChildAssociationPolicy hasn’t been triggered when the file being created?
So I created an aspect, add the behavior in the aspect, and add this aspect to the specific folder to achieve the funciton.
I defined behavior as followed,
public class ScanContentBehavior implements NodeServicePolicies.BeforeCreateStorePolicy, NodeServicePolicies.OnCreateStorePolicy, NodeServicePolicies.BeforeCreateNodePolicy, NodeServicePolicies.OnCreateNodePolicy, NodeServicePolicies.OnMoveNodePolicy, NodeServicePolicies.BeforeUpdateNodePolicy, NodeServicePolicies.OnUpdateNodePolicy, NodeServicePolicies.OnUpdatePropertiesPolicy, NodeServicePolicies.BeforeDeleteNodePolicy, NodeServicePolicies.OnDeleteNodePolicy, NodeServicePolicies.BeforeAddAspectPolicy, NodeServicePolicies.OnAddAspectPolicy, NodeServicePolicies.BeforeRemoveAspectPolicy, NodeServicePolicies.OnRemoveAspectPolicy, NodeServicePolicies.BeforeCreateNodeAssociationPolicy, NodeServicePolicies.OnCreateNodeAssociationPolicy, NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.BeforeDeleteChildAssociationPolicy, NodeServicePolicies.OnDeleteChildAssociationPolicy, NodeServicePolicies.OnCreateAssociationPolicy, NodeServicePolicies.OnDeleteAssociationPolicy{ private NodeService nodeService; private PolicyComponent policyComponent; private FileFolderService fileFolderService; // Behaviours private Behaviour beforeCreateStorePolicy; private Behaviour onCreateStorePolicy; private Behaviour beforeCreateNodePolicy; private Behaviour onCreateNodePolicy; private Behaviour onMoveNodePolicy; private Behaviour beforeUpdateNodePolicy; private Behaviour onUpdateNodePolicy; private Behaviour onUpdatePropertiesPolicy; private Behaviour beforeDeleteNodePolicy; private Behaviour onDeleteNodePolicy; private Behaviour beforeAddAspectPolicy; private Behaviour onAddAspectPolicy; private Behaviour beforeRemoveAspectPolicy; private Behaviour onRemoveAspectPolicy; private Behaviour beforeCreateNodeAssociationPolicy; private Behaviour onCreateNodeAssociationPolicy; private Behaviour onCreateChildAssociationPolicy; private Behaviour beforeDeleteChildAssociationPolicy; private Behaviour onDeleteChildAssociationPolicy; private Behaviour onCreateAssociationPolicy; private Behaviour onDeleteAssociationPolicy; private Logger logger = Logger.getLogger(ScanContentBehavior.class); public void init() { if (logger.isDebugEnabled()) logger.debug("Initializing scan content behaviors"); // Create behaviours this.beforeCreateStorePolicy = new JavaBehaviour(this, "beforeCreateStore", NotificationFrequency.TRANSACTION_COMMIT); this.onCreateStorePolicy = new JavaBehaviour(this, "onCreateStore", NotificationFrequency.TRANSACTION_COMMIT); this.beforeCreateNodePolicy = new JavaBehaviour(this, "beforeCreateNode", NotificationFrequency.TRANSACTION_COMMIT); this.onCreateNodePolicy = new JavaBehaviour(this, "onCreateNode", NotificationFrequency.TRANSACTION_COMMIT); this.onMoveNodePolicy = new JavaBehaviour(this, "onMoveNode", NotificationFrequency.TRANSACTION_COMMIT); this.beforeUpdateNodePolicy = new JavaBehaviour(this, "beforeUpdateNode", NotificationFrequency.TRANSACTION_COMMIT); this.onUpdateNodePolicy = new JavaBehaviour(this, "onUpdateNode", NotificationFrequency.TRANSACTION_COMMIT); this.onUpdatePropertiesPolicy = new JavaBehaviour(this, "onUpdateProperties", NotificationFrequency.TRANSACTION_COMMIT); this.beforeDeleteNodePolicy = new JavaBehaviour(this, "beforeDeleteNode", NotificationFrequency.TRANSACTION_COMMIT); this.onDeleteNodePolicy = new JavaBehaviour(this, "onDeleteNode", NotificationFrequency.TRANSACTION_COMMIT); this.beforeAddAspectPolicy = new JavaBehaviour(this, "beforeAddAspect", NotificationFrequency.TRANSACTION_COMMIT); this.onAddAspectPolicy = new JavaBehaviour(this, "onAddAspect", NotificationFrequency.TRANSACTION_COMMIT); this.beforeRemoveAspectPolicy = new JavaBehaviour(this, "beforeRemoveAspect", NotificationFrequency.TRANSACTION_COMMIT); this.onRemoveAspectPolicy = new JavaBehaviour(this, "onRemoveAspect", NotificationFrequency.TRANSACTION_COMMIT); this.beforeCreateNodeAssociationPolicy = new JavaBehaviour(this, "beforeCreateNodeAssociation", NotificationFrequency.TRANSACTION_COMMIT); this.onCreateNodeAssociationPolicy = new JavaBehaviour(this, "onCreateNodeAssociation", NotificationFrequency.TRANSACTION_COMMIT); this.onCreateChildAssociationPolicy = new JavaBehaviour(this, "onCreateChildAssociation", NotificationFrequency.TRANSACTION_COMMIT); this.beforeDeleteChildAssociationPolicy = new JavaBehaviour(this, "beforeDeleteChildAssociation", NotificationFrequency.TRANSACTION_COMMIT); this.onDeleteChildAssociationPolicy = new JavaBehaviour(this, "onDeleteChildAssociation", NotificationFrequency.TRANSACTION_COMMIT); this.onCreateAssociationPolicy = new JavaBehaviour(this, "onCreateAssociation", NotificationFrequency.TRANSACTION_COMMIT); this.onDeleteAssociationPolicy = new JavaBehaviour(this, "onDeleteAssociation", NotificationFrequency.TRANSACTION_COMMIT); // Bind behaviours to node policies this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeCreateStorePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeCreateStorePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateStorePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onCreateStorePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeCreateNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeCreateNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onCreateNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnMoveNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onMoveNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeUpdateNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeUpdateNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnUpdateNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onUpdateNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnUpdatePropertiesPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onUpdatePropertiesPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeDeleteNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeDeleteNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnDeleteNodePolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onDeleteNodePolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeAddAspectPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeAddAspectPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnAddAspectPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onAddAspectPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeRemoveAspectPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeRemoveAspectPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnRemoveAspectPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onRemoveAspectPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeCreateNodeAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeCreateNodeAssociationPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateNodeAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onCreateNodeAssociationPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateChildAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onCreateChildAssociationPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.BeforeDeleteChildAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.beforeDeleteChildAssociationPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnDeleteChildAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onDeleteChildAssociationPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onCreateAssociationPolicy); this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnDeleteAssociationPolicy.QNAME, ErryContentModel.NAMESPACE_ERRY_CONTENT_SCAN, this.onDeleteAssociationPolicy); } @Override public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode) { NodeRef childNodeRef = childAssocRef.getChildRef(); String fileName = (String) nodeService.getProperty(childAssocRef.getChildRef(), ContentModel.PROP_NAME); Map<QName, Serializable> map = nodeService.getProperties(childAssocRef.getChildRef()); ContentDataWithId cdi = (ContentDataWithId)nodeService.getProperty(childNodeRef, ContentModel.PROP_CONTENT); nodeService.getProperty(childNodeRef, ContentModel.TYPE_SYSTEM_FOLDER); nodeService.getProperty(childNodeRef, ContentModel.TYPE_FOLDER); ByteArrayOutputStream ops = new ByteArrayOutputStream(); fileFolderService.getReader(childNodeRef).getContent(ops); byte b[] = ops.toByteArray(); System.out.println(fileName); System.out.println(new String(b)); } @Override public void onCreateNodeAssociation(ChildAssociationRef childAssocRef) { NodeRef childNodeRef = childAssocRef.getChildRef(); String fileName = (String) nodeService.getProperty(childAssocRef.getChildRef(), ContentModel.PROP_NAME); Map<QName, Serializable> map = nodeService.getProperties(childAssocRef.getChildRef()); ContentDataWithId cdi = (ContentDataWithId)nodeService.getProperty(childNodeRef, ContentModel.PROP_CONTENT); nodeService.getProperty(childNodeRef, ContentModel.TYPE_SYSTEM_FOLDER); nodeService.getProperty(childNodeRef, ContentModel.TYPE_FOLDER); ByteArrayOutputStream ops = new ByteArrayOutputStream(); fileFolderService.getReader(childNodeRef).getContent(ops); byte b[] = ops.toByteArray(); System.out.println(fileName); System.out.println(new String(b)); } @Override public void onUpdateNode(NodeRef childNodeRef) { if(!fileFolderService.getFileInfo(childNodeRef).isFolder()){ ContentDataWithId cdi = (ContentDataWithId)nodeService.getProperty(childNodeRef, ContentModel.PROP_CONTENT); nodeService.getProperty(childNodeRef, ContentModel.TYPE_SYSTEM_FOLDER); nodeService.getProperty(childNodeRef, ContentModel.TYPE_FOLDER); ByteArrayOutputStream ops = new ByteArrayOutputStream(); fileFolderService.getReader(childNodeRef).getContent(ops); byte b[] = ops.toByteArray(); System.out.println(new String(b)); } } public NodeService getNodeService() { return nodeService; } public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } public PolicyComponent getPolicyComponent() { return policyComponent; } public void setPolicyComponent(PolicyComponent policyComponent) { this.policyComponent = policyComponent; } public FileFolderService getFileFolderService() { return fileFolderService; } public void setFileFolderService(FileFolderService fileFolderService) { this.fileFolderService = fileFolderService; } @Override public void onDeleteAssociation(AssociationRef nodeAssocRef) { // TODO Auto-generated method stub } @Override public void onCreateAssociation(AssociationRef nodeAssocRef) { // TODO Auto-generated method stub } @Override public void onDeleteChildAssociation(ChildAssociationRef childAssocRef) { // TODO Auto-generated method stub } @Override public void beforeDeleteChildAssociation(ChildAssociationRef childAssocRef) { // TODO Auto-generated method stub } @Override public void beforeCreateNodeAssociation(NodeRef parentNodeRef, QName assocTypeQName, QName assocQName) { // TODO Auto-generated method stub } @Override public void onRemoveAspect(NodeRef nodeRef, QName aspectTypeQName) { // TODO Auto-generated method stub } @Override public void beforeRemoveAspect(NodeRef nodeRef, QName aspectTypeQName) { // TODO Auto-generated method stub } @Override public void onAddAspect(NodeRef nodeRef, QName aspectTypeQName) { // TODO Auto-generated method stub } @Override public void beforeAddAspect(NodeRef nodeRef, QName aspectTypeQName) { // TODO Auto-generated method stub } @Override public void onDeleteNode(ChildAssociationRef childAssocRef, boolean isNodeArchived) { // TODO Auto-generated method stub } @Override public void beforeDeleteNode(NodeRef nodeRef) { // TODO Auto-generated method stub } @Override public void onUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after) { // TODO Auto-generated method stub } @Override public void beforeUpdateNode(NodeRef nodeRef) { // TODO Auto-generated method stub } @Override public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) { // TODO Auto-generated method stub } @Override public void onCreateNode(ChildAssociationRef childAssocRef) { // TODO Auto-generated method stub } @Override public void beforeCreateNode(NodeRef parentRef, QName assocTypeQName, QName assocQName, QName nodeTypeQName) { // TODO Auto-generated method stub } @Override public void onCreateStore(NodeRef rootNodeRef) { } @Override public void beforeCreateStore(QName nodeTypeQName, StoreRef storeRef) { }}
What confused me is that, when I added/modified the content in the folder, only the beforeUpdateNode was triggered, I could only get the nodeRef of the folder, but I was unable to get the nodeRef of the content that I added/modified.
An other question is why OnCreateChildAssociationPolicy hasn’t been triggered when the file being created?
Labels:
- Labels:
-
Archive
1 REPLY 1
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-22-2012 04:17 AM
You have posted this question in the "Alfresco Share Development" forum topic, to increase the chances of getting an answer I suggest you in the future post these type of questions in the "Repository Services" forum topic.
Cheers, Erik
Cheers, Erik
