using System; using System.Collections.Generic; using System.Linq; using System.Text; using Xsd2Code.Library.Extensions; using Xsd2Code.Library.Helpers; using System.Reflection; using Xsd2Code.Library.Properties; namespace Xsd2Code.Library { /// /// Class factory /// /// /// Revision history: /// /// Created 2009-05-28 by Pascal Cabanel /// static class GeneratorFactory { /// /// Get code generator extension /// /// Generator parameters /// internal static Result GetCodeExtension(GeneratorParams generatorParams) { var extention = new Result(GeneratorFactory.GetExtention(generatorParams.TargetFramework), true); if (extention.Entity != null) return extention; var types = Assembly.GetExecutingAssembly().GetTypes() .Select(type => new { Type = type, TargetFrameworkAttributes = type.GetCustomAttributes(typeof(CodeExtensionAttribute), true) }) .Where(o => o.TargetFrameworkAttributes.Length > 0 && o.TargetFrameworkAttributes .Where(attr => ((CodeExtensionAttribute)attr).TargetFramework == generatorParams.TargetFramework) .Count() > 0) .ToList(); if (types.Count == 1) { try { return new Result(Activator.CreateInstance(types[0].Type) as ICodeExtension, true); } catch (Exception ex) { return new Result(null, false, ex.Message, MessageType.Error); } } return new Result(null, false, string.Format(Resources.UnsupportedTargetFramework, generatorParams.TargetFramework), MessageType.Error); } internal static ICodeExtension GetExtention(TargetFramework target) { switch (target) { case TargetFramework.Net20: return new Net20Extension(); case TargetFramework.Net30: return new Net30Extension(); case TargetFramework.Net35: return new Net35Extension(); case TargetFramework.Silverlight: return new SilverlightExtension(); } return null; } } }