public async Task <Article> Read(Stream stream)
        {
            using (var reader = new StreamReader(stream))
            {
                string line = await reader.ReadToEndAsync();

                Content definition = null;
                object  slug       = null;
                object  version    = null;

                _actionContext?.RouteData?.Values?.TryGetValue("slug", out slug);
                _actionContext?.RouteData?.Values?.TryGetValue("version", out version);

                if (slug == null && version == null)
                {
                    var type      = GetTypeName(line);
                    var contentId = _productContentResolver.GetContentIdByType(type);
                    definition = _contentDefinitionService.GetDefinitionForContent(0, contentId);
                }
                else
                {
                    definition = _contentDefinitionService.GetServiceDefinition((string)slug, (string)version).Content;
                }

                return(_jsonProductService.DeserializeProduct(line, definition));
            }
        }
Example #2
0
        public Article ReadProduct(Stream stream)
        {
            _actionContext.RouteData.Values.TryGetValue("slug", out object slug);
            _actionContext.RouteData.Values.TryGetValue("version", out object version);

            var     productXml = XDocument.Load(stream);
            Content definition = null;

            if (slug == null && version == null)
            {
                var type      = GetTypeName(productXml);
                var contentId = _productContentResolver.GetContentIdByType(type);
                definition = _contentDefinitionService.GetDefinitionForContent(0, contentId);
            }
            else
            {
                definition = _contentDefinitionService.GetServiceDefinition((string)slug, (string)version).Content;
            }

            return(ReadProduct(productXml, definition));
        }
Example #3
0
        private int?CloneProductImpl(
            int productId, Models.Configuration.Content contentDefinition, Dictionary <string, string> actionParameters)
        {
            _cacheItemWatcher.TrackChanges();

            DoWithLogging(
                () => ArticleService.LoadStructureCache(),
                "Loading structure cache"
                );


            var article = DoWithLogging(
                () => ArticleService.Read(productId),
                "Reading root article for product {id}", productId
                );

            if (!Filter(article))
            {
                return(null);
            }

            var checkResult = DoWithLogging(
                () => ArticleService.CheckRelationSecurity(article.ContentId, new[] { productId }, false),
                "Checking relation security for product {id}", productId
                );

            if (!checkResult[productId])
            {
                throw new ProductException(productId, nameof(TaskStrings.NoRelationAccess));
            }

            if (contentDefinition == null)
            {
                contentDefinition = _definitionService.GetDefinitionForContent(0, article.ContentId);
            }
            if (actionParameters == null)
            {
                actionParameters = new Dictionary <string, string>();
            }

            var productDefinition = new ProductDefinition {
                StorageSchema = contentDefinition
            };

            UpdateDefinition(article, productDefinition, actionParameters);

            var productsById = DoWithLogging(
                () => GetProductsToBeProcessed(
                    article, productDefinition, ef => ef.CloningMode, CloningMode.Copy, Filter, true),
                "Receving articles to be cloned for product {id}", productId
                );

            var clearFieldIds = actionParameters.GetClearFieldIds();

            var missedAggArticles = PrepareProducts(productsById, clearFieldIds);

            MapProducts(productsById[productId], productsById);

            var result = DoWithLogging(
                () => SaveProducts(productId, productsById, missedAggArticles),
                "Cloning {count} articles for product {id}", productsById.Count, productId
                );

            return(result);
        }
Example #4
0
 public ProductDefinition GetProductDefinition(int productTypeId, bool isLive = false)
 {
     return(new ProductDefinition {
         StorageSchema = _service.GetDefinitionForContent(0, 288)
     });
 }