Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / EntityTemplateFactory.cs / 1305376 / EntityTemplateFactory.cs
using System.Diagnostics;
using System.Globalization;
using System.Web.Compilation;
using System.Web.Hosting;
using System.Web.UI.WebControls;
namespace System.Web.DynamicData {
public class EntityTemplateFactory {
private const string s_defaultTemplateName = "Default";
private TemplateFactory _factory;
private Func _templateInstantiator;
public EntityTemplateFactory()
: this(CreateEntityTemplateInstance, /* trackChanges */ true) {
}
// for unit testing
internal EntityTemplateFactory(Func templateInstantiator, VirtualPathProvider vpp)
: this(templateInstantiator, /* trackChanges */ false) {
_factory.VirtualPathProvider = vpp;
}
private EntityTemplateFactory(Func templateInstantiator, bool trackChanges) {
_factory = new TemplateFactory("EntityTemplates", trackChanges);
_templateInstantiator = templateInstantiator;
}
internal string TemplateFolderVirtualPath {
get {
return _factory.TemplateFolderVirtualPath;
}
set {
_factory.TemplateFolderVirtualPath = value;
}
}
private static EntityTemplateUserControl CreateEntityTemplateInstance(string path) {
return (EntityTemplateUserControl)BuildManager.CreateInstanceFromVirtualPath(
path, typeof(EntityTemplateUserControl));
}
public virtual EntityTemplateUserControl CreateEntityTemplate(MetaTable table, DataBoundControlMode mode, string uiHint) {
if (table == null) {
throw new ArgumentNullException("table");
}
string entityTemplatePath = GetEntityTemplateVirtualPathWithCaching(table, mode, uiHint);
if (entityTemplatePath == null) {
return null;
}
return _templateInstantiator(entityTemplatePath);
}
private string GetEntityTemplateVirtualPathWithCaching(MetaTable table, DataBoundControlMode mode, string uiHint) {
long cacheKey = Misc.CombineHashCodes(table, mode, uiHint);
return _factory.GetTemplatePath(cacheKey, delegate() {
return GetEntityTemplateVirtualPath(table, mode, uiHint);
});
}
public virtual string GetEntityTemplateVirtualPath(MetaTable table, DataBoundControlMode mode, string uiHint) {
if (table == null) {
throw new ArgumentNullException("table");
}
// Fallback order is as follows (where CustomProducts is the uiHint)
// CustomProducts_Insert
// CustomProducts_Edit
// Products_Insert
// Products_Edit
// Default_Insert
// Default_Edit
// CustomProducts_ReadOnly
// Products_ReadOnly
// Default_ReadOnly
//
// If nothing matches null is returned
return GetVirtualPathFallback(table, mode, uiHint, DataBoundControlMode.Edit) ??
GetVirtualPathFallback(table, DataBoundControlMode.ReadOnly, uiHint, DataBoundControlMode.ReadOnly);
}
private string GetVirtualPathFallback(MetaTable table, DataBoundControlMode mode, string uiHint, DataBoundControlMode minModeToFallBack) {
if (mode < minModeToFallBack) {
return null;
}
// the strategy is to go over each candidate name and try to find an existing template for
// each mode between 'mode' and 'minModeToFallBack'
// note that GetVirtualPathForMode will return null for empty names (e.g. when the uiHint is not specified)
string[] fallbackNames = new string[] { uiHint, table.Name, s_defaultTemplateName };
foreach (var name in fallbackNames) {
for (var currentMode = mode; currentMode >= minModeToFallBack; currentMode--) {
string virtualPath = GetVirtualPathForMode(name, currentMode);
if (virtualPath != null) {
return virtualPath;
}
}
}
return null;
}
private string GetVirtualPathForMode(string candidateName, DataBoundControlMode mode) {
if (String.IsNullOrEmpty(candidateName)) {
return null;
} else {
string templatePath = BuildEntityTemplateVirtualPath(candidateName, mode);
return _factory.FileExists(templatePath) ? templatePath : null;
}
}
public virtual string BuildEntityTemplateVirtualPath(string templateName, DataBoundControlMode mode) {
if (templateName == null) {
throw new ArgumentNullException("templateName");
}
string modeString = mode == DataBoundControlMode.ReadOnly ? String.Empty : "_" + mode.ToString();
return String.Format(CultureInfo.InvariantCulture, this.TemplateFolderVirtualPath + "{0}{1}.ascx", templateName, modeString);
}
internal void Initialize(MetaModel model) {
Debug.Assert(model != null);
_factory.Model = model;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BitVec.cs
- SpecularMaterial.cs
- BuildManagerHost.cs
- OptionUsage.cs
- BuildProvidersCompiler.cs
- DataObjectAttribute.cs
- MemberJoinTreeNode.cs
- IdentityValidationException.cs
- DirectionalLight.cs
- CalendarDayButton.cs
- PeerChannelFactory.cs
- CodePropertyReferenceExpression.cs
- SqlProcedureAttribute.cs
- Transform3DGroup.cs
- PersonalizationEntry.cs
- NetworkCredential.cs
- LineMetrics.cs
- SByteStorage.cs
- PropagatorResult.cs
- ReadOnlyMetadataCollection.cs
- _ScatterGatherBuffers.cs
- DataSvcMapFile.cs
- DayRenderEvent.cs
- BindingBase.cs
- GraphicsPath.cs
- AnnotationResourceChangedEventArgs.cs
- ItemsControl.cs
- LinkDescriptor.cs
- MailWebEventProvider.cs
- XamlBrushSerializer.cs
- OperationExecutionFault.cs
- TableRow.cs
- SqlDataSourceView.cs
- TextRenderer.cs
- MissingManifestResourceException.cs
- JsonDeserializer.cs
- ParenthesizePropertyNameAttribute.cs
- StructuralObject.cs
- SqlWorkflowPersistenceService.cs
- Pair.cs
- WebPartVerbCollection.cs
- ConfigXmlText.cs
- ScrollBarRenderer.cs
- DataGridViewCheckBoxCell.cs
- AssociationTypeEmitter.cs
- DataControlReferenceCollection.cs
- TextTreeRootTextBlock.cs
- TemplateField.cs
- WeakEventManager.cs
- FontFamily.cs
- Matrix3DConverter.cs
- DrawingAttributesDefaultValueFactory.cs
- PropertyInfoSet.cs
- HighContrastHelper.cs
- HttpProcessUtility.cs
- IDispatchConstantAttribute.cs
- AccessText.cs
- CodeAttachEventStatement.cs
- MaterializeFromAtom.cs
- SqlConnectionPoolProviderInfo.cs
- IxmlLineInfo.cs
- DeflateStreamAsyncResult.cs
- Automation.cs
- PrefixHandle.cs
- XmlSchemaException.cs
- RegistryKey.cs
- SQLBinary.cs
- FontNamesConverter.cs
- HTMLTagNameToTypeMapper.cs
- PostBackTrigger.cs
- EntityDataSourceDesigner.cs
- DbDataRecord.cs
- VectorAnimation.cs
- TypefaceCollection.cs
- DataServiceRequestException.cs
- AndCondition.cs
- InheritanceRules.cs
- XmlElementAttribute.cs
- DeflateEmulationStream.cs
- WebPartRestoreVerb.cs
- HtmlInputPassword.cs
- StringPropertyBuilder.cs
- TextMarkerSource.cs
- EntityProviderFactory.cs
- DataRelationPropertyDescriptor.cs
- xmlglyphRunInfo.cs
- FrameworkElement.cs
- ErrorsHelper.cs
- SocketAddress.cs
- ListViewEditEventArgs.cs
- ColumnHeader.cs
- TextDecorations.cs
- MonthChangedEventArgs.cs
- ViewCellSlot.cs
- InfoCardKeyedHashAlgorithm.cs
- MenuItemStyle.cs
- UndoEngine.cs
- DBParameter.cs
- BrowserDefinition.cs
- StreamUpdate.cs