1 package org.exoplatform.ecm.webui.component.explorer.auditing;
2
3 import javax.jcr.AccessDeniedException;
4 import javax.jcr.Node;
5 import javax.jcr.lock.LockException;
6
7 import org.exoplatform.ecm.webui.component.explorer.UIJCRExplorer;
8 import org.exoplatform.ecm.webui.utils.Utils;
9 import org.exoplatform.services.jcr.ext.audit.AuditService;
10 import org.exoplatform.services.log.ExoLogger;
11 import org.exoplatform.services.log.Log;
12 import org.exoplatform.services.wcm.utils.WCMCoreUtils;
13 import org.exoplatform.web.application.ApplicationMessage;
14 import org.exoplatform.webui.application.WebuiRequestContext;
15 import org.exoplatform.webui.config.annotation.ComponentConfig;
16 import org.exoplatform.webui.config.annotation.EventConfig;
17 import org.exoplatform.webui.core.UIApplication;
18 import org.exoplatform.webui.core.UIContainer;
19 import org.exoplatform.webui.core.UIPopupComponent;
20 import org.exoplatform.webui.event.Event;
21 import org.exoplatform.webui.event.EventListener;
22
23
24
25
26
27
28
29 @ComponentConfig(
30 type = UIActivateAuditing.class,
31 template = "app:/groovy/webui/component/explorer/auditing/UIActivateAuditing.gtmpl",
32 events = {
33 @EventConfig(listeners = UIActivateAuditing.EnableAuditingActionListener.class),
34 @EventConfig(listeners = UIActivateAuditing.CancelActionListener.class)
35 }
36 )
37
38 public class UIActivateAuditing extends UIContainer implements UIPopupComponent {
39 private static final Log LOG = ExoLogger.getLogger(UIActivateAuditing.class.getName());
40 public UIActivateAuditing() throws Exception {}
41
42 public void activate() {}
43
44 public void deActivate() {}
45
46
47
48
49
50
51 static public class EnableAuditingActionListener extends EventListener<UIActivateAuditing> {
52 public void execute(Event<UIActivateAuditing> event) throws Exception {
53 try {
54 UIActivateAuditing uiActivateAuditing = event.getSource();
55 UIJCRExplorer uiExplorer = uiActivateAuditing.getAncestorOfType(UIJCRExplorer.class) ;
56 Node currentNode = uiExplorer.getCurrentNode() ;
57
58 currentNode.addMixin(Utils.EXO_AUDITABLE);
59 AuditService auditService = WCMCoreUtils.getService(AuditService.class);
60 if (!auditService.hasHistory(currentNode))
61 auditService.createHistory(currentNode);
62 currentNode.save() ;
63
64 currentNode.getSession().save();
65 currentNode.getSession().refresh(true) ;
66 uiExplorer.updateAjax(event) ;
67 } catch(LockException lockException){
68 UIActivateAuditing uiActivateAuditing = event.getSource();
69 UIJCRExplorer uiExplorer = uiActivateAuditing.getAncestorOfType(UIJCRExplorer.class) ;
70 WebuiRequestContext contx = event.getRequestContext();
71 UIApplication uiApp = uiExplorer.getAncestorOfType(UIApplication.class);
72 Object[] arg = { uiExplorer.getCurrentNode().getPath() };
73 uiApp.addMessage(new ApplicationMessage("UIPopupMenu.msg.node-locked", arg, ApplicationMessage.WARNING)) ;
74
75 } catch(AccessDeniedException accessDeniedException) {
76 UIActivateAuditing uiActivateAuditing = event.getSource();
77 UIJCRExplorer uiExplorer = uiActivateAuditing.getAncestorOfType(UIJCRExplorer.class) ;
78 WebuiRequestContext contx = event.getRequestContext();
79 UIApplication uiApp = uiExplorer.getAncestorOfType(UIApplication.class);
80 uiApp.addMessage(new ApplicationMessage("UIPopupMenu.msg.access-denied",null,ApplicationMessage.WARNING)) ;
81
82 } catch(Exception e){
83 if (LOG.isErrorEnabled()) {
84 LOG.error("Unexpected error", e);
85 }
86 UIActivateAuditing uiActivateAuditing = event.getSource();
87 UIJCRExplorer uiExplorer = uiActivateAuditing.getAncestorOfType(UIJCRExplorer.class) ;
88 WebuiRequestContext contx = event.getRequestContext();
89 UIApplication uiApp = uiExplorer.getAncestorOfType(UIApplication.class);
90 uiApp.addMessage(new ApplicationMessage("UIPopupMenu.msg.does-not-support-auditing",null,ApplicationMessage.WARNING)) ;
91
92 }
93 }
94 }
95
96 static public class CancelActionListener extends EventListener<UIActivateAuditing> {
97 public void execute(Event<UIActivateAuditing> event) throws Exception {
98 UIJCRExplorer uiExplorer = event.getSource().getAncestorOfType(UIJCRExplorer.class) ;
99 uiExplorer.cancelAction() ;
100 }
101 }
102 }