View Javadoc
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   * The dialog window to activate the auditing.
25   *
26   * @author CPop Bull CS
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     * Event generated by "Activate" button
48     *
49     * @author CPop
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 }