1 package nl.hippo.cms.workflows.reviewedactions; 2 3 import com.opensymphony.module.propertyset.PropertySet; 4 import com.opensymphony.workflow.WorkflowException; 5 import java.util.Date ; 6 import java.util.Map ; 7 import nl.hippo.cms.workflows.shared.DateUtil; 8 import nl.hippo.cms.workflows.shared.FunctionProviderComponent; 9 import nl.hippo.cms.workflows.shared.WorkflowExtensionUtil; 10 import nl.hippo.cms.workflows.shared.WorkflowSchedulerUtil; 11 import nl.hippo.componentcontainers.AvalonSpringBridge; 12 import nl.hippo.servermanager.Project; 13 import nl.hippo.servermanager.ServerManager; 14 import org.apache.avalon.framework.CascadingException; 15 import org.quartz.Scheduler; 16 17 public class StartUnpublicationTaskFunction extends FunctionProviderComponent { 18 19 private static final int DEBUG_OFFSET_IN_MINUTES = 4; 20 21 public StartUnpublicationTaskFunction() { 22 super(); 23 } 24 25 public void executeImpl(Map transientVars, Map args, PropertySet ps) 26 throws WorkflowException { 27 String unpublicationDateMode = (String ) transientVars.get("unpublicationDateMode"); 28 if (unpublicationDateMode != null && !unpublicationDateMode.equals("never")) 29 { 30 Date unpublicationDate = WorkflowExtensionUtil.getDateAndTime(transientVars.get("unpublicationDate")); 31 String publicationDateMode = (String ) transientVars.get("publicationDateMode"); 32 Date publicationDate = WorkflowExtensionUtil.getDateAndTime(transientVars.get("publicationDate")); 33 if (!DateUtil.isBeforeWithTime(unpublicationDate, publicationDateMode, publicationDate)) 34 { 35 String location = (String ) transientVars.get("location"); 36 String projectName = (String ) transientVars.get("projectname"); 37 38 AvalonSpringBridge asb = null; 39 try 40 { 41 asb = (AvalonSpringBridge) m_manager.lookup(AvalonSpringBridge.ROLE); 42 ServerManager sm = (ServerManager)asb.getBean("serverManager"); 43 Project p = sm.getServer().getProject(projectName); 44 Scheduler scheduler = p.getJobScheduler(); 45 46 WorkflowSchedulerUtil wsu = new WorkflowSchedulerUtil(); 47 wsu.setScheduler(scheduler); 48 wsu.setProjectName(projectName); 49 50 String taskId = wsu.schedule(location, UnpublicationTask.class.getName(), unpublicationDate, DEBUG_OFFSET_IN_MINUTES); 51 52 ps.setString("unpublicationTaskId", taskId); 53 } 54 catch (Exception e) 55 { 56 Throwable t = e; 57 while (t != null && t instanceof CascadingException) 58 { 59 t = ((CascadingException)t).getCause(); 60 } 61 throw new WorkflowException(t); 62 } 63 finally 64 { 65 if (asb != null) 66 { 67 m_manager.release(asb); 68 } 69 } 70 } 71 } 72 } 73 74 } 75 | Popular Tags |