Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.millim.ged.behavior;
- import java.io.Serializable;
- import java.text.ParseException;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.ThreadPoolExecutor;
- import java.util.concurrent.Executors;
- import org.alfresco.error.AlfrescoRuntimeException;
- import org.alfresco.model.ContentModel;
- import org.alfresco.repo.node.NodeServicePolicies;
- import org.alfresco.repo.policy.Behaviour;
- import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
- import org.alfresco.repo.policy.JavaBehaviour;
- import org.alfresco.repo.policy.PolicyComponent;
- import org.alfresco.repo.security.authentication.AuthenticationUtil;
- import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
- import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
- import org.alfresco.repo.transaction.RetryingTransactionHelper;
- import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
- import org.alfresco.service.cmr.repository.ChildAssociationRef;
- import org.alfresco.service.cmr.repository.ContentService;
- import org.alfresco.service.cmr.repository.NodeRef;
- import org.alfresco.service.cmr.repository.NodeService;
- import org.alfresco.service.cmr.search.SearchService;
- import org.alfresco.service.namespace.NamespaceService;
- import org.alfresco.service.namespace.QName;
- import org.alfresco.service.transaction.TransactionService;
- import org.alfresco.util.transaction.TransactionListener;
- import org.alfresco.util.transaction.TransactionListenerAdapter;
- import org.apache.log4j.Logger;
- import com.ibm.icu.text.SimpleDateFormat;
- import com.millim.ged.model.BillsModel;
- import com.millim.ged.model.smartfolder.BillSmartFolder;
- public class BillFolderBehaviors implements NodeServicePolicies.BeforeCreateNodePolicy,
- NodeServicePolicies.OnCreateNodePolicy, NodeServicePolicies.BeforeDeleteNodePolicy, NodeServicePolicies.OnUpdateNodePolicy {
- //private static final String UPDATED_NODE = BillFolderBehaviors.class.getName() + ".updatedNode";
- // Dependencies
- private NodeService nodeService;
- private PolicyComponent policyComponent;
- private SearchService searchService;
- private ContentService contentService;
- private TransactionService transactionService;
- private ThreadPoolExecutor threadPoolExecutor;
- private TransactionListener transactionListener;
- // Behaviours
- private Behaviour beforeCreateNode;
- private Behaviour onCreateNode;
- private Behaviour beforeDeleteNode;
- private Behaviour onUpdateNode;
- private Logger logger = Logger.getLogger(BillFolderBehaviors.class);
- private final QName A_BILLFOLDER = QName.createQName(BillsModel.NAMESPACE_MILLIM_BILLS_CONTENT_MODEL,
- BillsModel.ASPECT_BIL_BILLFOLDER);
- private final QName T_BILL = QName.createQName(BillsModel.NAMESPACE_MILLIM_BILLS_CONTENT_MODEL,
- BillsModel.TYPE_BIL_BILL);
- private final QName P_PROVIDER = QName.createQName(BillsModel.NAMESPACE_MILLIM_BILLS_CONTENT_MODEL,
- BillsModel.PROP_PROVIDER);
- private final QName P_ID = QName.createQName(BillsModel.NAMESPACE_MILLIM_BILLS_CONTENT_MODEL, BillsModel.PROP_ID);
- private final QName P_DATE = QName.createQName(BillsModel.NAMESPACE_MILLIM_BILLS_CONTENT_MODEL,
- BillsModel.PROP_DATE);
- public void init() {
- if (logger.isDebugEnabled())
- logger.debug("Initializing BillFolder behaviors");
- this.transactionListener = new BillTransactionListener();
- this.threadPoolExecutor = (ThreadPoolExecutor)Executors.newCachedThreadPool();
- // Create behaviours
- this.beforeCreateNode = new JavaBehaviour(this, "beforeCreateNode", NotificationFrequency.EVERY_EVENT);
- this.onCreateNode = new JavaBehaviour(this, "onCreateNode", NotificationFrequency.EVERY_EVENT);
- this.beforeDeleteNode = new JavaBehaviour(this, "beforeDeleteNode", NotificationFrequency.EVERY_EVENT);
- this.onUpdateNode = new JavaBehaviour(this, "onUpdateNode", NotificationFrequency.TRANSACTION_COMMIT);
- // Bind behaviours to node policies
- this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "beforeCreateNode"),
- ContentModel.TYPE_FOLDER, this.beforeCreateNode);
- this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onCreateNode"),
- ContentModel.TYPE_CONTENT, this.onCreateNode);
- this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteNode"),
- ContentModel.TYPE_CONTENT, this.beforeDeleteNode);
- this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateNode"),
- BillsModel.TYPE_BIL_BILL, this.onUpdateNode);
- }
- @Override
- public void beforeCreateNode(NodeRef parentRef, QName assocTypeQName, QName assocQName, QName nodeTypeQName) {
- if (nodeService.hasAspect(parentRef, A_BILLFOLDER)) {
- throw new AlfrescoRuntimeException("Folders are not allowed in Bill Folders");
- }
- }
- @Override
- public void onCreateNode(ChildAssociationRef association) {
- NodeRef content = association.getChildRef();
- if (nodeService.hasAspect(association.getParentRef(), A_BILLFOLDER)) {
- AlfrescoTransactionSupport.bindListener(transactionListener);
- this.assignProperties(content);
- }
- }
- @Override
- public void beforeDeleteNode(NodeRef content) {
- /*if (0 == nodeService.getType(content).compareTo(T_BILL)) {
- AlfrescoTransactionSupport.bindListener(transactionListener);
- }*/
- }
- @Override
- public void onUpdateNode(NodeRef content) {
- if (nodeService.exists(content) && 0 == nodeService.getType(content).compareTo(T_BILL)) {
- this.assignProperties(content);
- AlfrescoTransactionSupport.bindListener(transactionListener);
- }
- }
- private class BillTransactionListener extends TransactionListenerAdapter implements TransactionListener {
- @Override
- public void afterCommit() {
- try {
- Runnable runnable = new JSONUpdate();
- threadPoolExecutor.execute(runnable);
- } catch (Exception e) {
- throw new AlfrescoRuntimeException(e.getMessage());
- }
- }
- }
- private class JSONUpdate implements Runnable{
- @Override
- public void run() {
- AuthenticationUtil.runAsSystem(new RunAsWork<Void>(){
- @Override
- public Void doWork() throws Exception {
- RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>() {
- @Override
- public Void execute() throws Throwable {
- BillSmartFolder bsf = new BillSmartFolder("Dossiers virtuels", searchService, nodeService);
- bsf.updateJSONFile(contentService);
- return null;
- }
- };
- try {
- RetryingTransactionHelper txnHelper =
- transactionService.getRetryingTransactionHelper();
- txnHelper.doInTransaction(callback, false, true);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- return null;
- }
- });
- }
- }
- private void assignProperties(NodeRef node) {
- Map<QName, Serializable> props = new HashMap<QName, Serializable>();
- SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
- String nodeName = (String) nodeService.getProperty(node, ContentModel.PROP_NAME);
- String[] nameParts = nodeName.split("_");
- nodeService.setType(node, T_BILL);
- props.put(P_PROVIDER, nameParts[0]);
- props.put(P_ID, nameParts[1]);
- try {
- props.put(P_DATE, sdf.parse(nameParts[2]));
- } catch (ParseException e) {
- logger.error(e.getMessage());
- }
- nodeService.addProperties(node, props);
- }
- public void setNodeService(NodeService nodeService) {
- this.nodeService = nodeService;
- }
- public void setPolicyComponent(PolicyComponent policyComponent) {
- this.policyComponent = policyComponent;
- }
- public void setSearchService(SearchService searchService) {
- this.searchService = searchService;
- }
- public void setContentService(ContentService contentService) {
- this.contentService = contentService;
- }
- public void setTransactionService(TransactionService transactionService){
- this.transactionService = transactionService;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement