using System;
using System.Collections;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.Design;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;
using Csla;
using Csla.Web.Design;
namespace Csla.Web.Design
{
///
/// Object providing schema information for a
/// business object.
///
[Serializable()]
public class ObjectViewSchema : IDataSourceViewSchema
{
private string _typeName = "";
private CslaDataSourceDesigner _designer;
///
/// Create an instance of the object.
///
/// Site containing the control.
/// The business class for
/// which to generate the schema.
public ObjectViewSchema(CslaDataSourceDesigner site, string typeName)
{
_typeName = typeName;
_designer = site;
}
///
/// Returns a list of child schemas belonging to the
/// object.
///
/// This schema object only returns
/// schema for the object itself, so GetChildren will
/// always return Nothing (null in C#).
public System.Web.UI.Design.IDataSourceViewSchema[] GetChildren()
{
return null;
}
///
/// Returns schema information for each property on
/// the object.
///
/// All public properties on the object
/// will be reflected in this schema list except
/// for those properties where the
/// Browsable attribute
/// is False.
///
public System.Web.UI.Design.IDataSourceFieldSchema[] GetFields()
{
ITypeResolutionService typeService = null;
List result = new List();
if (_designer != null)
{
Type objectType = null;
try
{
typeService = (ITypeResolutionService)(_designer.Site.GetService(typeof(ITypeResolutionService)));
objectType = typeService.GetType(_typeName, true, false);
if (typeof(IEnumerable).IsAssignableFrom(objectType))
{
// this is a list so get the item type
objectType = Utilities.GetChildItemType(objectType);
}
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(objectType);
foreach (PropertyDescriptor item in props)
{
if (item.IsBrowsable)
{
result.Add(new ObjectFieldInfo(item));
}
}
}
catch
{ /* do nothing - just swallow exception */ }
}
return result.ToArray();
}
///
/// Returns the name of the schema.
///
public string Name
{
get
{
return "Default";
}
}
}
}