View Javadoc
1   package org.exoplatform.services.cms.scheduler;
2   
3   import org.exoplatform.services.log.ExoLogger;
4   import org.exoplatform.services.log.Log;
5   import org.exoplatform.services.scheduler.JobInfo;
6   import org.exoplatform.services.scheduler.JobSchedulerService;
7   import org.exoplatform.services.scheduler.PeriodInfo;
8   import org.exoplatform.services.wcm.utils.WCMCoreUtils;
9   import org.quartz.Job;
10  import org.quartz.JobDataMap;
11  import org.quartz.JobExecutionContext;
12  import org.quartz.JobExecutionException;
13  
14  import javax.jcr.Node;
15  import javax.jcr.RepositoryException;
16  import javax.jcr.Session;
17  import java.util.Calendar;
18  
19  /**
20   * Created by The eXo Platform SEA
21   * Author : eXoPlatform
22   * toannh@exoplatform.com
23   * On 8/5/15
24   * Implement job to control version of documents
25   */
26  public class DocumentAutoVersionJob implements Job {
27  
28    private static final Log log = ExoLogger.getLogger(DocumentAutoVersionJob.class);
29  
30    private static final String DOCUMENT_AUTO_JOB_NAME = "Remove_expired_version";
31    private static JobSchedulerService schedulerService = WCMCoreUtils.getService(JobSchedulerService.class);
32  
33    @Override
34    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
35      log.info("Job is running: " + jobExecutionContext);
36      JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
37      String nodeUUID  = jobDataMap.getString("nodeUUID");
38      String workspace = jobDataMap.getString("workspace");
39      int day          = Integer.parseInt(jobDataMap.getString("day"));
40  
41      try{
42        Session session = WCMCoreUtils.getUserSessionProvider().getSession(workspace, WCMCoreUtils.getRepository());
43        Node currentNode = session.getNodeByUUID(nodeUUID);
44        if(currentNode.getBaseVersion().getCreated().before(day) || currentNode.getBaseVersion().getCreated().equals(day)){
45          Node parent = currentNode.getParent();
46          currentNode.remove();
47          log.info("delete node path: "+currentNode.getPath(), " uuid: "+currentNode.getUUID());
48          parent.save();
49        }
50      }catch(RepositoryException re){
51  
52      }
53  
54      removeJob(nodeUUID);
55    }
56  
57    public static void removeJob(String nodeUUID) {
58      try {
59        schedulerService.removeJob(new JobInfo(DOCUMENT_AUTO_JOB_NAME, "", DocumentAutoVersionJob.class));
60      } catch (Exception ex) {
61        log.error(ex.getMessage());
62      }
63    }
64  
65    public static void addJob(String workspace, String nodeUUID, int day) throws Exception {
66      JobInfo jobInfo = new JobInfo(DocumentAutoVersionJob.class);
67      jobInfo.setJobName(DOCUMENT_AUTO_JOB_NAME);
68      jobInfo.setDescription("Remove expired versions which created from Document Auto Versioning");
69      JobDataMap jobDataMap = new JobDataMap();
70      jobDataMap.put("workspace", workspace);
71      jobDataMap.put("nodeUUID", nodeUUID);
72      jobDataMap.put("day", day);
73      PeriodInfo periodInfo = new PeriodInfo(Calendar.getInstance().getTime(), null, -1, day * 864001000);
74      schedulerService.addPeriodJob(jobInfo, periodInfo, jobDataMap);
75    }
76  
77  }