public static void CopyFieldValues(
            [NotNull] Item sourceIntegrationItem,
            [NotNull] SharepointBaseItem targetSharepointItem,
            [NotNull] IntegrationConfigData integrationConfigData)
        {
            Assert.ArgumentNotNull(sourceIntegrationItem, "sourceIntegrationItem");
            Assert.ArgumentNotNull(targetSharepointItem, "targetSharepointItem");
            Assert.ArgumentNotNull(integrationConfigData, "integrationConfigData");

            foreach (IntegrationConfigData.FieldMapping fieldMapping in integrationConfigData.FieldMappings)
            {
                if (sourceIntegrationItem.Fields[fieldMapping.Target] == null)
                {
                    continue;
                }

                TranslateIntegrationValueArgs pipelineArgs = TranslateSynchValuePipelinesRunner.TranslateIntegrationValue(
                    sourceIntegrationItem,
                    fieldMapping.Target,
                    targetSharepointItem,
                    fieldMapping.Source);
                if (pipelineArgs != null && !(String.IsNullOrEmpty(targetSharepointItem[fieldMapping.Source]) && String.IsNullOrEmpty(pipelineArgs.TranslatedValue)))
                {
                    targetSharepointItem[fieldMapping.Source] = pipelineArgs.TranslatedValue;
                }
            }
        }
        public static ProcessSharepointItemArgs DeleteSharepointItem([NotNull] SharepointBaseItem sharepointItem, [NotNull] SynchContext synchContext)
        {
            Assert.ArgumentNotNull(sharepointItem, "sharepointItem");
            Assert.ArgumentNotNull(synchContext, "synchContext");

            var pipelineArgs = new ProcessSharepointItemArgs
            {
                SharepointItemID = sharepointItem.UniqueID,
                SharepointItem   = sharepointItem,
                SynchContext     = synchContext
            };

            return(DeleteSharepointItem(pipelineArgs) ? pipelineArgs : null);
        }
        public static void UpdateItem(
            [NotNull] Item sourceIntegrationItem,
            [NotNull] SharepointBaseItem targetSharepointItem,
            [NotNull] SynchContext synchContext)
        {
            Assert.ArgumentNotNull(sourceIntegrationItem, "sourceIntegrationItem");
            Assert.ArgumentNotNull(targetSharepointItem, "targetSharepointItem");
            Assert.ArgumentNotNull(synchContext, "synchContext");

            CopyFieldValues(sourceIntegrationItem, targetSharepointItem, synchContext.IntegrationConfigData);

            var documentItem = targetSharepointItem as DocumentItem;

            if (documentItem != null)
            {
                CopyBlobValue(sourceIntegrationItem, documentItem);
            }

            targetSharepointItem.Update();
        }
        /// <summary>
        /// Update fields of integration item in CMS from SharePoint.
        /// </summary>
        /// <param name="targetIntegrationItem">The item.</param>
        /// <param name="sourceSharepointItem">The source.</param>
        /// <param name="synchContext">The synchronization context.</param>
        public static void UpdateFields([NotNull] Item targetIntegrationItem, [NotNull] SharepointBaseItem sourceSharepointItem, [NotNull] SynchContext synchContext)
        {
            Assert.ArgumentNotNull(targetIntegrationItem, "targetIntegrationItem");
            Assert.ArgumentNotNull(sourceSharepointItem, "sourceSharepointItem");
            Assert.ArgumentNotNull(synchContext, "synchContext");

            var folderItem = sourceSharepointItem as FolderItem;

            if (folderItem != null)
            {
                UpdateIntegrationConfigData(targetIntegrationItem, folderItem, synchContext);
            }

            using (new EditContext(targetIntegrationItem))
            {
                if (string.IsNullOrEmpty(targetIntegrationItem.Fields[FieldNames.GUID].Value))
                {
                    if (targetIntegrationItem.Template.GetField(SharepointFieldIDs.IsIntegrationItem) != null)
                    {
                        new CheckboxField(targetIntegrationItem.Fields[SharepointFieldIDs.IsIntegrationItem]).Checked = true;
                    }
                }

                targetIntegrationItem.Fields[FieldNames.GUID].Value = sourceSharepointItem.GUID;

                foreach (IntegrationConfigData.FieldMapping mapping in synchContext.IntegrationConfigData.FieldMappings)
                {
                    if (targetIntegrationItem.Fields[mapping.Target] != null)
                    {
                        TranslateSharepointValueArgs pipelineArgs = TranslateSynchValuePipelinesRunner.TranslateSharepointValue(sourceSharepointItem, mapping.Source, targetIntegrationItem, mapping.Target);
                        if (pipelineArgs != null)
                        {
                            targetIntegrationItem[mapping.Target] = pipelineArgs.TranslatedValue;
                        }
                    }
                }
            }
        }
        public static ProcessIntegrationItemArgs UpdateIntegrationItem(
            [NotNull] ID integrationItemID,
            [NotNull] SharepointBaseItem sourceSharepointItem,
            [NotNull] SynchContext synchContext,
            [NotNull] ProcessIntegrationItemsOptions options,
            [NotNull] EventSender eventSender)
        {
            Assert.ArgumentNotNull(integrationItemID, "integrationItemID");
            Assert.ArgumentNotNull(sourceSharepointItem, "sourceSharepointItem");
            Assert.ArgumentNotNull(synchContext, "synchContext");
            Assert.ArgumentNotNull(options, "options");

            var pipelineArgs = new ProcessIntegrationItemArgs
            {
                IntegrationItemID    = integrationItemID,
                SourceSharepointItem = sourceSharepointItem,
                SynchContext         = synchContext,
                Options     = options,
                EventSender = eventSender
            };

            return(UpdateIntegrationItem(pipelineArgs) ? pipelineArgs : null);
        }
        public static Item CreateItem(
            [NotNull] ID integrationItemID,
            [NotNull] ID integrationItemTemplateID,
            [NotNull] SharepointBaseItem sourceSharepointItem,
            [NotNull] SynchContext synchContext)
        {
            Assert.ArgumentNotNull(integrationItemID, "integrationItemID");
            Assert.ArgumentNotNull(integrationItemTemplateID, "integrationItemTemplateID");
            Assert.ArgumentNotNull(sourceSharepointItem, "sourceSharepointItem");
            Assert.ArgumentNotNull(synchContext, "synchContext");

            var validName = MediaPathManager.ProposeValidMediaPath(sourceSharepointItem.Title);

            Item integrationItem = ItemManager.AddFromTemplate(validName, integrationItemTemplateID, synchContext.ParentItem, integrationItemID);

            var folderItem = sourceSharepointItem as FolderItem;

            if (folderItem != null && integrationItem != null)
            {
                UpdateIntegrationConfigData(integrationItem, folderItem, synchContext);
            }

            return(integrationItem);
        }