Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / FilterFactory.cs / 1305376 / FilterFactory.cs
using System.Diagnostics; using System.Globalization; using System.Web.Compilation; using System.Web.Hosting; namespace System.Web.DynamicData { public class FilterFactory { private const string s_defaultFiltersFolder = "Filters"; private const string s_booleanFilter = "Boolean"; private const string s_foreignKeyFilter = "ForeignKey"; private const string s_enumerationFilter = "Enumeration"; private TemplateFactory _templateFactory; public FilterFactory() { _templateFactory = new TemplateFactory(s_defaultFiltersFolder); } // for testing purposes internal FilterFactory(VirtualPathProvider vpp) : this() { _templateFactory.VirtualPathProvider = vpp; } internal string FilterFolderVirtualPath { get { return _templateFactory.TemplateFolderVirtualPath; } set { _templateFactory.TemplateFolderVirtualPath = value; } } internal void Initialize(MetaModel model) { Debug.Assert(model != null); _templateFactory.Model = model; } private string GetDefaultFilterControlName(MetaColumn column) { if (column is MetaForeignKeyColumn) { return s_foreignKeyFilter; } else if (column.ColumnType == typeof(bool)) { return s_booleanFilter; } else if (column.GetEnumType() != null) { return s_enumerationFilter; } else { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.DynamicDataResources.FilterFactory_ColumnHasNoDefaultFilter, column.Name, column.Table.Name)); } } public virtual QueryableFilterUserControl CreateFilterControl(MetaColumn column, string filterUIHint) { if (column == null) { throw new ArgumentNullException("column"); } string filterTemplatePath = GetFilterVirtualPathWithCaching(column, filterUIHint); Debug.Assert(filterTemplatePath != null); QueryableFilterUserControl filter = (QueryableFilterUserControl)BuildManager.CreateInstanceFromVirtualPath( filterTemplatePath, typeof(QueryableFilterUserControl)); return filter; } // internal for unit testing internal string GetFilterVirtualPathWithCaching(MetaColumn column, string filterUIHint) { Debug.Assert(column != null); long cacheKey = Misc.CombineHashCodes(column, filterUIHint); return _templateFactory.GetTemplatePath(cacheKey, delegate() { return GetFilterVirtualPath(column, filterUIHint); }); } public virtual string GetFilterVirtualPath(MetaColumn column, string filterUIHint) { if (column == null) { throw new ArgumentNullException("column"); } string filterControlName = BuildFilterVirtualPath(column, filterUIHint); string filterTemplatePath = VirtualPathUtility.Combine(FilterFolderVirtualPath, filterControlName + ".ascx"); return filterTemplatePath; } private string BuildFilterVirtualPath(MetaColumn column, string filterUIHint) { string filterControlName = null; if (!String.IsNullOrEmpty(filterUIHint)) { filterControlName = filterUIHint; } else if (!String.IsNullOrEmpty(column.FilterUIHint)) { filterControlName = column.FilterUIHint; } filterControlName = filterControlName ?? GetDefaultFilterControlName(column); return filterControlName; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Diagnostics; using System.Globalization; using System.Web.Compilation; using System.Web.Hosting; namespace System.Web.DynamicData { public class FilterFactory { private const string s_defaultFiltersFolder = "Filters"; private const string s_booleanFilter = "Boolean"; private const string s_foreignKeyFilter = "ForeignKey"; private const string s_enumerationFilter = "Enumeration"; private TemplateFactory _templateFactory; public FilterFactory() { _templateFactory = new TemplateFactory(s_defaultFiltersFolder); } // for testing purposes internal FilterFactory(VirtualPathProvider vpp) : this() { _templateFactory.VirtualPathProvider = vpp; } internal string FilterFolderVirtualPath { get { return _templateFactory.TemplateFolderVirtualPath; } set { _templateFactory.TemplateFolderVirtualPath = value; } } internal void Initialize(MetaModel model) { Debug.Assert(model != null); _templateFactory.Model = model; } private string GetDefaultFilterControlName(MetaColumn column) { if (column is MetaForeignKeyColumn) { return s_foreignKeyFilter; } else if (column.ColumnType == typeof(bool)) { return s_booleanFilter; } else if (column.GetEnumType() != null) { return s_enumerationFilter; } else { throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.DynamicDataResources.FilterFactory_ColumnHasNoDefaultFilter, column.Name, column.Table.Name)); } } public virtual QueryableFilterUserControl CreateFilterControl(MetaColumn column, string filterUIHint) { if (column == null) { throw new ArgumentNullException("column"); } string filterTemplatePath = GetFilterVirtualPathWithCaching(column, filterUIHint); Debug.Assert(filterTemplatePath != null); QueryableFilterUserControl filter = (QueryableFilterUserControl)BuildManager.CreateInstanceFromVirtualPath( filterTemplatePath, typeof(QueryableFilterUserControl)); return filter; } // internal for unit testing internal string GetFilterVirtualPathWithCaching(MetaColumn column, string filterUIHint) { Debug.Assert(column != null); long cacheKey = Misc.CombineHashCodes(column, filterUIHint); return _templateFactory.GetTemplatePath(cacheKey, delegate() { return GetFilterVirtualPath(column, filterUIHint); }); } public virtual string GetFilterVirtualPath(MetaColumn column, string filterUIHint) { if (column == null) { throw new ArgumentNullException("column"); } string filterControlName = BuildFilterVirtualPath(column, filterUIHint); string filterTemplatePath = VirtualPathUtility.Combine(FilterFolderVirtualPath, filterControlName + ".ascx"); return filterTemplatePath; } private string BuildFilterVirtualPath(MetaColumn column, string filterUIHint) { string filterControlName = null; if (!String.IsNullOrEmpty(filterUIHint)) { filterControlName = filterUIHint; } else if (!String.IsNullOrEmpty(column.FilterUIHint)) { filterControlName = column.FilterUIHint; } filterControlName = filterControlName ?? GetDefaultFilterControlName(column); return filterControlName; } } } // 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
- ProxyOperationRuntime.cs
- NonVisualControlAttribute.cs
- AutoResetEvent.cs
- ObjectNavigationPropertyMapping.cs
- Emitter.cs
- Point3DIndependentAnimationStorage.cs
- BooleanExpr.cs
- TimeoutValidationAttribute.cs
- Timeline.cs
- EventRoute.cs
- XmlReaderSettings.cs
- WindowsGrip.cs
- EndpointInstanceProvider.cs
- XslCompiledTransform.cs
- DataGridHeaderBorder.cs
- AssemblyFilter.cs
- OleDbPermission.cs
- ProcessHostConfigUtils.cs
- FormatterServices.cs
- PeerApplicationLaunchInfo.cs
- _ProxyRegBlob.cs
- TitleStyle.cs
- Vars.cs
- Brush.cs
- ValidationSummary.cs
- CodeExporter.cs
- HttpHeaderCollection.cs
- RNGCryptoServiceProvider.cs
- TimeSpanConverter.cs
- ApplicationId.cs
- DeviceContext2.cs
- SymmetricKeyWrap.cs
- X509Certificate2.cs
- FormClosingEvent.cs
- NativeMethods.cs
- Simplifier.cs
- XmlComplianceUtil.cs
- DataGridViewCellMouseEventArgs.cs
- BindingCollection.cs
- ModuleConfigurationInfo.cs
- AttachedPropertyMethodSelector.cs
- CredentialCache.cs
- CachedPathData.cs
- LicenseException.cs
- ScrollContentPresenter.cs
- LogStore.cs
- UTF7Encoding.cs
- HideDisabledControlAdapter.cs
- Compiler.cs
- HttpAsyncResult.cs
- EnumConverter.cs
- DesignTimeParseData.cs
- HTMLTagNameToTypeMapper.cs
- _LoggingObject.cs
- Int16.cs
- StructureChangedEventArgs.cs
- RIPEMD160.cs
- ChangeTracker.cs
- Splitter.cs
- BodyGlyph.cs
- SafeTimerHandle.cs
- XNodeValidator.cs
- ListViewInsertedEventArgs.cs
- NameValueFileSectionHandler.cs
- EnvironmentPermission.cs
- RoleGroup.cs
- ConnectionManagementElement.cs
- ConfigurationPropertyAttribute.cs
- GeneralTransform.cs
- CopyOnWriteList.cs
- KeyManager.cs
- XmlLanguage.cs
- TextUtf8RawTextWriter.cs
- sqlinternaltransaction.cs
- SqlDataSourceCommandEventArgs.cs
- SoapElementAttribute.cs
- PreProcessInputEventArgs.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- DocumentPaginator.cs
- ContractComponent.cs
- TemplatePropertyEntry.cs
- RoutedPropertyChangedEventArgs.cs
- HttpErrorTraceRecord.cs
- BuildManagerHost.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- UriExt.cs
- IpcChannelHelper.cs
- QueryStringConverter.cs
- ListSourceHelper.cs
- AssemblyCacheEntry.cs
- ThreadExceptionEvent.cs
- RectangleF.cs
- RecognizeCompletedEventArgs.cs
- EncoderBestFitFallback.cs
- FileLogRecord.cs
- ResourceAttributes.cs
- _NegotiateClient.cs
- ObjectViewFactory.cs
- HtmlTableRow.cs
- Faults.cs