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
- BookmarkScope.cs
- TokenBasedSetEnumerator.cs
- GradientSpreadMethodValidation.cs
- Menu.cs
- HtmlSelect.cs
- OpacityConverter.cs
- DeclarativeCatalogPart.cs
- XmlSubtreeReader.cs
- StylusEditingBehavior.cs
- RegexStringValidator.cs
- ResourceReader.cs
- MethodToken.cs
- GenerateHelper.cs
- RoleManagerEventArgs.cs
- HttpPostLocalhostServerProtocol.cs
- PagerSettings.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- TraceSource.cs
- CodeArgumentReferenceExpression.cs
- XhtmlBasicPanelAdapter.cs
- Transform.cs
- DependencyPropertyAttribute.cs
- ConstantSlot.cs
- TreeViewEvent.cs
- MatrixUtil.cs
- ProfileGroupSettings.cs
- SecondaryIndexDefinition.cs
- SerializableReadOnlyDictionary.cs
- FontDialog.cs
- StateRuntime.cs
- RegexCompilationInfo.cs
- VirtualDirectoryMapping.cs
- Certificate.cs
- ElementUtil.cs
- FloaterBaseParagraph.cs
- XmlCharacterData.cs
- UpdateTranslator.cs
- RadioButton.cs
- SecurityTokenResolver.cs
- TextSelectionHelper.cs
- DocumentPageTextView.cs
- ProtectedProviderSettings.cs
- XmlJsonWriter.cs
- CollectionDataContractAttribute.cs
- ParamArrayAttribute.cs
- CryptoConfig.cs
- CodePageUtils.cs
- NumberFunctions.cs
- EllipseGeometry.cs
- ProfileProvider.cs
- DataError.cs
- _SSPISessionCache.cs
- TargetInvocationException.cs
- Application.cs
- TreeViewItemAutomationPeer.cs
- CompatibleComparer.cs
- ValidationEventArgs.cs
- Variant.cs
- XmlSchemaElement.cs
- ApplicationContext.cs
- X509ChainPolicy.cs
- DocumentPageTextView.cs
- TransformDescriptor.cs
- ClientOperationFormatterProvider.cs
- TraceHandler.cs
- InvalidEnumArgumentException.cs
- EntityUtil.cs
- DecimalStorage.cs
- DataGridViewToolTip.cs
- XmlReaderSettings.cs
- SecurityElement.cs
- Point3DConverter.cs
- EditingScopeUndoUnit.cs
- EventHandlingScope.cs
- DataControlPagerLinkButton.cs
- ColumnTypeConverter.cs
- ToolStripAdornerWindowService.cs
- RowBinding.cs
- SystemFonts.cs
- GridViewColumnCollection.cs
- XXXOnTypeBuilderInstantiation.cs
- CodeMemberField.cs
- Process.cs
- BitmapEffectInput.cs
- ChunkedMemoryStream.cs
- DeobfuscatingStream.cs
- Parallel.cs
- UnconditionalPolicy.cs
- DependencyObject.cs
- WebPartDescription.cs
- ModelUIElement3D.cs
- HttpFileCollection.cs
- PerfService.cs
- ClientBuildManagerCallback.cs
- CodeTryCatchFinallyStatement.cs
- VirtualPath.cs
- CheckBox.cs
- NamedPipeConnectionPool.cs
- KeyValuePairs.cs
- SqlNodeAnnotations.cs