/// <summary> /// Recupera o gerador de chave com base no nome informado. /// </summary> /// <param name="name"></param> /// <returns>Instancia do gerador ou null caso não seja encontrado.</returns> public static IGeneratorKey GetGeneratorKey(string name) { IGeneratorKey item = null; if (_generatorsKey.TryGetValue(name, out item)) { return(item); } return(null); }
/// <summary> /// Adiciona a instancia de um gerador de chave que será usada no sistema. /// </summary> /// <param name="name">Nome do gerador.</param> /// <param name="instance">Instancia do gerador.</param> public static void AddGeneratorKey(string name, IGeneratorKey instance) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException("name"); } else if (instance == null) { throw new ArgumentNullException("instance"); } if (_generatorsKey.ContainsKey(name)) { throw new GDAException(string.Format("Generator with name '{0}' has been added in the collection configuration", name)); } _generatorsKey.Add(name, instance); }
/// <summary> /// Importa os dados do mapeamento contido na stream. /// </summary> /// <param name="inputStream"></param> public static void Import(System.IO.Stream inputStream) { if (inputStream == null) { throw new ArgumentNullException("inputStream"); } try { var reader = XmlReader.Create(inputStream, new XmlReaderSettings { IgnoreWhitespace = true, IgnoreComments = true, }); var doc = new System.Xml.XmlDocument(); doc.Load(reader); var root = doc.DocumentElement; if (!(root.LocalName == "gda-mapping" && root.NamespaceURI == "urn:gda-mapping-1.0")) { return; } var mappingNamespace = ElementMapping.GetAttributeString(root, "namespace"); var mappingAssembly = ElementMapping.GetAttributeString(root, "assembly"); var defaultProviderName = ElementMapping.GetAttributeString(root, "defaultProviderName"); var defaultProviderConfigurationName = ElementMapping.GetAttributeString(root, "defaultProviderConfigurationName"); var defaultConnectionString = ElementMapping.GetAttributeString(root, "defaultConnectionString"); var defaultSchema = ElementMapping.GetAttributeString(root, "defaultSchema"); foreach (XmlElement referencesElement in root.GetElementsByTagName("references")) { foreach (XmlElement i in referencesElement.GetElementsByTagName("reference")) { var refMapping = new ReferenceMapping(i); bool exists = false; lock (objLock) exists = _references.Exists(f => f.Equals(refMapping)); if (!exists) { lock (objLock) _references.Add(refMapping); if (!string.IsNullOrEmpty(refMapping.FileName)) { Import(refMapping.FileName); } else { Import(refMapping.AssemblyName, refMapping.ResourceName); } } } break; } lock (objLock) { foreach (XmlElement i in root.GetElementsByTagName("class")) { var classMap = new ClassMapping(i, mappingNamespace, mappingAssembly, defaultProviderName, defaultProviderConfigurationName, defaultConnectionString, defaultSchema); if (!_classes.ContainsKey(classMap.TypeInfo.Fullname)) { _classes.Add(classMap.TypeInfo.Fullname, classMap); } } foreach (XmlElement i in root.GetElementsByTagName("sql-query")) { var queryMap = new SqlQueryMapping(i); if (!_queries.ContainsKey(queryMap.Name)) { _queries.Add(queryMap.Name, queryMap); } } var modelsNamespace = ElementMapping.FirstOrDefault <XmlElement>(root.GetElementsByTagName("modelsNamespace")); if (modelsNamespace != null) { foreach (XmlElement i in modelsNamespace.GetElementsByTagName("namespace")) { var ns = new ModelsNamespaceMapping(i); GDASettings.AddModelsNamespace(ns.Assembly, ns.Namespace); } } XmlElement generateKeyHandlerElement = ElementMapping.FirstOrDefault <XmlElement>(root.GetElementsByTagName("generateKeyHandler")); if (generateKeyHandlerElement != null) { GDASettings.DefineGenerateKeyHandler(ElementMapping.GetAttributeString(generateKeyHandlerElement, "classType", true), ElementMapping.GetAttributeString(generateKeyHandlerElement, "methodName", true)); } var generatorsElement = ElementMapping.FirstOrDefault <XmlElement>(root.GetElementsByTagName("generatorsKey")); if (generatorsElement != null) { foreach (XmlElement i in generatorsElement.GetElementsByTagName("generator")) { var gk = new GeneratorKeyMapping(i); IGeneratorKey instance = null; try { instance = Activator.CreateInstance(gk.ClassType) as IGeneratorKey; } catch (Exception ex) { if (ex is System.Reflection.TargetInvocationException) { ex = ex.InnerException; } throw new GDAMappingException("Fail on create instance for \"{0}\".", gk.ClassType.FullName); } if (instance == null) { throw new GDAMappingException("\"{0}\" not inherits of {1}.", gk.ClassType.FullName, typeof(IGeneratorKey).FullName); } GDASettings.AddGeneratorKey(gk.Name, instance); } } } } catch (Exception ex) { if (ex is GDAMappingException) { throw ex; } else { throw new GDAMappingException("Fail on load mapping", ex); } } }