#region Apache Notice /***************************************************************************** * $Header: $ * $Revision: 576082 $ * $Date$ * * iBATIS.NET Data Mapper * Copyright (C) 2004 - Gilles Bayon * * * 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 Using using System; using System.Collections; using System.Collections.Specialized; using System.Configuration; using System.Xml; using Apache.Ibatis.Common; using Apache.Ibatis.Common.Data; using CommonExceptions = Apache.Ibatis.Common.Exceptions; using Apache.Ibatis.Common.Utilities; using Apache.Ibatis.Common.Utilities.Objects; using Apache.Ibatis.Common.Utilities.Objects.Members; using Apache.Ibatis.DataMapper.Configuration; using Apache.Ibatis.DataMapper.DataExchange; using Apache.Ibatis.DataMapper.TypeHandlers; #endregion namespace Apache.Ibatis.DataMapper.Scope { /// /// The ConfigurationScope maintains the state of the build process. /// public class ConfigurationScope : IScope { /// /// Empty parameter map /// public const string EMPTY_PARAMETER_MAP = "iBATIS.Empty.ParameterMap"; #region Fields private ErrorContext _errorContext = null; private HybridDictionary _providers = new HybridDictionary(); private HybridDictionary _sqlIncludes = new HybridDictionary(); private NameValueCollection _properties = new NameValueCollection(); private XmlDocument _sqlMapConfigDocument = null; private XmlDocument _sqlMapDocument = null; private XmlNode _nodeContext = null; private bool _useConfigFileWatcher = false; private bool _useStatementNamespaces = false; private bool _isCacheModelsEnabled = false; private bool _useReflectionOptimizer = true; private bool _validateSqlMap = false; private bool _isCallFromDao = false; private IDataMapper dataMapper = null; private string _sqlMapNamespace = null; private IDataSource _dataSource = null; private bool _isXmlValid = true; private XmlNamespaceManager _nsmgr = null; private HybridDictionary _cacheModelFlushOnExecuteStatements = new HybridDictionary(); #endregion #region Constructors /// /// Default constructor /// public ConfigurationScope() { _errorContext = new ErrorContext(); _providers.Clear(); } #endregion #region Properties /// /// The list of sql fragment /// public HybridDictionary SqlIncludes { get { return _sqlIncludes; } } /// /// XmlNamespaceManager /// public XmlNamespaceManager XmlNamespaceManager { set { _nsmgr = value; } get { return _nsmgr; } } /// /// Set if the parser should validate the sqlMap documents /// public bool ValidateSqlMap { set { _validateSqlMap = value; } get { return _validateSqlMap; } } /// /// Tells us if the xml configuration file validate the schema /// public bool IsXmlValid { set { _isXmlValid = value; } get { return _isXmlValid; } } /// /// The current SqlMap namespace. /// public string SqlMapNamespace { set { _sqlMapNamespace = value; } get { return _sqlMapNamespace; } } /// /// Gets or sets the data mapper. /// /// The data mapper. public IDataMapper DataMapper { set { dataMapper = value; } get { return dataMapper; } } /// /// A factory for DataExchange objects /// public DataExchangeFactory DataExchangeFactory { get { return dataMapper.DataExchangeFactory; } } /// /// Tell us if we are in a DataAccess context. /// public bool IsCallFromDao { set { _isCallFromDao = value; } get { return _isCallFromDao; } } /// /// Tell us if we cache model is enabled. /// public bool IsCacheModelsEnabled { set { _isCacheModelsEnabled = value; } get { return _isCacheModelsEnabled; } } /// /// External data source /// public IDataSource DataSource { set { _dataSource = value; } get { return _dataSource; } } /// /// The current context node we are analizing /// public XmlNode NodeContext { set { _nodeContext = value; } get { return _nodeContext; } } /// /// The XML SqlMap config file /// public XmlDocument SqlMapConfigDocument { set { _sqlMapConfigDocument = value; } get { return _sqlMapConfigDocument; } } /// /// A XML SqlMap file /// public XmlDocument SqlMapDocument { set { _sqlMapDocument = value; } get { return _sqlMapDocument; } } /// /// Tell us if we use Configuration File Watcher /// public bool UseConfigFileWatcher { set { _useConfigFileWatcher = value; } get { return _useConfigFileWatcher; } } /// /// Tell us if we use statements namespaces /// public bool UseStatementNamespaces { set { _useStatementNamespaces = value; } get { return _useStatementNamespaces; } } /// /// Get the request's error context /// public ErrorContext ErrorContext { get { return _errorContext; } } /// /// List of providers /// public HybridDictionary Providers { get { return _providers; } } /// /// List of global properties /// public NameValueCollection Properties { get { return _properties; } } /// /// Indicates if we can use reflection optimizer. /// public bool UseReflectionOptimizer { get { return _useReflectionOptimizer; } set { _useReflectionOptimizer = value; } } /// /// Temporary storage for mapping cache model ids (key is System.String) to statements (value is IList which contains IMappedStatements). /// public HybridDictionary CacheModelFlushOnExecuteStatements { get { return _cacheModelFlushOnExecuteStatements; } set { _cacheModelFlushOnExecuteStatements = value; } } #endregion /// /// Register under Statement Name or Fully Qualified Statement Name /// /// An Identity /// The new Identity public string ApplyNamespace(string id) { string newId = id; if (_sqlMapNamespace != null && _sqlMapNamespace.Length > 0 && id != null && id.Length > 0 && id.IndexOf(".") < 0) { newId = _sqlMapNamespace + DomSqlMapBuilder.DOT + id; } return newId; } ///// ///// Resolves the type handler. ///// ///// The clazz. ///// Name of the member. ///// Type of the CLR. ///// Type of the db. ///// if set to true [for setter]. ///// //public ITypeHandler ResolveTypeHandler( // Type clazz, // string memberName, // string clrType, // string dbType, // bool forSetter) //{ // ITypeHandler handler = null; // if (clazz==null) // { // handler = this.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler(); // } // else if (typeof(IDictionary).IsAssignableFrom(clazz)) // { // // IDictionary // if (clrType ==null ||clrType.Length == 0) // { // handler = this.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler(); // } // else // { // try // { // Type type = TypeUtils.ResolveType(clrType); // handler = this.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType); // } // catch (Exception e) // { // throw new CommonExceptions.ConfigurationException("Error. Could not set TypeHandler. Cause: " + e.Message, e); // } // } // } // else if (this.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(clazz, dbType) != null) // { // // Primitive // handler = this.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(clazz, dbType); // } // else // { // // .NET object // if (clrType ==null || clrType.Length == 0) // { // Type type = null; // if (forSetter) // { // type = ObjectProbe.GetMemberTypeForSetter(clazz, memberName); // } // else // { // type = ObjectProbe.GetMemberTypeForGetter(clazz, memberName); // } // handler = this.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType); // } // else // { // try // { // Type type = TypeUtils.ResolveType(clrType); // handler = this.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(type, dbType); // } // catch (Exception e) // { // throw new CommonExceptions.ConfigurationException("Error. Could not set TypeHandler. Cause: " + e.Message, e); // } // } // } // return handler; //} } }