예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="gcItem"></param>
        /// <param name="gcTemplate"></param>
        /// <param name="selectedMappingId"></param>
        /// <param name="result"></param>
        /// <param name="selectedLocationId"></param>
        private void TryMapItem(GCItem gcItem, GCTemplate gcTemplate, string selectedMappingId, out MappingResultModel result, string selectedLocationId = null)
        {
            bool isUpdate = gcItem is UpdateGCItem;

            List <Element> gcFields = gcItem.Config.SelectMany(i => i.Elements).ToList();
            var            template = FactoryRepository.Repositories.MappingRepository.GetMappingById(selectedMappingId);


            if (template == null)
            {
                string errorMessage = isUpdate ? "Update failed: Template not mapped" : "Import failed: Template not mapped";
                result = new MappingResultModel(gcItem, null, gcTemplate.Name, null, string.Empty, errorMessage, false, selectedLocationId);
                return;
            }

            List <ImportCMSField> fields;

            IEnumerable <IGrouping <string, FieldMapping> > groupedFields = template.FieldMappings.GroupBy(i => i.CmsField.TemplateField.FieldId);

            var files = new List <File>();

            if (gcItem.Config.SelectMany(config => config.Elements).Select(element => element.Type).Contains("files"))
            {
                foreach (var file in FactoryService.Services.ItemsService.GetItemFiles(gcItem.Id.ToString()).Data)
                {
                    files.Add(new File
                    {
                        FileName = file.FileName,
                        Url      = file.Url,

                        UpdatedDate = file.Updated
                    });
                }
            }


            TryMapItemState mapState = TryMapFields(gcFields, groupedFields, files, out fields);

            if (mapState == TryMapItemState.FieldError)
            {
                string errorMessage = isUpdate ? "Update failed: Template fields mismatch" : "Import failed: Template fields mismatch";
                result = new MappingResultModel(gcItem, null, gcTemplate.Name, null, string.Empty, errorMessage, false, selectedLocationId);
                return;
            }

            string cmsId   = string.Empty;
            string message = "Import Successful";

            if (isUpdate)
            {
                cmsId   = (gcItem as UpdateGCItem).CMSId;
                message = "Update Successful";
            }

            result = new MappingResultModel(gcItem, fields, gcTemplate.Name, template.CmsTemplate.TemplateId, cmsId, message, true, selectedLocationId);
        }
        private TryMapItemState TryMapFields(List <Element> gcFields, IEnumerable <IGrouping <string, FieldMapping> > fieldsMappig, List <File> files, out List <ImportCMSField> result)
        {
            result = new List <ImportCMSField>();
            foreach (IGrouping <string, FieldMapping> grouping in fieldsMappig)
            {
                ImportCMSField  cmsField;
                TryMapItemState mapState = TryMapField(gcFields, grouping, files, out cmsField);
                if (mapState == TryMapItemState.FieldError)
                {
                    return(mapState);
                }
                result.Add(cmsField);
            }

            return(TryMapItemState.Success);
        }