| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- //
- // System.Web.Compilation.PersonalizableAttribute
- //
- // Authors:
- // Marek Habersack ([email protected])
- //
- // (C) 2006 Marek Habersack
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Reflection;
- namespace System.Web.UI.WebControls.WebParts
- {
- [AttributeUsageAttribute(AttributeTargets.Property)]
- public sealed class PersonalizableAttribute : Attribute
- {
- public static readonly PersonalizableAttribute Default;
- public static readonly PersonalizableAttribute NotPersonalizable;
- public static readonly PersonalizableAttribute Personalizable;
- public static readonly PersonalizableAttribute SharedPersonalizable;
- public static readonly PersonalizableAttribute UserPersonalizable;
- bool isPersonalizable;
- bool isSensitive;
- PersonalizationScope scope;
-
- static PersonalizableAttribute ()
- {
- Default = new PersonalizableAttribute (false);
- NotPersonalizable = Default;
- Personalizable = new PersonalizableAttribute (PersonalizationScope.User, false);
- SharedPersonalizable = new PersonalizableAttribute (PersonalizationScope.Shared, false);
- UserPersonalizable = new PersonalizableAttribute (PersonalizationScope.User, false);
- }
-
- public PersonalizableAttribute () : this (true)
- {
- }
- public PersonalizableAttribute (bool isPersonalizable)
- {
- this.isPersonalizable = isPersonalizable;
- this.scope = PersonalizationScope.User;
- this.isSensitive = false;
- }
- public PersonalizableAttribute (PersonalizationScope scope) : this (scope, false)
- {
- }
- public PersonalizableAttribute (PersonalizationScope scope, bool isSensitive)
- {
- this.isPersonalizable = true;
- this.scope = scope;
- this.isSensitive = isSensitive;
- }
- public bool IsPersonalizable {
- get { return isPersonalizable; }
- }
- public bool IsSensitive {
- get { return isSensitive; }
- }
- public PersonalizationScope Scope {
- get { return scope; }
- }
- public override bool Equals (object obj)
- {
- PersonalizableAttribute attr = obj as PersonalizableAttribute;
- if (attr == null)
- return false;
- return (this.isPersonalizable == attr.IsPersonalizable &&
- this.isSensitive == attr.IsSensitive &&
- this.scope == attr.Scope);
- }
-
- public override int GetHashCode ()
- {
- return (this.isPersonalizable.GetHashCode () ^
- this.isSensitive.GetHashCode () ^
- this.scope.GetHashCode ());
- }
- public static ICollection GetPersonalizableProperties (Type type)
- {
- if (type == null)
- throw new ArgumentNullException ("type");
-
- PropertyInfo[] properties = type.GetProperties ();
- if (properties == null || properties.Length == 0)
- return new PropertyInfo [0];
- List <PropertyInfo> ret = null;
-
- foreach (PropertyInfo pi in properties)
- if (PropertyQualifies (pi)) {
- if (ret == null)
- ret = new List <PropertyInfo> ();
- ret.Add (pi);
- }
- return ret;
- }
- static bool PropertyQualifies (PropertyInfo pi)
- {
- object[] attributes = pi.GetCustomAttributes (false);
- if (attributes == null || attributes.Length == 0)
- return false;
- PersonalizableAttribute attr;
- MethodInfo mi;
- foreach (object a in attributes) {
- attr = a as PersonalizableAttribute;
- if (attr == null || !attr.IsPersonalizable)
- continue;
- mi = pi.GetSetMethod (false);
- if (mi == null)
- throw new HttpException ("A public property on the type is marked as personalizable but is read-only.");
- return true;
- }
- return false;
- }
- public override bool IsDefaultAttribute ()
- {
- return PersonalizableAttribute.Equals (this, Default);
- }
- public override bool Match (object obj)
- {
- PersonalizableAttribute attr = obj as PersonalizableAttribute;
- if (obj == null)
- return false;
- return (this.isPersonalizable == attr.IsPersonalizable);
- }
- }
- }
|