001/*-
002 * #%L
003 * HAPI FHIR JPA Server - Batch2 Task Processor
004 * %%
005 * Copyright (C) 2014 - 2024 Smile CDR, Inc.
006 * %%
007 * Licensed under the Apache License, Version 2.0 (the "License");
008 * you may not use this file except in compliance with the License.
009 * You may obtain a copy of the License at
010 *
011 *      http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 * #L%
019 */
020package ca.uhn.fhir.batch2.coordinator;
021
022import ca.uhn.fhir.batch2.api.IJobMaintenanceService;
023import ca.uhn.fhir.batch2.api.IJobPersistence;
024import ca.uhn.fhir.batch2.channel.BatchJobSender;
025import ca.uhn.fhir.batch2.model.JobInstance;
026import ca.uhn.fhir.batch2.model.JobWorkCursor;
027import ca.uhn.fhir.batch2.model.WorkChunk;
028import ca.uhn.fhir.model.api.IModelJson;
029import jakarta.annotation.Nonnull;
030
031public class JobStepExecutorFactory {
032        private final IJobPersistence myJobPersistence;
033        private final BatchJobSender myBatchJobSender;
034        private final WorkChunkProcessor myJobStepExecutorSvc;
035        private final IJobMaintenanceService myJobMaintenanceService;
036        private final JobDefinitionRegistry myJobDefinitionRegistry;
037
038        public JobStepExecutorFactory(
039                        @Nonnull IJobPersistence theJobPersistence,
040                        @Nonnull BatchJobSender theBatchJobSender,
041                        @Nonnull WorkChunkProcessor theExecutorSvc,
042                        @Nonnull IJobMaintenanceService theJobMaintenanceService,
043                        @Nonnull JobDefinitionRegistry theJobDefinitionRegistry) {
044                myJobPersistence = theJobPersistence;
045                myBatchJobSender = theBatchJobSender;
046                myJobStepExecutorSvc = theExecutorSvc;
047                myJobMaintenanceService = theJobMaintenanceService;
048                myJobDefinitionRegistry = theJobDefinitionRegistry;
049        }
050
051        public <PT extends IModelJson, IT extends IModelJson, OT extends IModelJson>
052                        JobStepExecutor<PT, IT, OT> newJobStepExecutor(
053                                        @Nonnull JobInstance theInstance,
054                                        WorkChunk theWorkChunk,
055                                        @Nonnull JobWorkCursor<PT, IT, OT> theCursor) {
056                return new JobStepExecutor<>(
057                                myJobPersistence,
058                                theInstance,
059                                theWorkChunk,
060                                theCursor,
061                                myJobStepExecutorSvc,
062                                myJobMaintenanceService,
063                                myJobDefinitionRegistry);
064        }
065}