Package com.dotmarketing.quartz.job

Source Code of com.dotmarketing.quartz.job.ResetPermissionsJob

/**
*
*/
package com.dotmarketing.quartz.job;

import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
import java.util.UUID;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;

import com.dotmarketing.beans.Inode;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.PermissionAPI;
import com.dotmarketing.business.Permissionable;
import com.dotmarketing.business.UserAPI;
import com.dotmarketing.common.db.DotConnect;
import com.dotmarketing.db.DbConnectionFactory;
import com.dotmarketing.db.HibernateUtil;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotHibernateException;
import com.dotmarketing.exception.DotRuntimeException;
import com.dotmarketing.exception.DotSecurityException;
import com.dotmarketing.factories.InodeFactory;
import com.dotmarketing.portlets.contentlet.business.ContentletAPI;
import com.dotmarketing.portlets.contentlet.business.DotContentletStateException;
import com.dotmarketing.portlets.contentlet.business.HostAPI;
import com.dotmarketing.quartz.QuartzUtils;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.UtilMethods;
import com.liferay.portal.model.User;

/**
* @author David H Torres
*/
public class ResetPermissionsJob implements Job {
 
  /* (non-Javadoc)
   * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
   */
 
  public static void triggerJobImmediately (Permissionable perm) {
    String randomID = UUID.randomUUID().toString();
    JobDataMap dataMap = new JobDataMap();
   
    dataMap.put("permissionableId", perm.getPermissionId());
   
    JobDetail jd = new JobDetail("ResetPermissionsJob-" + randomID, "dotcms_jobs", ResetPermissionsJob.class);
    jd.setJobDataMap(dataMap);
    jd.setDurability(false);
    jd.setVolatility(false);
    jd.setRequestsRecovery(true);
   
    long startTime = System.currentTimeMillis();
    SimpleTrigger trigger = new SimpleTrigger("permissionsResetTrigger-"+randomID, "dotcms_triggers"new Date(startTime));
   
    try {
      Scheduler sched = QuartzUtils.getSequentialScheduler();
      sched.scheduleJob(jd, trigger);
    } catch (SchedulerException e) {
      Logger.error(ResetPermissionsJob.class, "Error scheduling the reset of permissions", e);
      throw new DotRuntimeException("Error scheduling the reset of permissions", e);
    }

  }
 
  public ResetPermissionsJob() {
   
  }
 
  public void execute(JobExecutionContext jobContext) throws JobExecutionException {
   
    JobDataMap map = jobContext.getJobDetail().getJobDataMap();

    PermissionAPI permissionAPI = APILocator.getPermissionAPI();
   
    String permissionableId = (String) map.get("permissionableId");
    try {
      HibernateUtil.startTransaction();
      Permissionable permissionable = (Permissionable) retrievePermissionable(permissionableId);
      permissionAPI.resetPermissionsUnder(permissionable);
      HibernateUtil.commitTransaction();
    } catch (Exception e) {
      Logger.error(this, e.getMessage(), e);
      try {
        HibernateUtil.rollbackTransaction();
      } catch (DotHibernateException e1) {
        Logger.error(ResetPermissionsJob.class,e1.getMessage(),e1);
      }
      throw new DotRuntimeException(e.getMessage(), e);
    } finally {
        try {
                HibernateUtil.closeSession();
            } catch (DotHibernateException e) {
                Logger.warn(this, e.getMessage(), e);
            }
            finally {
                DbConnectionFactory.closeConnection();
            }
    }
   
  }
 
  @SuppressWarnings("unchecked")
  private Permissionable retrievePermissionable (String assetId) throws DotDataException, DotSecurityException {
   
    UserAPI userAPI = APILocator.getUserAPI();
    HostAPI hostAPI = APILocator.getHostAPI();
   
    Permissionable perm = null;
   
    //Determining the type
   
    //Host?
    perm = hostAPI.find(assetId, userAPI.getSystemUser(), false);
   
    if(perm == null) {
      //Content?
      ContentletAPI contAPI = APILocator.getContentletAPI();
      try {
        perm = contAPI.findContentletByIdentifier(assetId, false, APILocator.getLanguageAPI().getDefaultLanguage().getId(), userAPI.getSystemUser(), false);
      } catch (DotContentletStateException e) {
      }
    }
   
    if(perm == null) {
     
      DotConnect dc = new DotConnect();
      ArrayList results = new ArrayList();
      String assetType ="";
      dc.setSQL("Select asset_type from identifier where id =?");
      dc.addParam(assetId);
      ArrayList assetResult = dc.loadResults();
      if(assetResult.size()>0){
        assetType = (String) ((Map)assetResult.get(0)).get("asset_type");
      }
      if(UtilMethods.isSet(assetType)){
        dc.setSQL("select i.inode, type from inode i,"+assetType+" a where i.inode = a.inode and a.identifier = ?");
        dc.addParam(assetId);
        results = dc.loadResults();
      }
      if(results.size() > 0) {
        String inode = (String) ((Map)results.get(0)).get("inode");
        perm = InodeFactory.getInode(inode, Inode.class);
      }
     
    }

    if(perm == null || !UtilMethods.isSet(perm.getPermissionId())) {
      perm = InodeFactory.getInode(assetId, Inode.class);
    }
    return perm;
  }

}
TOP

Related Classes of com.dotmarketing.quartz.job.ResetPermissionsJob

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.