//
// System.Web.UI.WebControls.Xml.cs
//
// Authors:
// Miguel de Icaza (miguel@novell.com)
//
// (C) 2005 Novell, Inc (http://www.novell.com)
//
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System.ComponentModel;
using System.Security.Permissions;
using System.Xml;
using System.Xml.Xsl;
#if NET_2_0
using System.Xml.XPath;
using System.Collections;
#endif
namespace System.Web.UI.WebControls{
// CAS
[AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
// attributes
[DefaultProperty ("DocumentSource")]
[Designer ("System.Web.UI.Design.WebControls.XmlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
#if NET_2_0
[PersistChildren (true)]
#else
[PersistChildren (false)]
#endif
[ControlBuilder (typeof (XmlBuilder))]
public class Xml : Control {
// Property set variables
XmlDocument xml_document;
#if NET_2_0
XPathNavigator xpath_navigator;
#endif
string xml_content;
string xml_file;
XslTransform xsl_transform;
XsltArgumentList transform_arguments;
string transform_file;
public Xml ()
{
}
#if NET_2_0
[EditorBrowsable (EditorBrowsableState.Never)]
[MonoTODO ("Anything else?")]
public override string ClientID
{
get {
return base.ClientID;
}
}
[MonoTODO ("Anything else?")]
[EditorBrowsable (EditorBrowsableState.Never)]
public override ControlCollection Controls
{
get {
return base.Controls;
}
}
#endif
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
#if NET_2_0
[Obsolete ("Use the XPathNavigator property instead by creating an XPathDocument and calling CreateNavigator().")]
#endif
public XmlDocument Document {
get {
return xml_document;
}
set {
xml_content = null;
xml_file = null;
xml_document = value;
}
}
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string DocumentContent {
get {
#if NET_2_0
return (xml_content != null)? xml_content : "";
#else
return "";
#endif
}
set {
xml_content = value;
xml_file = null;
xml_document = null;
}
}
#if ONLY_1_1
[Bindable (true)]
#endif
[DefaultValue ("")]
#if NET_2_0
[UrlProperty]
[Editor ("System.Web.UI.Design.XmlUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
#else
[Editor ("System.Web.UI.Design.XmlUrlEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
#endif
[WebSysDescription ("")]
[WebCategory ("Behavior")]
[MonoLimitation ("Absolute path to the file system is not supported; use a relative URI instead.")]
public string DocumentSource {
get {
if (xml_file == null)
return "";
return xml_file;
}
set {
xml_content = null;
xml_file = value;
xml_document = null;
}
}
#if NET_2_0
[EditorBrowsable (EditorBrowsableState.Never)]
[Browsable (false)]
[DefaultValue (false)]
public override bool EnableTheming
{
get { return false; }
set { throw new NotSupportedException (); }
}
[DefaultValue ("")]
[EditorBrowsable (EditorBrowsableState.Never)]
[Browsable (false)]
public override string SkinID
{
// MSDN: Always returns an empty string (""). This property is not supported.
get { return String.Empty; }
// MSDN: Any attempt to set the value of this property throws a NotSupportedException exception.
set { throw new NotSupportedException ("SkinID is not supported on Xml control"); }
}
#endif
[Browsable (false)]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
[WebSysDescription ("")]
[WebCategory ("Behavior")]
public XslTransform Transform {
get {
return xsl_transform;
}
set {
transform_file = null;
xsl_transform = value;
}
}
[Browsable (false)]
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
[WebSysDescription ("")]
[WebCategory ("Behavior")]
public XsltArgumentList TransformArgumentList {
get {
return transform_arguments;
}
set {
transform_arguments = value;
}
}
#if ONLY_1_1
[Bindable (true)]
#endif
[DefaultValue ("")]
#if NET_2_0
[Editor ("System.Web.UI.Design.XslUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
#else
[Editor ("System.Web.UI.Design.XslUrlEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]
#endif
[MonoLimitation ("Absolute path to the file system is not supported; use a relative URI instead.")]
public string TransformSource {
get {
if (transform_file == null)
return "";
return transform_file;
}
set {
transform_file = value;
xsl_transform = null;
}
}
#if NET_2_0
[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
[Browsable (false)]
public XPathNavigator XPathNavigator
{
get { return xpath_navigator; }
set { xpath_navigator = value; }
}
[EditorBrowsable (EditorBrowsableState.Never)]
public override Control FindControl (string id)
{
return null;
}
[EditorBrowsable (EditorBrowsableState.Never)]
public override void Focus ()
{
throw new NotSupportedException ();
}
[EditorBrowsable (EditorBrowsableState.Never)]
public override bool HasControls ()
{
return false;
}
#endif
#if NET_2_0
protected internal
#else
protected
#endif
override void Render (HtmlTextWriter output)
{
XmlDocument xml_doc = null;
#if NET_2_0
if (xpath_navigator == null) {
#endif
if (xml_document != null)
xml_doc = xml_document;
else {
if (xml_content != null) {
xml_doc = new XmlDocument ();
xml_doc.LoadXml (xml_content);
}
else if (xml_file != null) {
xml_doc = new XmlDocument ();
xml_doc.Load (MapPathSecure (xml_file));
}
else
return;
}
#if NET_2_0
}
#endif
XslTransform t = xsl_transform;
if (transform_file != null){
t = new XslTransform ();
t.Load (MapPathSecure (transform_file));
}
if (t != null){
#if NET_2_0
if (xpath_navigator != null) {
t.Transform(xpath_navigator, transform_arguments, output);
}
else {
#endif
t.Transform (xml_doc, transform_arguments, output, null);
#if NET_2_0
}
#endif
return;
}
XmlTextWriter xmlwriter = new XmlTextWriter (output);
xmlwriter.Formatting = Formatting.None;
#if NET_2_0
if (xpath_navigator != null) {
xmlwriter.WriteStartDocument ();
xpath_navigator.WriteSubtree (xmlwriter);
}
else {
#endif
xml_doc.Save (xmlwriter);
#if NET_2_0
}
#endif
}
protected override void AddParsedSubObject (object obj)
{
LiteralControl lc = obj as LiteralControl;
if (lc != null){
xml_document = new XmlDocument ();
xml_document.LoadXml (lc.Text);
} else {
throw new HttpException (
String.Format ("Objects of type {0} are not supported as children of the Xml control",
obj.GetType ()));
}
}
#if NET_2_0
protected override ControlCollection CreateControlCollection ()
{
return new EmptyControlCollection (this);
}
[MonoTODO("Always returns null")]
protected override IDictionary GetDesignModeState ()
{
return null;
}
#endif
}
}
|