1 package nl.hippo.cms.workflows.multiplesitessite; 2 3 import com.opensymphony.module.propertyset.PropertySet; 4 import com.opensymphony.workflow.WorkflowException; 5 import com.opensymphony.workflow.spi.WorkflowEntry; 6 import java.util.Date ; 7 import java.util.Map ; 8 import nl.hippo.cms.repositorylocation.CommonRepositoryLocationRoles; 9 import nl.hippo.cms.repositorylocation.RepositoryLocation; 10 import nl.hippo.cms.workflows.shared.ProjectWorkflowQuartzJob; 11 import nl.hippo.cms.workflows.shared.WorkflowExtensionUtil; 12 import nl.hippo.componentcontainers.AvalonSpringBridge; 13 import nl.hippo.servermanager.Project; 14 import nl.hippo.servermanager.ServerManager; 15 import nl.hippo.uidgenerator.UIDGenerator; 16 import org.apache.avalon.framework.CascadingException; 17 import org.apache.commons.httpclient.HttpState; 18 import org.quartz.JobDataMap; 19 import org.quartz.JobDetail; 20 import org.quartz.Scheduler; 21 import org.quartz.SimpleTrigger; 22 import org.quartz.Trigger; 23 24 public class StartPublicationTaskFunction extends VersioningHelperComponent 25 { 26 27 public StartPublicationTaskFunction() 28 { 29 super(); 30 } 31 32 public void executeImpl(Map transientVars, Map args, PropertySet ps) throws WorkflowException 33 { 34 try 35 { 36 WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry"); 37 Date publicationDate = WorkflowExtensionUtil.getDateAndTime(ps.getString("scheduledPublicationDate")); 38 String projectName = (String ) transientVars.get("projectName"); 39 40 AvalonSpringBridge asb = (AvalonSpringBridge) m_manager.lookup(AvalonSpringBridge.ROLE); 41 try 42 { 43 ServerManager sm = (ServerManager) asb.getBean("serverManager"); 44 Project p = sm.getServer().getProject(projectName); 45 Scheduler scheduler = p.getJobScheduler(); 46 47 String publicationTaskId = UIDGenerator.generateUID(); 48 ps.setString("publicationTaskId", publicationTaskId); 49 JobDetail jobDetail = new JobDetail(publicationTaskId, projectName, ProjectWorkflowQuartzJob.class); 50 JobDataMap jobDataMap = new JobDataMap(); 51 jobDataMap.put("className", PublicationTask.class.getName()); 52 jobDataMap.put("workflowId", entry.getId()); 53 jobDataMap.put("projectName", projectName); 54 55 RepositoryLocation editorRepo = (RepositoryLocation) m_manager 56 .lookup(CommonRepositoryLocationRoles.EDITOR_REPOSITORY_LOCATION_ROLE); 57 try 58 { 59 String relativeLocation = ps.getString("location"); 60 String location = editorRepo.getRepositoryInformation().getAbsoluteUri( 61 relativeLocation); 62 HttpState httpState = (HttpState) transientVars.get("httpstate"); 63 int versionToPublish = getCurrentVersion(location, httpState); 64 jobDataMap.put("versionToPublish", versionToPublish); 65 } 66 finally 67 { 68 m_manager.release(editorRepo); 69 } 70 71 jobDetail.setJobDataMap(jobDataMap); 72 73 Trigger trigger = new SimpleTrigger(jobDetail.getName(), jobDetail.getGroup(), publicationDate); 74 scheduler.scheduleJob(jobDetail, trigger); 75 } 76 finally 77 { 78 m_manager.release(asb); 79 } 80 } 81 catch (Exception e) 82 { 83 Throwable t = e; 84 while (t != null && t instanceof CascadingException) 85 { 86 t = ((CascadingException) t).getCause(); 87 } 88 throw new WorkflowException(t); 89 } 90 } 91 92 } 93 | Popular Tags |