From 7c2e7e5e83b767760566015f8d130edc48c1adb8 Mon Sep 17 00:00:00 2001 From: Abhiram Gundala <164050036+Abhitocode@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:03:26 -0400 Subject: [PATCH] business-calendar --- .../kogito/calendar}/BusinessCalendar.java | 2 +- .../org/kie/kogito/process/ProcessConfig.java | 2 ++ .../core/timer/BusinessCalendarImpl.java | 1 + .../process/instance/LightProcessRuntime.java | 2 +- .../process/instance/ProcessRuntimeImpl.java | 20 ++++++++++++++++++- .../impl/WorkflowProcessInstanceImpl.java | 2 +- .../instance/node/StateBasedNodeInstance.java | 2 +- .../process/impl/AbstractProcessConfig.java | 11 +++++++++- .../src/main/resources/calendar.properties | 8 ++++++++ .../config/ProcessConfigQuarkusTemplate.java | 7 +++++-- .../config/ProcessConfigSpringTemplate.java | 7 +++++-- ...ProcessServiceProducerQuarkusTemplate.java | 1 + 12 files changed, 55 insertions(+), 10 deletions(-) rename {jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer => api/kogito-api/src/main/java/org/kie/kogito/calendar}/BusinessCalendar.java (97%) mode change 100755 => 100644 create mode 100644 jbpm/jbpm-flow/src/main/resources/calendar.properties diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendar.java b/api/kogito-api/src/main/java/org/kie/kogito/calendar/BusinessCalendar.java old mode 100755 new mode 100644 similarity index 97% rename from jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendar.java rename to api/kogito-api/src/main/java/org/kie/kogito/calendar/BusinessCalendar.java index 544fbcb6ef3..6e15a6cc0e6 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendar.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/calendar/BusinessCalendar.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.jbpm.process.core.timer; +package org.kie.kogito.calendar; import java.util.Date; diff --git a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessConfig.java b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessConfig.java index 40549bbcd90..f9e689b4305 100644 --- a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessConfig.java +++ b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessConfig.java @@ -20,6 +20,7 @@ import org.kie.kogito.KogitoConfig; import org.kie.kogito.auth.IdentityProvider; +import org.kie.kogito.calendar.BusinessCalendar; import org.kie.kogito.jobs.JobsService; import org.kie.kogito.signal.SignalManagerHub; import org.kie.kogito.uow.UnitOfWorkManager; @@ -38,4 +39,5 @@ public interface ProcessConfig extends KogitoConfig { ProcessVersionResolver versionResolver(); IdentityProvider identityProvider(); + BusinessCalendar getBusinessCalendar(); } diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendarImpl.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendarImpl.java index 29017a62307..04935767197 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendarImpl.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/BusinessCalendarImpl.java @@ -35,6 +35,7 @@ import java.util.regex.Matcher; import org.jbpm.util.PatternConstants; +import org.kie.kogito.calendar.BusinessCalendar; import org.kie.kogito.timer.SessionClock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java index df1b7c5ba69..2b2b9cbd264 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/LightProcessRuntime.java @@ -31,7 +31,7 @@ import org.drools.core.phreak.PropagationEntry; import org.jbpm.process.core.event.EventFilter; import org.jbpm.process.core.event.EventTypeFilter; -import org.jbpm.process.core.timer.BusinessCalendar; +import org.kie.kogito.calendar.BusinessCalendar; import org.jbpm.process.core.timer.DateTimeUtils; import org.jbpm.process.core.timer.Timer; import org.jbpm.ruleflow.core.RuleFlowProcess; diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeImpl.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeImpl.java index 3eaec2fce36..fd4cf66c3ea 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeImpl.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessRuntimeImpl.java @@ -35,7 +35,8 @@ import org.drools.core.time.impl.ThreadSafeTrackableTimeJobFactoryManager; import org.jbpm.process.core.event.EventFilter; import org.jbpm.process.core.event.EventTypeFilter; -import org.jbpm.process.core.timer.BusinessCalendar; +import org.kie.kogito.calendar.BusinessCalendar; +import org.jbpm.process.core.timer.BusinessCalendarImpl; import org.jbpm.process.core.timer.DateTimeUtils; import org.jbpm.process.core.timer.Timer; import org.jbpm.process.instance.event.DefaultSignalManagerFactory; @@ -77,11 +78,14 @@ import org.kie.kogito.services.uow.DefaultUnitOfWorkManager; import org.kie.kogito.signal.SignalManager; import org.kie.kogito.uow.UnitOfWorkManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import static org.jbpm.ruleflow.core.Metadata.TRIGGER_MAPPING_INPUT; public class ProcessRuntimeImpl extends AbstractProcessRuntime { + private static final Logger log = LoggerFactory.getLogger(ProcessRuntimeImpl.class); private InternalKnowledgeRuntime kruntime; private ProcessInstanceManager processInstanceManager; private SignalManager signalManager; @@ -101,6 +105,8 @@ public ProcessRuntimeImpl(Application application, InternalWorkingMemory working unitOfWorkManager = new DefaultUnitOfWorkManager(new CollectingUnitOfWorkFactory()); jobService = new LegacyInMemoryJobService(kogitoProcessRuntime, unitOfWorkManager); this.processEventSupport = new KogitoProcessEventSupportImpl(new NoOpIdentityProvider()); + log.info("initialising process runtime impl"); + initCalendar(); if (isActive()) { initProcessEventListeners(); initStartTimers(); @@ -558,4 +564,16 @@ public void internalExecute(ReteEvaluator reteEvaluator) { signalEvent(type, event); } } + + private void initCalendar() { + try { + log.info("Setting jbpm.business.calendar"); + System.out.println("Setting jbpm.business.calendar"); + BusinessCalendar calendar = new BusinessCalendarImpl(); + kruntime.getEnvironment().set("jbpm.business.calendar", calendar); + } catch (Exception e) { + log.error("calendar.properties could not be loaded"); + e.printStackTrace(); + } + } } diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java index 7ae6edf3fb1..66a7806772a 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java @@ -44,7 +44,7 @@ import org.jbpm.process.core.ContextResolver; import org.jbpm.process.core.context.variable.Variable; import org.jbpm.process.core.context.variable.VariableScope; -import org.jbpm.process.core.timer.BusinessCalendar; +import org.kie.kogito.calendar.BusinessCalendar; import org.jbpm.process.core.timer.DateTimeUtils; import org.jbpm.process.core.timer.Timer; import org.jbpm.process.instance.ContextInstance; diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/node/StateBasedNodeInstance.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/node/StateBasedNodeInstance.java index 554da5acc51..4cdf1de1b30 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/node/StateBasedNodeInstance.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/node/StateBasedNodeInstance.java @@ -29,7 +29,7 @@ import org.drools.core.common.InternalAgenda; import org.drools.core.common.ReteEvaluator; import org.drools.core.rule.consequence.InternalMatch; -import org.jbpm.process.core.timer.BusinessCalendar; +import org.kie.kogito.calendar.BusinessCalendar; import org.jbpm.process.core.timer.DateTimeUtils; import org.jbpm.process.core.timer.Timer; import org.jbpm.process.instance.InternalProcessRuntime; diff --git a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessConfig.java b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessConfig.java index 25d278f628c..246033b9a5c 100644 --- a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessConfig.java +++ b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessConfig.java @@ -25,9 +25,11 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; +import org.jbpm.process.core.timer.BusinessCalendarImpl; import org.kie.api.event.process.ProcessEventListener; import org.kie.kogito.Addons; import org.kie.kogito.auth.IdentityProvider; +import org.kie.kogito.calendar.BusinessCalendar; import org.kie.kogito.event.EventPublisher; import org.kie.kogito.jobs.JobsService; import org.kie.kogito.process.ProcessConfig; @@ -51,6 +53,7 @@ public abstract class AbstractProcessConfig implements ProcessConfig { private final JobsService jobsService; private final ProcessVersionResolver versionResolver; private final IdentityProvider identityProvider; + private final BusinessCalendar businessCalendar; protected AbstractProcessConfig( Iterable workItemHandlerConfig, @@ -62,7 +65,8 @@ protected AbstractProcessConfig( String kogitoService, Iterable unitOfWorkListeners, Iterable versionResolver, - Iterable identityProvider) { + Iterable identityProvider, + BusinessCalendar businessCalendar) { this.workItemHandlerConfig = mergeWorkItemHandler(workItemHandlerConfig, DefaultWorkItemHandlerConfig::new); this.processEventListenerConfig = merge(processEventListenerConfigs, processEventListeners); @@ -72,6 +76,7 @@ protected AbstractProcessConfig( this.jobsService = orDefault(jobsService, () -> null); this.versionResolver = orDefault(versionResolver, () -> null); this.identityProvider = orDefault(identityProvider, NoOpIdentityProvider::new); + this.businessCalendar = businessCalendar; eventPublishers.forEach(publisher -> unitOfWorkManager().eventManager().addPublisher(publisher)); unitOfWorkListeners.forEach(listener -> unitOfWorkManager().register(listener)); @@ -123,6 +128,10 @@ public ProcessVersionResolver versionResolver() { public IdentityProvider identityProvider() { return identityProvider; } + @Override + public BusinessCalendar getBusinessCalendar() { + return this.businessCalendar; + } public org.kie.kogito.Addons addons() { return Addons.EMTPY; diff --git a/jbpm/jbpm-flow/src/main/resources/calendar.properties b/jbpm/jbpm-flow/src/main/resources/calendar.properties new file mode 100644 index 00000000000..d4396b163da --- /dev/null +++ b/jbpm/jbpm-flow/src/main/resources/calendar.properties @@ -0,0 +1,8 @@ +business.days.per.week=3 +business.hours.per.day=9 +business.start.hour=8 +business.end.hour=17 +business.holidays=2024-06-24, 2024-08-01:2024-08-30 +business.holiday.date.format=yyyy-MM-dd +business.weekend.days=5,6,7,1 +#business.cal.timezone= system default timezone.. diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigQuarkusTemplate.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigQuarkusTemplate.java index 19491e3b91b..4d9ded308f0 100644 --- a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigQuarkusTemplate.java +++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigQuarkusTemplate.java @@ -22,6 +22,7 @@ import org.kie.api.event.process.ProcessEventListener; import org.kie.kogito.auth.IdentityProvider; +import org.kie.kogito.calendar.BusinessCalendar; import org.kie.kogito.event.EventPublisher; import org.kie.kogito.jobs.JobsService; import org.kie.kogito.process.ProcessEventListenerConfig; @@ -44,7 +45,8 @@ public ProcessConfig( org.kie.kogito.config.ConfigBean configBean, Instance unitOfWorkEventListeners, Instance versionResolver, - Instance identityProvider) { + Instance identityProvider, + BusinessCalendar businessCalendar) { super(workItemHandlerConfig, processEventListenerConfigs, @@ -55,7 +57,8 @@ public ProcessConfig( configBean.getServiceUrl(), unitOfWorkEventListeners, versionResolver, - identityProvider); + identityProvider, + businessCalendar); } } diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigSpringTemplate.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigSpringTemplate.java index df77c11433b..018dbe81a60 100644 --- a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigSpringTemplate.java +++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/config/ProcessConfigSpringTemplate.java @@ -22,6 +22,7 @@ import org.kie.api.event.process.ProcessEventListener; import org.kie.kogito.auth.IdentityProvider; +import org.kie.kogito.calendar.BusinessCalendar; import org.kie.kogito.event.EventPublisher; import org.kie.kogito.jobs.JobsService; import org.kie.kogito.process.ProcessEventListenerConfig; @@ -44,7 +45,8 @@ public ProcessConfig( org.kie.kogito.config.ConfigBean configBean, List unitOfWorkEventListeners, List versionResolver, - List identityProvider) { + List identityProvider, + BusinessCalendar businessCalendar) { super(workItemHandlerConfig, processEventListenerConfigs, @@ -55,6 +57,7 @@ public ProcessConfig( configBean.getServiceUrl(), unitOfWorkEventListeners, versionResolver, - identityProvider); + identityProvider, + businessCalendar); } } diff --git a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/producer/ProcessServiceProducerQuarkusTemplate.java b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/producer/ProcessServiceProducerQuarkusTemplate.java index 919f3ac3134..9fcc68d57fd 100644 --- a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/producer/ProcessServiceProducerQuarkusTemplate.java +++ b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/producer/ProcessServiceProducerQuarkusTemplate.java @@ -30,6 +30,7 @@ @ApplicationScoped public class ProcessServiceProducer { + @Produces public ProcessService processService(Application application){ return new ProcessServiceImpl(application);