SpringAdvancedBusinessCalendarManagerFactory.java 2.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
package org.activiti5.spring;

import org.activiti5.engine.impl.calendar.AdvancedCycleBusinessCalendar;
import org.activiti5.engine.impl.calendar.BusinessCalendarManager;
import org.activiti5.engine.impl.calendar.DueDateBusinessCalendar;
import org.activiti5.engine.impl.calendar.DurationBusinessCalendar;
import org.activiti5.engine.impl.calendar.MapBusinessCalendarManager;
import org.activiti5.engine.impl.util.DefaultClockImpl;
import org.activiti5.engine.runtime.Clock;

/**
 * Creates an advanced cycle business calendar manager (ACBCM). The ACBCM can handle daylight savings changes when the scheduled time zone is different than the server time zone.
 * <p>
 * Create a factory bean
 * 
 * <pre>
 * &lt;bean id="businessCalendarManagerFactory" class="org.activiti.spring.SpringAdvancedBusinessCalendarManagerFactory" /&gt;
 * </pre>
 * 
 * Add the manager to your org.activiti.spring.SpringProcessEngineConfiguration bean
 * 
 * <pre>
 *  &lt;bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"&gt;
 *    ...
 *    &lt;property name="businessCalendarManager"&gt;
 *      &lt;bean id="advancedBusinessCalendarManager" factory-bean="businessCalendarManagerFactory" factory-method="getBusinessCalendarManager" /&gt;
 *    &lt;/property&gt;
 *    ...
 *  &lt;/bean&gt;
 * </pre>
 * 
 * @author mseiden
 * @see AdvancedCycleBusinessCalendar
 */
public class SpringAdvancedBusinessCalendarManagerFactory {

  private Integer defaultScheduleVersion;

  private Clock clock;

  public Integer getDefaultScheduleVersion() {
    return defaultScheduleVersion;
  }

  public void setDefaultScheduleVersion(Integer defaultScheduleVersion) {
    this.defaultScheduleVersion = defaultScheduleVersion;
  }

  public Clock getClock() {
    if (clock == null) {
      clock = new DefaultClockImpl();
    }
    return clock;
  }

  public void setClock(Clock clock) {
    this.clock = clock;
  }

  public BusinessCalendarManager getBusinessCalendarManager() {
    MapBusinessCalendarManager mapBusinessCalendarManager = new MapBusinessCalendarManager();
    mapBusinessCalendarManager.addBusinessCalendar(DurationBusinessCalendar.NAME, new DurationBusinessCalendar(getClock()));
    mapBusinessCalendarManager.addBusinessCalendar(DueDateBusinessCalendar.NAME, new DueDateBusinessCalendar(getClock()));
    mapBusinessCalendarManager.addBusinessCalendar(AdvancedCycleBusinessCalendar.NAME, new AdvancedCycleBusinessCalendar(getClock(), defaultScheduleVersion));

    return mapBusinessCalendarManager;
  }

}