// invoked by the API // DISABLED - works but useless, because if we return type models that // reference some Clr types that exist only on the server and not in the // remove app, then what can we do with them? Better do everything on // the server. // //[System.Web.Http.HttpGet] // use the http one, not mvc, with api controllers! //[ModelsBuilderAuthFilter("developer")] // have to use our own, non-cookie-based, auth //public HttpResponseMessage GetTypeModels() //{ // var umbraco = Application.GetApplication(); // var modelTypes = umbraco.GetContentAndMediaTypes(); // return Request.CreateResponse(HttpStatusCode.OK, modelTypes, Configuration.Formatters.JsonFormatter); //} // //public const string GetTypeModelsUrl = ControllerUrl + "/GetTypeModels"; #endregion public static void GenerateModels(string appData, string bin) { var modelsDirectory = Path.Combine(appData, "Models"); if (!Directory.Exists(modelsDirectory)) Directory.CreateDirectory(modelsDirectory); foreach (var file in Directory.GetFiles(modelsDirectory, "*.generated.cs")) File.Delete(file); var umbraco = Application.GetApplication(); var typeModels = umbraco.GetAllTypes(); // using BuildManager references var referencedAssemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToArray(); var ourFiles = Directory.GetFiles(modelsDirectory, "*.cs").ToDictionary(x => x, File.ReadAllText); var parseResult = new CodeParser().Parse(ourFiles, referencedAssemblies); var builder = new TextBuilder(typeModels, parseResult, Config.ModelsNamespace); foreach (var typeModel in builder.GetModelsToGenerate()) { var sb = new StringBuilder(); builder.Generate(sb, typeModel); var filename = Path.Combine(modelsDirectory, typeModel.ClrName + ".generated.cs"); File.WriteAllText(filename, sb.ToString()); } if (bin != null) { foreach (var file in Directory.GetFiles(modelsDirectory, "*.generated.cs")) ourFiles[file] = File.ReadAllText(file); var compiler = new Compiler(); foreach (var asm in referencedAssemblies) compiler.ReferencedAssemblies.Add(asm); compiler.Compile(bin, builder.GetModelsNamespace(), ourFiles); } OutOfDateModelsStatus.Clear(); }