You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,102 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="WebPartTransformerAttribute.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.UI.WebControls.WebParts {
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class)]
|
||||
public sealed class WebPartTransformerAttribute : Attribute {
|
||||
|
||||
// Cache provider and consumer types for each WebPartTransformer type. We store an array of
|
||||
// 2 Types (consumer, provider) indexed by transformer type.
|
||||
private static readonly Hashtable transformerCache = Hashtable.Synchronized(new Hashtable());
|
||||
|
||||
private Type _consumerType;
|
||||
private Type _providerType;
|
||||
|
||||
public WebPartTransformerAttribute(Type consumerType, Type providerType) {
|
||||
if (consumerType == null) {
|
||||
throw new ArgumentNullException("consumerType");
|
||||
}
|
||||
|
||||
if (providerType == null) {
|
||||
throw new ArgumentNullException("providerType");
|
||||
}
|
||||
|
||||
_consumerType = consumerType;
|
||||
_providerType = providerType;
|
||||
}
|
||||
|
||||
public Type ConsumerType {
|
||||
get {
|
||||
return _consumerType;
|
||||
}
|
||||
}
|
||||
|
||||
public Type ProviderType {
|
||||
get {
|
||||
return _providerType;
|
||||
}
|
||||
}
|
||||
|
||||
public static Type GetConsumerType(Type transformerType) {
|
||||
return GetTransformerTypes(transformerType)[0];
|
||||
}
|
||||
|
||||
public static Type GetProviderType(Type transformerType) {
|
||||
return GetTransformerTypes(transformerType)[1];
|
||||
}
|
||||
|
||||
/// <devdoc>
|
||||
/// Returns the types a transformer can accept on its "connection points"
|
||||
/// </devdoc>
|
||||
private static Type[] GetTransformerTypes(Type transformerType) {
|
||||
if (transformerType == null) {
|
||||
throw new ArgumentNullException("transformerType");
|
||||
}
|
||||
|
||||
if (!transformerType.IsSubclassOf(typeof(WebPartTransformer))) {
|
||||
throw new InvalidOperationException(
|
||||
SR.GetString(SR.WebPartTransformerAttribute_NotTransformer, transformerType.FullName));
|
||||
}
|
||||
|
||||
Type[] types = (Type[])transformerCache[transformerType];
|
||||
if (types == null) {
|
||||
types = GetTransformerTypesFromAttribute(transformerType);
|
||||
transformerCache[transformerType] = types;
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
private static Type[] GetTransformerTypesFromAttribute(Type transformerType) {
|
||||
Type[] types = new Type[2];
|
||||
|
||||
object[] attributes = transformerType.GetCustomAttributes(typeof(WebPartTransformerAttribute), true);
|
||||
// WebPartTransformerAttribute.AllowMultiple is false
|
||||
Debug.Assert(attributes.Length == 0 || attributes.Length == 1);
|
||||
if (attributes.Length == 1) {
|
||||
WebPartTransformerAttribute attribute = (WebPartTransformerAttribute)attributes[0];
|
||||
if (attribute.ConsumerType == attribute.ProviderType) {
|
||||
throw new InvalidOperationException(SR.GetString(SR.WebPartTransformerAttribute_SameTypes));
|
||||
}
|
||||
types[0] = attribute.ConsumerType;
|
||||
types[1] = attribute.ProviderType;
|
||||
}
|
||||
else {
|
||||
throw new InvalidOperationException(
|
||||
SR.GetString(SR.WebPartTransformerAttribute_Missing, transformerType.FullName));
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user