Exemple #1
0
        public IDeliveryQuotation GetAssetsDeliveryQuotations(IAssetsContainer assetsContainer, IDestination destination)
        {
            Dictionary <string, IOrderedEnumerable <IDelivery> > assetsQuotes = new Dictionary <string, IOrderedEnumerable <IDelivery> >();
            Dictionary <string, Exception> assetsExceptions = new Dictionary <string, Exception>();

            foreach (var asset in assetsContainer.Assets)
            {
                try
                {
                    string relPath = null;
                    if (assetsContainer.Uri != null && assetsContainer.Uri.IsAbsoluteUri)
                    {
                        var relUri = assetsContainer.Uri.MakeRelativeUri(asset.Value.Uri);
                        // Use the relative path only if a sub-directory
                        if (!relUri.IsAbsoluteUri && !relUri.ToString().StartsWith(".."))
                        {
                            relPath = Path.GetDirectoryName(relUri.ToString());
                        }
                    }
                    var assetsDeliveryQuotations = GetSingleDeliveryQuotations(asset.Value, destination.To(asset.Value, relPath));
                    assetsQuotes.Add(asset.Key, assetsDeliveryQuotations);
                }
                catch (Exception e)
                {
                    logger.LogDebug("Cannot quote delivery for {0}: {1}", asset.Value.Uri, e.Message);
                    assetsExceptions.Add(asset.Key, e);
                }
            }
            return(new DeliveryQuotation(assetsQuotes, assetsExceptions));
        }
 public FilteredAssetContainer(IAssetsContainer assetsContainer, AssetFilters assetFilters)
 {
     if (assetsContainer == null)
     {
         throw new ArgumentNullException("assetsContainer");
     }
     this.assetsContainer = assetsContainer;
     this.assetFilters    = assetFilters;
 }
Exemple #3
0
 public static void MergeAssets(this StacItem stacItem, IAssetsContainer assetContainer, bool removeIfNotInContainer = false)
 {
     if (removeIfNotInContainer)
     {
         stacItem.Assets.Clear();
     }
     foreach (var asset in assetContainer.Assets)
     {
         if (stacItem.Assets.ContainsKey(asset.Key))
         {
             stacItem.Assets.Remove(asset.Key);
         }
         stacItem.Assets.Add(asset.Key, asset.Value.CreateStacAsset(stacItem));
     }
 }
        public async Task <IResource> Process(IResource route, IDestination destination, string suffix = null)
        {
            IItem item = route as IItem;

            if (item == null)
            {
                return(route);
            }
            IAssetsContainer            assetsContainer = route as IAssetsContainer;
            Dictionary <string, IAsset> newAssets       = new Dictionary <string, IAsset>();

            foreach (var asset in assetsContainer.Assets)
            {
                try
                {
                    if (!IsArchive(asset.Value))
                    {
                        newAssets.Add(asset.Key, asset.Value);
                        continue;
                    }
                }
                catch (Exception e)
                {
                    logger.LogWarning("Impossible to identify asset {0} as an archive: {1}", asset.Key, e.Message);
                    continue;
                }
                logger.LogInformation("Extracting asset {0}...", asset.Value.Uri);
                IAssetsContainer extractedAssets = await ExtractArchive(asset, destination);

                int i = 0;
                foreach (var extractedAsset in extractedAssets.Assets)
                {
                    newAssets.Add(extractedAsset.Key, extractedAsset.Value);
                    i++;
                }
                if (options.Value.KeepArchive)
                {
                    newAssets.Add(asset.Key, asset.Value);
                }
            }

            if (newAssets == null || newAssets.Count == 0)
            {
                return(route);
            }

            return(new ContainerNode(route as IItem, newAssets, suffix));
        }
Exemple #5
0
        public async Task <AssetImportReport> ImportAssets(IAssetsContainer assetsContainer, IDestination destination, AssetFilters assetsFilters)
        {
            if (assetsContainer.Assets.Count() == 0)
            {
                return(new AssetImportReport(null, destination));
            }

            logger.LogDebug("Importing {0} assets to {1}", assetsContainer.Assets.Count(), destination);

            IDeliveryQuotation deliveryQuotation = QuoteAssetsDelivery(assetsContainer, destination, assetsFilters);
            AssetImportReport  report            = new AssetImportReport(deliveryQuotation, destination);

            logger.LogDebug("Delivery quotation for {0} assets ({1} exceptions)", deliveryQuotation.AssetsDeliveryQuotes.Count, deliveryQuotation.AssetsExceptions.Count);

            CheckDelivery(deliveryQuotation);

            foreach (var assetDeliveries in deliveryQuotation.AssetsDeliveryQuotes)
            {
                if (assetDeliveries.Value.Count() == 0)
                {
                    report.AssetsExceptions.Add(assetDeliveries.Key, new AssetImportException("No delivery possible"));
                    continue;
                }
                IResource importedResource = null;
                try
                {
                    importedResource = await Import(assetDeliveries.Key, assetDeliveries.Value);

                    if (importedResource == null)
                    {
                        throw new AssetImportException("Imported asset is null");
                    }
                }
                catch (AggregateException ae)
                {
                    report.AssetsExceptions.Add(assetDeliveries.Key, ae);
                }
                // OK
                if (importedResource != null)
                {
                    IAsset importedAsset = MakeAsset(importedResource, (IAsset)assetDeliveries.Value.First().Route);
                    report.ImportedAssets.Add(assetDeliveries.Key, importedAsset);
                }
            }

            return(report);
        }
Exemple #6
0
        public async Task <AssetDeleteReport> DeleteAssets(IAssetsContainer assetsContainer, AssetFilters assetsFilters)
        {
            AssetDeleteReport assetDeleteReport = new AssetDeleteReport();

            logger.LogDebug("Deleting {0} assets of {1}", assetsContainer.Assets.Count(), assetsContainer.Uri.ToString());

            foreach (var asset in assetsContainer.Assets)
            {
                try {
                    WebRoute assetRoute = WebRoute.Create(asset.Value.Uri, 0, credentials);
                    await assetRoute.Remove();
                }
                catch (Exception e)
                {
                    logger.LogWarning("Cannot delete asset {0}({2}) : {1}", asset.Key, e.Message, asset.Value.Uri);
                    assetDeleteReport.AssetsExceptions.Add(asset.Key, e);
                }
            }

            return(assetDeleteReport);
        }
        public bool CanProcess(IResource route, IDestination destination)
        {
            IAssetsContainer assetsContainer = route as IAssetsContainer;

            return(assetsContainer != null && assetsContainer.Assets != null && assetsContainer.Assets.Any(asset => IsArchive(asset.Value)));
        }
Exemple #8
0
        private IDeliveryQuotation QuoteAssetsDelivery(IAssetsContainer assetsContainer, IDestination destination, AssetFilters assetFilters)
        {
            FilteredAssetContainer filteredAssetContainer = new FilteredAssetContainer(assetsContainer, assetFilters);

            return(carrierManager.GetAssetsDeliveryQuotations(filteredAssetContainer, destination));
        }