private void AddCreateSitecoreItemSettings(ItemModel source, PipelineStep step)
        {
            //The default
            ResolveSitecoreItemSettings sitecoreItemSettings = new ResolveSitecoreItemSettings()
            {
                ParentItemIdItem           = this.GetGuidValue(source, "ParentForItem"),
                MatchingFieldValueAccessor = this.ConvertReferenceToModel <IValueAccessor>(source, "MatchingFieldValueAccessor"),
                TemplateForNewItem         = this.GetGuidValue(source, "TemplateForNewItem"),
                ItemNameValueAccessor      = this.ConvertReferenceToModel <IValueAccessor>(source, "ItemNameValueAccessor")
            };

            step.Plugins.Add((IPlugin)sitecoreItemSettings);

            //My endpoint and Language
            var settings     = new ResolveSitecoreItemWithLanguageSettings();
            var endpointFrom = base.ConvertReferenceToModel <Endpoint>(source, ResolveSitecoreItemWithLanguageStepItemModel.EndpointFrom);

            if (endpointFrom != null)
            {
                settings.EndpointFrom = endpointFrom;
            }

            settings.LanguageField =
                base.GetStringValue(source, ResolveSitecoreItemWithLanguageStepItemModel.LanguageField);

            step.Plugins.Add(settings);
        }
        protected override object ResolveObject(object identifierValue, Endpoint endpoint, PipelineStep pipelineStep, PipelineContext pipelineContext)
        {
            if (identifierValue == null)
            {
                throw new ArgumentException("The value cannot be null.", "identifierValue");
            }
            if (endpoint == null)
            {
                throw new ArgumentNullException("endpoint");
            }
            if (pipelineStep == null)
            {
                throw new ArgumentNullException("pipelineStep");
            }
            if (pipelineContext == null)
            {
                throw new ArgumentNullException("pipelineContext");
            }
            ItemModelRepositorySettings repositorySettings = endpoint.GetItemModelRepositorySettings();

            if (repositorySettings == null)
            {
                return((object)null);
            }
            IItemModelRepository itemModelRepository = repositorySettings.ItemModelRepository;

            if (itemModelRepository == null)
            {
                return((object)null);
            }
            ResolveSitecoreItemSettings sitecoreItemSettings = pipelineStep.GetResolveSitecoreItemSettings();

            if (sitecoreItemSettings == null)
            {
                return((object)null);
            }
            ResolveObjectSettings resolveObjectSettings = pipelineStep.GetResolveObjectSettings();

            if (resolveObjectSettings == null)
            {
                return((object)null);
            }

            ResolveSitecoreItemWithLanguageSettings languageSettings = pipelineStep.GetPlugin <ResolveSitecoreItemWithLanguageSettings>();

            if (languageSettings == null)
            {
                return((ItemModel)null);
            }



            ItemModel sourceAsItemModel = this.GetSourceObjectAsItemModel(pipelineStep, pipelineContext);

            if (sourceAsItemModel == null)
            {
                return((ItemModel)null);
            }

            var language = sourceAsItemModel[languageSettings.LanguageField].ToString();

            ILogger logger = pipelineContext.Logger;
            RepositoryObjectStatus status = RepositoryObjectStatus.DoesNotExist;
            ItemModel itemModel           = this.DoSearch(identifierValue, sitecoreItemSettings, itemModelRepository, logger, pipelineContext);

            if (itemModel != null)
            {
                this.Log(new Action <string>(pipelineContext.Logger.Debug), pipelineContext, "Item was resolved.", string.Format("identifier: {0}", identifierValue), string.Format("item id: {0}", itemModel["ItemID"]));
                Sitecore.Diagnostics.Log.Error($"Item was resolved with identifierValue: {identifierValue} item id: {itemModel["ItemID"]}", this);
                status = RepositoryObjectStatus.Exists;
            }

            if (itemModel == null && !resolveObjectSettings.DoNotCreateIfObjectNotResolved)
            {
                this.Log(new Action <string>(logger.Debug), pipelineContext, "Item was not resolved. Will create it.", string.Format("identifier: {0}", identifierValue));
                Sitecore.Diagnostics.Log.Error($"Item was not resolved. Will create it: {identifierValue} ", this);

                itemModel = this.CreateNewItem(this.GetIdentifierObject(pipelineStep, pipelineContext), itemModelRepository, sitecoreItemSettings, logger, pipelineContext, language);
                if (itemModel == null)
                {
                    this.Log(new Action <string>(logger.Error), pipelineContext, "Unable to create new item.", string.Format("identifier: {0}", identifierValue));
                    Sitecore.Diagnostics.Log.Error($"Unable to create new item with identifierValue: {identifierValue} ", this);
                }
                else
                {
                    this.Log(new Action <string>(logger.Debug), pipelineContext, "New item was created.", string.Format("identifier: {0}", identifierValue));
                    Sitecore.Diagnostics.Log.Info($"Create new item with identifierValue: {identifierValue} ", this);
                }
            }
            this.SetRepositoryStatusSettings(status, pipelineContext);
            return((object)itemModel);
        }