private IStep DoLoadStep()
        {
            if (_step.Batchlet != null)
            {
                var builder = new TaskletStepBuilder(_container, _step.Id, Int32.Parse(_step.DelayConfig)).Tasklet(_step.Batchlet.Ref);
                builder.Repository(_container.Resolve <IJobRepository>());
                AddListeners(builder);
                return(builder.Build());
            }
            if (_step.Chunk != null)
            {
                var inType  = GetTypeParameter(_container, typeof(IItemReader <>), _step.Chunk.Reader.Ref);
                var outType = GetTypeParameter(_container, typeof(IItemWriter <>), _step.Chunk.Writer.Ref);
                var builder = new SimpleStepBuilder(_container, _step.Id, inType, outType, Int32.Parse(_step.DelayConfig))
                              .Reader(_step.Chunk.Reader.Ref)
                              .Writer(_step.Chunk.Writer.Ref);

                // To determine the master step and create remotechunking inject to the stepexecution
                if (_step.RemoteChunking != null)
                {
                    RemoteChunking remoteChunking = new RemoteChunking(_step.RemoteChunking.HostName, _step.RemoteChunking.UserName, _step.RemoteChunking.PassWord, _step.RemoteChunking.Master);

                    // set worker configuration in the master
                    if (_step.RemoteChunking.Master)
                    {
                        remoteChunking.WorkerFileName  = _step.RemoteChunking.WorkerFileName;
                        remoteChunking.WorkerMaxNumber = int.Parse(_step.RemoteChunking.WorkerMaxNumber);
                    }
                    else // worker
                    {
                        // set worker id into the remotechunking object
                        if (!string.IsNullOrEmpty(_step.RemoteChunking.WorkerID))
                        {
                            remoteChunking.WorkerID = _step.RemoteChunking.WorkerID;
                        }
                    }

                    remoteChunking.MaxMasterWaitWorkerRetry   = int.Parse(_step.RemoteChunking.MaxMasterWaitWorkerRetry);
                    remoteChunking.MaxMasterWaitWorkerSecond  = int.Parse(_step.RemoteChunking.MaxMasterWaitWorkerSecond);
                    remoteChunking.RemoteChunkingTimoutSecond = TimeSpan.FromSeconds(int.Parse(_step.RemoteChunking.RemoteChunkingTimoutSecond));

                    builder = new SimpleStepBuilder(_container, _step.Id, inType, outType, Int32.Parse(_step.DelayConfig), remoteChunking)
                              .Reader(_step.Chunk.Reader.Ref)
                              .Writer(_step.Chunk.Writer.Ref);
                }

                if (_step.Chunk.Processor != null && !string.IsNullOrEmpty(_step.Chunk.Processor.Ref))
                {
                    builder.Processor(_step.Chunk.Processor.Ref);
                }
                if (!string.IsNullOrEmpty(_step.Chunk.ItemCount))
                {
                    builder.ChunkSize(int.Parse(_step.Chunk.ItemCount));
                }
                builder.Repository(_container.Resolve <IJobRepository>());
                AddListeners(builder);
                return(builder.Build());
            }
            throw new ArgumentException("A Batchlet or a chunk must be provided in the step");
        }
 protected AbstractStepBuilder(IUnityContainer container, string name, int delayConfig, RemoteChunking remoteChunking)
 {
     Container       = container;
     Name            = name;
     StartLimit      = int.MaxValue;
     DelayConfig     = delayConfig;
     _remoteChunking = remoteChunking;
 }
 protected AbstractTaskletStepBuilder(IUnityContainer container, string name, int delayConfig, RemoteChunking remoteChunking)
     : base(container, name, delayConfig, remoteChunking)
 {
 }
 public SimpleStepBuilder(IUnityContainer container, string name, Type inType, Type outType, int delayConfig, RemoteChunking remoteChunking)
     : base(container, name, delayConfig, remoteChunking)
 {
     _inType  = inType;
     _outType = outType;
 }