Go to the documentation of this file.00001 using System;
00002 using System.Collections.Generic;
00003 using System.Text;
00004
00005 namespace N2.Collections
00006 {
00010 public class TypeFilter : ItemFilter
00011 {
00012 #region Constructors
00013
00014
00015 public TypeFilter(params Type[] allowedTypes)
00016 {
00017 this.allowedTypes = allowedTypes;
00018 }
00019
00022 public TypeFilter(IEnumerable<Type> allowedTypes)
00023 {
00024 this.allowedTypes = allowedTypes;
00025 }
00026
00030 [Obsolete("Wrap i an'inverse filter instead.")]
00031 public TypeFilter(bool inverse, params Type[] allowedTypes)
00032 : this(allowedTypes)
00033 {
00034 this.inverse = inverse;
00035 }
00036 #endregion
00037
00038 #region Private Members
00039 private IEnumerable<Type> allowedTypes;
00040 private bool inverse = false;
00041 #endregion
00042
00043 #region Properties
00044
00045 public bool Inverse
00046 {
00047 get { return inverse; }
00048 set { inverse = value; }
00049 }
00050
00052 public IEnumerable<Type> AllowedTypes
00053 {
00054 get { return allowedTypes; }
00055 set { allowedTypes = value; }
00056 }
00057 #endregion
00058
00059 #region Methods
00060 public override bool Match(ContentItem item)
00061 {
00062 Type itemType = item.GetContentType();
00063 foreach (Type t in allowedTypes)
00064 if (t.IsAssignableFrom(itemType))
00065 return !inverse;
00066 return inverse;
00067 }
00068 #endregion
00069
00070 public static void Filter(IList<ContentItem> items, params Type[] allowedTypes)
00071 {
00072 Filter(items, new TypeFilter(allowedTypes));
00073 }
00074
00078 public static TypeFilter Of<T>()
00079 {
00080 return new TypeFilter(typeof (T));
00081 }
00082 }
00083 }