From 1bc3943f33962c579be7feaf042bf5e51f9b818d Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Tue, 25 Sep 2012 11:06:32 +0700 Subject: [PATCH] Fixes: #U4-894 - moves the int Priority out of the IThumbnailProvider class as it is only metadata, moved this into a new generic WeightedPluginAttribute which can be used for other resolves/objects that require a weight. --- src/Umbraco.Core/IThumbnailProvider.cs | 1 - .../ManyObjectsResolverBase.cs | 36 ++ .../WeightedPluginAttribute.cs | 19 + src/Umbraco.Core/Umbraco.Core.csproj | 1 + src/Umbraco.Web.UI/Web.config | 503 ++++++++---------- .../web.Template.ShandemVaio.Debug.config | 2 +- .../AbstractThumbnailProvider.cs | 2 - .../FileExtensionIconThumbnailProvider.cs | 7 +- .../ImageThumbnailProvider.cs | 9 +- .../MediaTypeIconThumbnailProvider.cs | 8 +- .../ThumbnailProvidersResolver.cs | 8 +- 11 files changed, 302 insertions(+), 294 deletions(-) create mode 100644 src/Umbraco.Core/ObjectResolution/WeightedPluginAttribute.cs diff --git a/src/Umbraco.Core/IThumbnailProvider.cs b/src/Umbraco.Core/IThumbnailProvider.cs index 0948f1d8eb..c05f50bb62 100644 --- a/src/Umbraco.Core/IThumbnailProvider.cs +++ b/src/Umbraco.Core/IThumbnailProvider.cs @@ -7,7 +7,6 @@ namespace Umbraco.Core { public interface IThumbnailProvider { - int Priority { get; } bool CanProvideThumbnail(string fileUrl); string GetThumbnailUrl(string fileUrl); } diff --git a/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs b/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs index bab284c7f4..2b8d1c43c7 100644 --- a/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs +++ b/src/Umbraco.Core/ObjectResolution/ManyObjectsResolverBase.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Web; namespace Umbraco.Core.ObjectResolution { + internal abstract class ManyObjectsResolverBase : ResolverBase where TResolved : class where TResolver : class @@ -94,6 +96,40 @@ namespace Umbraco.Core.ObjectResolution /// protected ObjectLifetimeScope LifetimeScope { get; private set; } + private int _defaultPluginWeight = 10; + + /// + /// Used in conjunction with GetSortedValues and WeightedPluginAttribute, if any of the objects + /// being resolved do not contain the WeightedPluginAttribute then this will be the default weight applied + /// to the object. + /// + protected virtual int DefaultPluginWeight + { + get { return _defaultPluginWeight; } + set { _defaultPluginWeight = value; } + } + + /// + /// If a resolver requries that objects are resolved with a specific order using the WeightedPluginAttribute + /// then this method should be used instead of the Values property. + /// + /// + protected IEnumerable GetSortedValues() + { + var vals = Values.ToList(); + //ensure they are sorted + vals.Sort((f1, f2) => + { + Func getWeight = o => + { + var weightAttribute = f1.GetType().GetCustomAttribute(true); + return weightAttribute != null ? weightAttribute.Weight : DefaultPluginWeight; + }; + return getWeight(f1).CompareTo(getWeight(f2)); + }); + return vals; + } + /// /// Returns the list of new object instances. /// diff --git a/src/Umbraco.Core/ObjectResolution/WeightedPluginAttribute.cs b/src/Umbraco.Core/ObjectResolution/WeightedPluginAttribute.cs new file mode 100644 index 0000000000..9ea4fec101 --- /dev/null +++ b/src/Umbraco.Core/ObjectResolution/WeightedPluginAttribute.cs @@ -0,0 +1,19 @@ +using System; + +namespace Umbraco.Core.ObjectResolution +{ + /// + /// Some many object resolvers require that the objects that they resolve have weights applied to them so that + /// the objects are returned in a sorted order, this attribute is used in these scenarios. + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] + internal class WeightedPluginAttribute : Attribute + { + public WeightedPluginAttribute(int weight) + { + Weight = weight; + } + + public int Weight { get; private set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 20bd19baf1..5a362dfaa2 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -90,6 +90,7 @@ + diff --git a/src/Umbraco.Web.UI/Web.config b/src/Umbraco.Web.UI/Web.config index 29683c3913..df98fa6eee 100644 --- a/src/Umbraco.Web.UI/Web.config +++ b/src/Umbraco.Web.UI/Web.config @@ -1,280 +1,249 @@  - -
- -
-
- - -
- - -
-
-
-
- - - -
-
- - - - - - - - - - - + +
+
+
+ +
+ +
+
+
+
+ + +
+
+ + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/web.Template.ShandemVaio.Debug.config b/src/Umbraco.Web.UI/web.Template.ShandemVaio.Debug.config index 0235436f34..002a7db03c 100644 --- a/src/Umbraco.Web.UI/web.Template.ShandemVaio.Debug.config +++ b/src/Umbraco.Web.UI/web.Template.ShandemVaio.Debug.config @@ -19,7 +19,7 @@ + value="4.10.0"/> SupportedExtensions { get; } public bool CanProvideThumbnail(string fileUrl) diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/FileExtensionIconThumbnailProvider.cs b/src/Umbraco.Web/Media/ThumbnailProviders/FileExtensionIconThumbnailProvider.cs index 60a5f2ccfa..a96eea0475 100644 --- a/src/Umbraco.Web/Media/ThumbnailProviders/FileExtensionIconThumbnailProvider.cs +++ b/src/Umbraco.Web/Media/ThumbnailProviders/FileExtensionIconThumbnailProvider.cs @@ -3,17 +3,14 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Umbraco.Core.ObjectResolution; using umbraco.IO; namespace Umbraco.Web.Media.ThumbnailProviders { + [WeightedPlugin(2000)] public class FileExtensionIconThumbnailProvider : AbstractThumbnailProvider { - public override int Priority - { - get { return 2000; } - } - protected override IEnumerable SupportedExtensions { get { return new List { "*" }; } diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs index c5c20a24d7..b78b199054 100644 --- a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs +++ b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs @@ -5,17 +5,14 @@ using System.Linq; using System.Text; using Umbraco.Core; using Umbraco.Core.IO; +using Umbraco.Core.ObjectResolution; using umbraco.IO; namespace Umbraco.Web.Media.ThumbnailProviders { + [WeightedPlugin(1000)] public class ImageThumbnailProvider : AbstractThumbnailProvider - { - public override int Priority - { - get { return 1000; } - } - + { protected override IEnumerable SupportedExtensions { get { return new List { ".jpeg", ".jpg", ".gif", ".bmp", ".png", ".tiff", ".tif" }; } diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/MediaTypeIconThumbnailProvider.cs b/src/Umbraco.Web/Media/ThumbnailProviders/MediaTypeIconThumbnailProvider.cs index e4c8b569d7..ce6ee054a4 100644 --- a/src/Umbraco.Web/Media/ThumbnailProviders/MediaTypeIconThumbnailProvider.cs +++ b/src/Umbraco.Web/Media/ThumbnailProviders/MediaTypeIconThumbnailProvider.cs @@ -3,17 +3,15 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Umbraco.Core.ObjectResolution; using umbraco.IO; namespace Umbraco.Web.Media.ThumbnailProviders { + [WeightedPlugin(3000)] public class MediaTypeIconThumbnailProvider : AbstractThumbnailProvider { - public override int Priority - { - get { return 3000; } - } - + protected override IEnumerable SupportedExtensions { get { return new List { "*" }; } diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/ThumbnailProvidersResolver.cs b/src/Umbraco.Web/Media/ThumbnailProviders/ThumbnailProvidersResolver.cs index b6e15324d1..52c8d4ac66 100644 --- a/src/Umbraco.Web/Media/ThumbnailProviders/ThumbnailProvidersResolver.cs +++ b/src/Umbraco.Web/Media/ThumbnailProviders/ThumbnailProvidersResolver.cs @@ -29,13 +29,7 @@ namespace Umbraco.Web.Media.ThumbnailProviders /// public IEnumerable Providers { - get - { - var vals = Values.ToList(); - //ensure they are sorted - vals.Sort((f1, f2) => f1.Priority.CompareTo(f2.Priority)); - return vals; - } + get { return GetSortedValues(); } } public string GetThumbnailUrl(string fileUrl)