#region License
/*
* Copyright 2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#endregion
#region Imports
using System;
using System.Collections;
using System.Web;
using System.Xml;
using Spring.Objects.Factory.Config;
using Spring.Objects.Factory.Support;
using Spring.Util;
#endregion
namespace Spring.Objects.Factory.Xml{
/// <summary>
/// A custom implementation of the
/// <see cref="INamespaceParser"/>
/// interface that properly handles web application specific attributes,
/// such as object scope.
/// </summary>
/// <remarks>
/// <p>
/// Parses object definitions according to the standard Spring.NET schema.
/// </p>
/// </remarks>
/// <author>Aleksandar Seovic</author>
/// <see cref="ObjectsNamespaceParser"/>
public class WebObjectsNamespaceParser : ObjectsNamespaceParser
{
// private IObjectDefinitionFactory objectDefinitionFactory;
#region Constructor (s) / Destructor
/// <summary>
/// Creates a new instance of the
/// <see cref="WebObjectsNamespaceParser"/> class.
/// </summary>
public WebObjectsNamespaceParser()
{
// objectDefinitionFactory = new WebObjectDefinitionFactory();
}
#endregion
// /// <summary>
// /// Parses an object definition and set various web related properties
// /// if the definition is an <see cref="RootWebObjectDefinition"/>.
// /// </summary>
// /// <param name="element">The object definition element.</param>
// /// <param name="id">The id / name of the object definition.</param>
// /// <param name="parserContext">the parser helper</param>
// /// <returns>The object (definition).</returns>
// /// <remarks>
// /// <p>
// /// The <i>'various web related properties'</i> currently includes the
// /// intended scope of the object.
// /// </p>
// /// </remarks>
// /// <see cref="Spring.Objects.Factory.Support.ObjectScope"/>
// /// <see cref="Spring.Objects.Factory.Support.IWebObjectDefinition"/>
// protected override IConfigurableObjectDefinition ParseObjectDefinitionElement(
// XmlElement element, string id, ParserContext parserContext)
// {
// IConfigurableObjectDefinition definition = base.ParseObjectDefinitionElement(element, id, parserContext);
// IWebObjectDefinition webDefinition = definition as IWebObjectDefinition;
//
// if (webDefinition != null)
// {
// webDefinition.Scope = GetScope(element.GetAttribute(ObjectDefinitionConstants.ScopeAttribute));
//
// // force request and session scoped objects to be lazily initialized...
// if (webDefinition.Scope != ObjectScope.Application)
// {
// definition.IsLazyInit = true;
// }
//
// string typeName = element.GetAttribute(ObjectDefinitionConstants.TypeAttribute);
// if (typeName.EndsWith(".ascx") || typeName.EndsWith(".master"))
// {
// definition.IsAbstract = true;
// }
// }
//
// return definition;
// }
// /// <summary>
// /// Calculates an id for an object definition.
// /// </summary>
// /// <param name="element">
// /// The element containing the object definition.
// /// </param>
// /// <param name="aliases">
// /// The list of names defined for the object; may be <see lang="null"/>
// /// or even empty.
// /// </param>
// /// <returns>
// /// A calculated object definition id.
// /// </returns>
// /// <seealso cref="ObjectsNamespaceParser.CalculateId"/>.
// protected override string CalculateId(XmlElement element, ArrayList aliases)
// {
// return null;
// string id = null;
// string strTypeName = element.GetAttribute(ObjectDefinitionConstants.TypeAttribute).ToLower();
// if (strTypeName.EndsWith(".aspx"))
// {
// string url = element.GetAttribute(ObjectDefinitionConstants.TypeAttribute);
// //id = WebUtils.GetPageName(url);
// //Type pageType = WebUtils.GetPageType(url);
// System.Web.UI.Page page = (System.Web.UI.Page)WebObjectUtils.CreatePageInstance(url);
//#if NET_2_0
// id = page.AppRelativeVirtualPath.Substring(1);
//#else
// string appPath = HttpContext.Current.Request.ApplicationPath.TrimEnd('\\', '/');
// id = page.TemplateSourceDirectory.TrimEnd('\\','/') + "/" + WebUtils.GetPageName(url) + ".aspx";
// if (id.ToLower().StartsWith(appPath.ToLower()))
// {
// id = id.Substring(appPath.Length);
// }
//#endif
// for(int ai=0;ai<aliases.Count;ai++)
// {
// string alias = (string)aliases[ai];
// if (alias != null && alias.Length>0 && alias[0]=='~')
// {
// aliases[ai] = "/"+alias.Substring(1).TrimStart('/','\\');
// }
// }
// }
// else if (strTypeName.EndsWith(".ascx") || strTypeName.EndsWith(".master"))
// {
// id = WebObjectUtils.GetControlType(strTypeName).FullName;
// }
// else
// {
// id = base.CalculateId(element, aliases);
// }
// return id;
// }
// /// <summary>
// /// Gets the scope out of the supplied <paramref name="value"/>.
// /// </summary>
// /// <remarks>
// /// <p>
// /// If the supplied <paramref name="value"/> is invalid
// /// (i.e. it does not resolve to one of the
// /// <see cref="Spring.Objects.Factory.Support.ObjectScope"/> values),
// /// then the return value of this method call will be
// /// <see cref="Spring.Objects.Factory.Support.ObjectScope.Default"/>;
// /// no exception will be raised (although the value of the invalid
// /// scope <paramref name="value"/> will be logged).
// /// </p>
// /// </remarks>
// /// <param name="value">The string containing the scope name.</param>
// /// <returns>The scope.</returns>
// /// <seealso cref="Spring.Objects.Factory.Support.ObjectScope"/>
// private ObjectScope GetScope(string value)
// {
// ObjectScope scope = ObjectScope.Default;
// if (StringUtils.HasText(value))
// {
// try
// {
// scope = (ObjectScope) Enum.Parse(typeof(ObjectScope), value, true);
// }
// catch (ArgumentException ex)
// {
// #region Instrumentation
//
// if (log.IsDebugEnabled)
// {
// log.Debug(string.Format("Error while parsing object scope : '{0}' is an invalid value.",
// value), ex);
// }
//
// #endregion
// }
// }
// return scope;
// }
}
}
|