ModelsBuilder is disabled (the .Enable key is missing, or its value is not 'true').";
+
var sb = new StringBuilder();
sb.Append("Version: ");
diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs
new file mode 100644
index 0000000000..9dc1ea6c20
--- /dev/null
+++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs
@@ -0,0 +1,17 @@
+using Umbraco.ModelsBuilder.Embedded.Configuration;
+using Umbraco.Web.Models.ContentEditing;
+
+namespace Umbraco.ModelsBuilder.Embedded.BackOffice
+{
+ ///
+ /// Used to validate the aliases for the content type when MB is enabled to ensure that
+ /// no illegal aliases are used
+ ///
+ // ReSharper disable once UnusedMember.Global - This is typed scanned
+ public class MediaTypeModelValidator : ContentTypeModelValidatorBase
+ {
+ public MediaTypeModelValidator(IModelsBuilderConfig config) : base(config)
+ {
+ }
+ }
+}
diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs
new file mode 100644
index 0000000000..8d0a98eeab
--- /dev/null
+++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs
@@ -0,0 +1,17 @@
+using Umbraco.ModelsBuilder.Embedded.Configuration;
+using Umbraco.Web.Models.ContentEditing;
+
+namespace Umbraco.ModelsBuilder.Embedded.BackOffice
+{
+ ///
+ /// Used to validate the aliases for the content type when MB is enabled to ensure that
+ /// no illegal aliases are used
+ ///
+ // ReSharper disable once UnusedMember.Global - This is typed scanned
+ public class MemberTypeModelValidator : ContentTypeModelValidatorBase
+ {
+ public MemberTypeModelValidator(IModelsBuilderConfig config) : base(config)
+ {
+ }
+ }
+}
diff --git a/src/Umbraco.ModelsBuilder/BackOffice/ModelsBuilderBackOfficeController.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs
similarity index 92%
rename from src/Umbraco.ModelsBuilder/BackOffice/ModelsBuilderBackOfficeController.cs
rename to src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs
index 3963ad09f2..1d9de265e9 100644
--- a/src/Umbraco.ModelsBuilder/BackOffice/ModelsBuilderBackOfficeController.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs
@@ -4,12 +4,12 @@ using System.Net.Http;
using System.Runtime.Serialization;
using System.Web.Hosting;
using Umbraco.Core.Exceptions;
-using Umbraco.ModelsBuilder.Building;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Building;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
using Umbraco.Web.Editors;
using Umbraco.Web.WebApi.Filters;
-namespace Umbraco.ModelsBuilder.BackOffice
+namespace Umbraco.ModelsBuilder.Embedded.BackOffice
{
///
/// API controller for use in the Umbraco back office with Angular resources
@@ -20,7 +20,7 @@ namespace Umbraco.ModelsBuilder.BackOffice
/// global WebApi formatters being changed since this is always forced to only return Angular JSON Specific formats.
///
[UmbracoApplicationAuthorize(Core.Constants.Applications.Settings)]
- public class ModelsBuilderBackOfficeController : UmbracoAuthorizedJsonController
+ public class ModelsBuilderDashboardController : UmbracoAuthorizedJsonController
{
private readonly IModelsBuilderConfig _config;
private readonly ModelsGenerator _modelGenerator;
@@ -28,7 +28,7 @@ namespace Umbraco.ModelsBuilder.BackOffice
private readonly ModelsGenerationError _mbErrors;
private readonly DashboardReport _dashboardReport;
- public ModelsBuilderBackOfficeController(IModelsBuilderConfig config, ModelsGenerator modelsGenerator, OutOfDateModelsStatus outOfDateModels, ModelsGenerationError mbErrors)
+ public ModelsBuilderDashboardController(IModelsBuilderConfig config, ModelsGenerator modelsGenerator, OutOfDateModelsStatus outOfDateModels, ModelsGenerationError mbErrors)
{
//_umbracoServices = umbracoServices;
_config = config;
@@ -97,7 +97,7 @@ namespace Umbraco.ModelsBuilder.BackOffice
{
return new Dashboard
{
- Enable = true,
+ Enable = _config.Enable,
Text = _dashboardReport.Text(),
CanGenerate = _dashboardReport.CanGenerate(),
OutOfDateModels = _dashboardReport.AreModelsOutOfDate(),
diff --git a/src/Umbraco.ModelsBuilder/Building/Builder.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs
similarity index 98%
rename from src/Umbraco.ModelsBuilder/Building/Builder.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs
index f7917cbf22..ffd56d4312 100644
--- a/src/Umbraco.ModelsBuilder/Building/Builder.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs
@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
// NOTE
// The idea was to have different types of builder, because I wanted to experiment with
@@ -32,7 +32,7 @@ namespace Umbraco.ModelsBuilder.Building
"Umbraco.Core.Models",
"Umbraco.Core.Models.PublishedContent",
"Umbraco.Web",
- "Umbraco.ModelsBuilder"
+ "Umbraco.ModelsBuilder.Embedded"
};
///
@@ -65,8 +65,8 @@ namespace Umbraco.ModelsBuilder.Building
/// Initializes a new instance of the class with a list of models to generate,
/// the result of code parsing, and a models namespace.
///
- ///
/// The list of models to generate.
+ /// The models namespace.
protected Builder(IModelsBuilderConfig config, IList typeModels)
{
_typeModels = typeModels ?? throw new ArgumentNullException(nameof(typeModels));
diff --git a/src/Umbraco.ModelsBuilder/Building/ModelsGenerator.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs
similarity index 95%
rename from src/Umbraco.ModelsBuilder/Building/ModelsGenerator.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs
index 9b1c36b42c..8a3bc5a5b5 100644
--- a/src/Umbraco.ModelsBuilder/Building/ModelsGenerator.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs
@@ -1,8 +1,8 @@
using System.IO;
using System.Text;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
public class ModelsGenerator
{
diff --git a/src/Umbraco.ModelsBuilder/Building/PropertyModel.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/PropertyModel.cs
similarity index 97%
rename from src/Umbraco.ModelsBuilder/Building/PropertyModel.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/PropertyModel.cs
index 5f2545ec2a..af5445b175 100644
--- a/src/Umbraco.ModelsBuilder/Building/PropertyModel.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/PropertyModel.cs
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
///
/// Represents a model property.
diff --git a/src/Umbraco.ModelsBuilder/Building/TextBuilder.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs
similarity index 99%
rename from src/Umbraco.ModelsBuilder/Building/TextBuilder.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs
index 317a9f27d7..d1190a0374 100644
--- a/src/Umbraco.ModelsBuilder/Building/TextBuilder.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs
@@ -3,9 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
///
/// Implements a builder that works by writing text.
@@ -16,7 +16,6 @@ namespace Umbraco.ModelsBuilder.Building
/// Initializes a new instance of the class with a list of models to generate
/// and the result of code parsing.
///
- ///
/// The list of models to generate.
public TextBuilder(IModelsBuilderConfig config, IList typeModels)
: base(config, typeModels)
diff --git a/src/Umbraco.ModelsBuilder/Building/TextHeaderWriter.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/TextHeaderWriter.cs
similarity index 95%
rename from src/Umbraco.ModelsBuilder/Building/TextHeaderWriter.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/TextHeaderWriter.cs
index 7244a2966d..a93df97806 100644
--- a/src/Umbraco.ModelsBuilder/Building/TextHeaderWriter.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/TextHeaderWriter.cs
@@ -1,6 +1,6 @@
using System.Text;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
internal static class TextHeaderWriter
{
diff --git a/src/Umbraco.ModelsBuilder/Building/TypeModel.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/TypeModel.cs
similarity index 99%
rename from src/Umbraco.ModelsBuilder/Building/TypeModel.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/TypeModel.cs
index 06b5e7848a..95356cf3ff 100644
--- a/src/Umbraco.ModelsBuilder/Building/TypeModel.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/TypeModel.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Models.PublishedContent;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
///
/// Represents a model.
diff --git a/src/Umbraco.ModelsBuilder/Building/TypeModelHasher.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/TypeModelHasher.cs
similarity index 87%
rename from src/Umbraco.ModelsBuilder/Building/TypeModelHasher.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Building/TypeModelHasher.cs
index 2099c09415..2f14bec875 100644
--- a/src/Umbraco.ModelsBuilder/Building/TypeModelHasher.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/TypeModelHasher.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Linq;
-namespace Umbraco.ModelsBuilder.Building
+namespace Umbraco.ModelsBuilder.Embedded.Building
{
internal class TypeModelHasher
{
@@ -35,6 +35,9 @@ namespace Umbraco.ModelsBuilder.Building
}
}
+ // Include the MB version in the hash so that if the MB version changes, models are rebuilt
+ hash.Add(ApiVersion.Current.Version.ToString());
+
return hash.GetCombinedHashCode();
}
}
diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/DisableModelsBuilderManifestFilter.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/DisableModelsBuilderManifestFilter.cs
new file mode 100644
index 0000000000..617c5ced9b
--- /dev/null
+++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/DisableModelsBuilderManifestFilter.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using Umbraco.Core.Manifest;
+
+namespace Umbraco.ModelsBuilder.Embedded.Compose
+{
+ ///
+ /// Removes the built in embedded models builder manifest from being loaded
+ ///
+ internal class DisableModelsBuilderManifestFilter : IManifestFilter
+ {
+ public void Filter(List manifests)
+ {
+ manifests.RemoveAll(x => x.Source.EndsWith("App_Plugins\\UmbModelsBuilder\\package.manifest", StringComparison.InvariantCultureIgnoreCase));
+ }
+ }
+}
diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/DisabledModelsBuilderComponent.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/DisabledModelsBuilderComponent.cs
new file mode 100644
index 0000000000..c599785711
--- /dev/null
+++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/DisabledModelsBuilderComponent.cs
@@ -0,0 +1,30 @@
+using Umbraco.Core;
+using Umbraco.Core.Composing;
+using Umbraco.ModelsBuilder.Embedded.BackOffice;
+using Umbraco.Web.Features;
+
+namespace Umbraco.ModelsBuilder.Embedded.Compose
+{
+ ///
+ /// Special component used for when MB is disabled with the legacy MB is detected
+ ///
+ internal class DisabledModelsBuilderComponent : IComponent
+ {
+ private readonly UmbracoFeatures _features;
+
+ public DisabledModelsBuilderComponent(UmbracoFeatures features)
+ {
+ _features = features;
+ }
+
+ public void Initialize()
+ {
+ //disable the embedded dashboard controller
+ _features.Disabled.Controllers.Add();
+ }
+
+ public void Terminate()
+ {
+ }
+ }
+}
diff --git a/src/Umbraco.ModelsBuilder/Compose/ModelsBuilderComponent.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs
similarity index 94%
rename from src/Umbraco.ModelsBuilder/Compose/ModelsBuilderComponent.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs
index a68315606e..0e41c9ac62 100644
--- a/src/Umbraco.ModelsBuilder/Compose/ModelsBuilderComponent.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs
@@ -8,15 +8,16 @@ using Umbraco.Core.Composing;
using Umbraco.Core.IO;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
-using Umbraco.ModelsBuilder.BackOffice;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.BackOffice;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
using Umbraco.Web;
using Umbraco.Web.JavaScript;
using Umbraco.Web.Mvc;
-namespace Umbraco.ModelsBuilder.Compose
+namespace Umbraco.ModelsBuilder.Embedded.Compose
{
- public class ModelsBuilderComponent : IComponent
+
+ internal class ModelsBuilderComponent : IComponent
{
private readonly IModelsBuilderConfig _config;
@@ -38,7 +39,8 @@ namespace Umbraco.ModelsBuilder.Compose
ContentModelBinder.ModelBindingException += ContentModelBinder_ModelBindingException;
- FileService.SavingTemplate += FileService_SavingTemplate;
+ if (_config.Enable)
+ FileService.SavingTemplate += FileService_SavingTemplate;
if (_config.ModelsMode.IsLiveNotPure())
_liveModelsProvider.Install();
@@ -71,7 +73,7 @@ namespace Umbraco.ModelsBuilder.Compose
if (HttpContext.Current == null) throw new InvalidOperationException("HttpContext is null");
var urlHelper = new UrlHelper(new RequestContext(new HttpContextWrapper(HttpContext.Current), new RouteData()));
- umbracoUrls["modelsBuilderBaseUrl"] = urlHelper.GetUmbracoApiServiceBaseUrl(controller => controller.BuildModels());
+ umbracoUrls["modelsBuilderBaseUrl"] = urlHelper.GetUmbracoApiServiceBaseUrl(controller => controller.BuildModels());
umbracoPlugins["modelsBuilder"] = GetModelsBuilderSettings();
};
}
@@ -80,7 +82,7 @@ namespace Umbraco.ModelsBuilder.Compose
{
var settings = new Dictionary
{
- {"enabled", true}
+ {"enabled", _config.Enable}
};
return settings;
diff --git a/src/Umbraco.ModelsBuilder/Compose/ModelsBuilderComposer.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs
similarity index 63%
rename from src/Umbraco.ModelsBuilder/Compose/ModelsBuilderComposer.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs
index fdc4253490..cf70adb6fe 100644
--- a/src/Umbraco.ModelsBuilder/Compose/ModelsBuilderComposer.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs
@@ -1,21 +1,33 @@
using System.Linq;
+using System.Reflection;
using Umbraco.Core;
+using Umbraco.Core.Logging;
using Umbraco.Core.Composing;
using Umbraco.Core.Models.PublishedContent;
-using Umbraco.ModelsBuilder.Building;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Building;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
using Umbraco.Web.PublishedCache.NuCache;
+using Umbraco.Web.Features;
-namespace Umbraco.ModelsBuilder.Compose
+namespace Umbraco.ModelsBuilder.Embedded.Compose
{
+
+
[ComposeBefore(typeof(NuCacheComposer))]
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
- public sealed class ModelsBuilderComposer : ComponentComposer, ICoreComposer
+ public sealed class ModelsBuilderComposer : ICoreComposer
{
- public override void Compose(Composition composition)
+ public void Compose(Composition composition)
{
- base.Compose(composition);
+ var isLegacyModelsBuilderInstalled = IsLegacyModelsBuilderInstalled();
+ if (isLegacyModelsBuilderInstalled)
+ {
+ ComposeForLegacyModelsBuilder(composition);
+ return;
+ }
+
+ composition.Components().Append();
composition.Register(Lifetime.Singleton);
composition.Configs.Add(() => new ModelsBuilderConfig());
composition.RegisterUnique();
@@ -29,6 +41,28 @@ namespace Umbraco.ModelsBuilder.Compose
ComposeForDefaultModelsFactory(composition);
}
+ private static bool IsLegacyModelsBuilderInstalled()
+ {
+ Assembly legacyMbAssembly = null;
+ try
+ {
+ legacyMbAssembly = Assembly.Load("Umbraco.ModelsBuilder");
+ }
+ catch (System.Exception)
+ {
+ //swallow exception, DLL must not be there
+ }
+
+ return legacyMbAssembly != null;
+ }
+
+ private void ComposeForLegacyModelsBuilder(Composition composition)
+ {
+ composition.Logger.Info("ModelsBuilder.Embedded is disabled, the legacy ModelsBuilder was detected.");
+ composition.Components().Append();
+ composition.ManifestFilters().Append();
+ }
+
private void ComposeForDefaultModelsFactory(Composition composition)
{
composition.RegisterUnique(factory =>
diff --git a/src/Umbraco.ModelsBuilder/Compose/ModelsBuilderInitializer.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderInitializer.cs
similarity index 91%
rename from src/Umbraco.ModelsBuilder/Compose/ModelsBuilderInitializer.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderInitializer.cs
index 6eb8bbb328..a86669b135 100644
--- a/src/Umbraco.ModelsBuilder/Compose/ModelsBuilderInitializer.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderInitializer.cs
@@ -1,10 +1,10 @@
using System.Web;
using System.Web.Compilation;
-using Umbraco.ModelsBuilder.Compose;
+using Umbraco.ModelsBuilder.Embedded.Compose;
[assembly: PreApplicationStartMethod(typeof(ModelsBuilderInitializer), "Initialize")]
-namespace Umbraco.ModelsBuilder.Compose
+namespace Umbraco.ModelsBuilder.Embedded.Compose
{
public static class ModelsBuilderInitializer
{
diff --git a/src/Umbraco.ModelsBuilder/ConfigsExtensions.cs b/src/Umbraco.ModelsBuilder.Embedded/ConfigsExtensions.cs
similarity index 87%
rename from src/Umbraco.ModelsBuilder/ConfigsExtensions.cs
rename to src/Umbraco.ModelsBuilder.Embedded/ConfigsExtensions.cs
index b3605fc541..d634547a49 100644
--- a/src/Umbraco.ModelsBuilder/ConfigsExtensions.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/ConfigsExtensions.cs
@@ -1,7 +1,7 @@
using Umbraco.Core.Configuration;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
///
/// Provides extension methods for the class.
diff --git a/src/Umbraco.ModelsBuilder/Configuration/IModelsBuilderConfig.cs b/src/Umbraco.ModelsBuilder.Embedded/Configuration/IModelsBuilderConfig.cs
similarity index 80%
rename from src/Umbraco.ModelsBuilder/Configuration/IModelsBuilderConfig.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Configuration/IModelsBuilderConfig.cs
index 3bca389f2f..7e96aec60e 100644
--- a/src/Umbraco.ModelsBuilder/Configuration/IModelsBuilderConfig.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Configuration/IModelsBuilderConfig.cs
@@ -1,7 +1,8 @@
-namespace Umbraco.ModelsBuilder.Configuration
+namespace Umbraco.ModelsBuilder.Embedded.Configuration
{
public interface IModelsBuilderConfig
{
+ bool Enable { get; }
bool AcceptUnsafeModelsDirectory { get; }
int DebugLevel { get; }
bool EnableFactory { get; }
diff --git a/src/Umbraco.ModelsBuilder/Configuration/ModelsBuilderConfig.cs b/src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsBuilderConfig.cs
similarity index 91%
rename from src/Umbraco.ModelsBuilder/Configuration/ModelsBuilderConfig.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsBuilderConfig.cs
index e67dcc9157..c6bccdcf87 100644
--- a/src/Umbraco.ModelsBuilder/Configuration/ModelsBuilderConfig.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsBuilderConfig.cs
@@ -5,7 +5,7 @@ using System.Web.Configuration;
using Umbraco.Core;
using Umbraco.Core.IO;
-namespace Umbraco.ModelsBuilder.Configuration
+namespace Umbraco.ModelsBuilder.Embedded.Configuration
{
///
/// Represents the models builder configuration.
@@ -22,11 +22,18 @@ namespace Umbraco.ModelsBuilder.Configuration
{
const string prefix = "Umbraco.ModelsBuilder.";
+ // giant kill switch, default: false
+ // must be explicitely set to true for anything else to happen
+ Enable = ConfigurationManager.AppSettings[prefix + "Enable"] == "true";
+
// ensure defaults are initialized for tests
ModelsNamespace = DefaultModelsNamespace;
ModelsDirectory = IOHelper.MapPath(DefaultModelsDirectory);
DebugLevel = 0;
+ // stop here, everything is false
+ if (!Enable) return;
+
// mode
var modelsMode = ConfigurationManager.AppSettings[prefix + "ModelsMode"];
if (!string.IsNullOrWhiteSpace(modelsMode))
@@ -94,6 +101,7 @@ namespace Umbraco.ModelsBuilder.Configuration
/// Initializes a new instance of the class.
///
public ModelsBuilderConfig(
+ bool enable = false,
ModelsMode modelsMode = ModelsMode.Nothing,
string modelsNamespace = null,
bool enableFactory = true,
@@ -102,6 +110,7 @@ namespace Umbraco.ModelsBuilder.Configuration
bool acceptUnsafeModelsDirectory = false,
int debugLevel = 0)
{
+ Enable = enable;
ModelsMode = modelsMode;
ModelsNamespace = string.IsNullOrWhiteSpace(modelsNamespace) ? DefaultModelsNamespace : modelsNamespace;
@@ -143,6 +152,15 @@ namespace Umbraco.ModelsBuilder.Configuration
throw new ConfigurationErrorsException($"Invalid models directory \"{config}\".");
}
+ ///
+ /// Gets a value indicating whether the whole models experience is enabled.
+ ///
+ ///
+ /// If this is false then absolutely nothing happens.
+ /// Default value is false which means that unless we have this setting, nothing happens.
+ ///
+ public bool Enable { get; }
+
///
/// Gets the models mode.
///
diff --git a/src/Umbraco.ModelsBuilder/Configuration/ModelsMode.cs b/src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsMode.cs
similarity index 86%
rename from src/Umbraco.ModelsBuilder/Configuration/ModelsMode.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsMode.cs
index 1f1d65f4f1..e0286fdab1 100644
--- a/src/Umbraco.ModelsBuilder/Configuration/ModelsMode.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsMode.cs
@@ -1,4 +1,4 @@
-namespace Umbraco.ModelsBuilder.Configuration
+namespace Umbraco.ModelsBuilder.Embedded.Configuration
{
///
/// Defines the models generation modes.
@@ -8,7 +8,7 @@
///
/// Do not generate models.
///
- Nothing = 0, // default value //TODO: This doesn't make sense since we cannot actualy disable MB since Umbraco would die
+ Nothing = 0, // default value
///
/// Generate models in memory.
diff --git a/src/Umbraco.ModelsBuilder/Configuration/ModelsModeExtensions.cs b/src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsModeExtensions.cs
similarity index 95%
rename from src/Umbraco.ModelsBuilder/Configuration/ModelsModeExtensions.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsModeExtensions.cs
index f40d7973b8..be638729ea 100644
--- a/src/Umbraco.ModelsBuilder/Configuration/ModelsModeExtensions.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Configuration/ModelsModeExtensions.cs
@@ -1,4 +1,4 @@
-namespace Umbraco.ModelsBuilder.Configuration
+namespace Umbraco.ModelsBuilder.Embedded.Configuration
{
///
/// Provides extensions for the enumeration.
diff --git a/src/Umbraco.ModelsBuilder/HashCombiner.cs b/src/Umbraco.ModelsBuilder.Embedded/HashCombiner.cs
similarity index 95%
rename from src/Umbraco.ModelsBuilder/HashCombiner.cs
rename to src/Umbraco.ModelsBuilder.Embedded/HashCombiner.cs
index 51e02e93c1..1c1fca6f73 100644
--- a/src/Umbraco.ModelsBuilder/HashCombiner.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/HashCombiner.cs
@@ -1,7 +1,7 @@
using System;
using System.Globalization;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
// because, of course, it's internal in Umbraco
// see also System.Web.Util.HashCodeCombiner
diff --git a/src/Umbraco.ModelsBuilder/ImplementPropertyTypeAttribute.cs b/src/Umbraco.ModelsBuilder.Embedded/ImplementPropertyTypeAttribute.cs
similarity index 92%
rename from src/Umbraco.ModelsBuilder/ImplementPropertyTypeAttribute.cs
rename to src/Umbraco.ModelsBuilder.Embedded/ImplementPropertyTypeAttribute.cs
index a3dba740c1..0359c49654 100644
--- a/src/Umbraco.ModelsBuilder/ImplementPropertyTypeAttribute.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/ImplementPropertyTypeAttribute.cs
@@ -1,6 +1,6 @@
using System;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
///
/// Indicates that a property implements a given property alias.
diff --git a/src/Umbraco.ModelsBuilder/LiveModelsProvider.cs b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs
similarity index 96%
rename from src/Umbraco.ModelsBuilder/LiveModelsProvider.cs
rename to src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs
index 14a38a3291..333181f27c 100644
--- a/src/Umbraco.ModelsBuilder/LiveModelsProvider.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs
@@ -2,11 +2,11 @@
using System.Threading;
using System.Web.Hosting;
using Umbraco.Core.Logging;
-using Umbraco.ModelsBuilder.Building;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Building;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
using Umbraco.Web.Cache;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
// supports LiveAppData - but not PureLive
public sealed class LiveModelsProvider
diff --git a/src/Umbraco.ModelsBuilder/LiveModelsProviderModule.cs b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProviderModule.cs
similarity index 89%
rename from src/Umbraco.ModelsBuilder/LiveModelsProviderModule.cs
rename to src/Umbraco.ModelsBuilder.Embedded/LiveModelsProviderModule.cs
index 9d50c4ab42..678ff241b0 100644
--- a/src/Umbraco.ModelsBuilder/LiveModelsProviderModule.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProviderModule.cs
@@ -2,12 +2,12 @@
using System.Web;
using Umbraco.Core;
using Umbraco.Core.Composing;
-using Umbraco.ModelsBuilder;
+using Umbraco.ModelsBuilder.Embedded;
// will install only if configuration says it needs to be installed
[assembly: PreApplicationStartMethod(typeof(LiveModelsProviderModule), "Install")]
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
// have to do this because it's the only way to subscribe to EndRequest,
// module is installed by assembly attribute at the top of this file
@@ -27,7 +27,7 @@ namespace Umbraco.ModelsBuilder
// here we're using "Current." since we're in a module, it is possible in a round about way to inject into a module but for now we'll just use Current
if (_liveModelsProvider == null)
- _liveModelsProvider = Current.Factory.TryGetInstance(); // will be null in upgrade mode
+ _liveModelsProvider = Current.Factory.TryGetInstance(); // will be null in upgrade mode or if embedded MB is disabled
if (_liveModelsProvider?.IsEnabled ?? false)
_liveModelsProvider.GenerateModelsIfRequested(sender, e);
diff --git a/src/Umbraco.ModelsBuilder/ModelsBuilderAssemblyAttribute.cs b/src/Umbraco.ModelsBuilder.Embedded/ModelsBuilderAssemblyAttribute.cs
similarity index 95%
rename from src/Umbraco.ModelsBuilder/ModelsBuilderAssemblyAttribute.cs
rename to src/Umbraco.ModelsBuilder.Embedded/ModelsBuilderAssemblyAttribute.cs
index ed956852f8..7570c0b5b2 100644
--- a/src/Umbraco.ModelsBuilder/ModelsBuilderAssemblyAttribute.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/ModelsBuilderAssemblyAttribute.cs
@@ -1,6 +1,6 @@
using System;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
///
/// Indicates that an Assembly is a Models Builder assembly.
diff --git a/src/Umbraco.ModelsBuilder/ModelsGenerationError.cs b/src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs
similarity index 94%
rename from src/Umbraco.ModelsBuilder/ModelsGenerationError.cs
rename to src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs
index 8585b2094a..a692f633a5 100644
--- a/src/Umbraco.ModelsBuilder/ModelsGenerationError.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs
@@ -1,9 +1,9 @@
using System;
using System.IO;
using System.Text;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
public sealed class ModelsGenerationError
{
diff --git a/src/Umbraco.ModelsBuilder/OutOfDateModelsStatus.cs b/src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs
similarity index 94%
rename from src/Umbraco.ModelsBuilder/OutOfDateModelsStatus.cs
rename to src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs
index a394b2611a..5425c31c77 100644
--- a/src/Umbraco.ModelsBuilder/OutOfDateModelsStatus.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs
@@ -1,8 +1,8 @@
using System.IO;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
using Umbraco.Web.Cache;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
public sealed class OutOfDateModelsStatus
{
diff --git a/src/Umbraco.ModelsBuilder/Properties/AssemblyInfo.cs b/src/Umbraco.ModelsBuilder.Embedded/Properties/AssemblyInfo.cs
similarity index 79%
rename from src/Umbraco.ModelsBuilder/Properties/AssemblyInfo.cs
rename to src/Umbraco.ModelsBuilder.Embedded/Properties/AssemblyInfo.cs
index b576807bb7..68c149adde 100644
--- a/src/Umbraco.ModelsBuilder/Properties/AssemblyInfo.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Properties/AssemblyInfo.cs
@@ -1,4 +1,5 @@
using System.Reflection;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("Umbraco.ModelsBuilder")]
@@ -8,3 +9,5 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
[assembly: Guid("52ac0ba8-a60e-4e36-897b-e8b97a54ed1c")]
+
+[assembly: InternalsVisibleTo("Umbraco.Tests")]
diff --git a/src/Umbraco.ModelsBuilder/PublishedElementExtensions.cs b/src/Umbraco.ModelsBuilder.Embedded/PublishedElementExtensions.cs
similarity index 98%
rename from src/Umbraco.ModelsBuilder/PublishedElementExtensions.cs
rename to src/Umbraco.ModelsBuilder.Embedded/PublishedElementExtensions.cs
index 1211c4fdad..29429ba74f 100644
--- a/src/Umbraco.ModelsBuilder/PublishedElementExtensions.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/PublishedElementExtensions.cs
@@ -3,6 +3,7 @@ using System.Linq.Expressions;
using System.Reflection;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.ModelsBuilder;
+using Umbraco.ModelsBuilder.Embedded;
// same namespace as original Umbraco.Web PublishedElementExtensions
// ReSharper disable once CheckNamespace
diff --git a/src/Umbraco.ModelsBuilder/PublishedModelUtility.cs b/src/Umbraco.ModelsBuilder.Embedded/PublishedModelUtility.cs
similarity index 98%
rename from src/Umbraco.ModelsBuilder/PublishedModelUtility.cs
rename to src/Umbraco.ModelsBuilder.Embedded/PublishedModelUtility.cs
index 3400b2dd7f..8a6ed83ce9 100644
--- a/src/Umbraco.ModelsBuilder/PublishedModelUtility.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/PublishedModelUtility.cs
@@ -1,10 +1,10 @@
using System;
using System.Linq;
using System.Linq.Expressions;
-using Umbraco.Web.Composing;
using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Web.Composing;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
///
/// This is called from within the generated model classes
diff --git a/src/Umbraco.ModelsBuilder/PureLiveModelFactory.cs b/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs
similarity index 99%
rename from src/Umbraco.ModelsBuilder/PureLiveModelFactory.cs
rename to src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs
index c050ae291a..8e8a19c729 100644
--- a/src/Umbraco.ModelsBuilder/PureLiveModelFactory.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs
@@ -15,11 +15,11 @@ using System.Web.WebPages.Razor;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.PublishedContent;
-using Umbraco.ModelsBuilder.Building;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Building;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
using File = System.IO.File;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
internal class PureLiveModelFactory : ILivePublishedModelFactory, IRegisteredObject
{
diff --git a/src/Umbraco.ModelsBuilder/ReferencedAssemblies.cs b/src/Umbraco.ModelsBuilder.Embedded/ReferencedAssemblies.cs
similarity index 99%
rename from src/Umbraco.ModelsBuilder/ReferencedAssemblies.cs
rename to src/Umbraco.ModelsBuilder.Embedded/ReferencedAssemblies.cs
index e1e503d372..8886afa1c8 100644
--- a/src/Umbraco.ModelsBuilder/ReferencedAssemblies.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/ReferencedAssemblies.cs
@@ -6,7 +6,7 @@ using System.Web.Compilation;
using System.Web.Hosting;
using Umbraco.Core;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
internal static class ReferencedAssemblies
{
diff --git a/src/Umbraco.ModelsBuilder/TypeExtensions.cs b/src/Umbraco.ModelsBuilder.Embedded/TypeExtensions.cs
similarity index 96%
rename from src/Umbraco.ModelsBuilder/TypeExtensions.cs
rename to src/Umbraco.ModelsBuilder.Embedded/TypeExtensions.cs
index d3b3ff6b4e..1f270a80a6 100644
--- a/src/Umbraco.ModelsBuilder/TypeExtensions.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/TypeExtensions.cs
@@ -1,6 +1,6 @@
using System;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
internal static class TypeExtensions
{
diff --git a/src/Umbraco.ModelsBuilder/Umbraco.ModelsBuilder.csproj b/src/Umbraco.ModelsBuilder.Embedded/Umbraco.ModelsBuilder.Embedded.csproj
similarity index 88%
rename from src/Umbraco.ModelsBuilder/Umbraco.ModelsBuilder.csproj
rename to src/Umbraco.ModelsBuilder.Embedded/Umbraco.ModelsBuilder.Embedded.csproj
index 46ec0c7d2c..c09703ecfb 100644
--- a/src/Umbraco.ModelsBuilder/Umbraco.ModelsBuilder.csproj
+++ b/src/Umbraco.ModelsBuilder.Embedded/Umbraco.ModelsBuilder.Embedded.csproj
@@ -7,8 +7,8 @@
{52AC0BA8-A60E-4E36-897B-E8B97A54ED1C}LibraryProperties
- Umbraco.ModelsBuilder
- Umbraco.ModelsBuilder
+ Umbraco.ModelsBuilder.Embedded
+ Umbraco.ModelsBuilder.Embeddedv4.7.2512true
@@ -30,7 +30,7 @@
TRACEprompt4
- bin\Release\Umbraco.ModelsBuilder.xml
+ bin\Release\Umbraco.ModelsBuilder.Embedded.xml
@@ -50,11 +50,16 @@
Properties\SolutionInfo.cs
+
+
+
+
+
@@ -71,7 +76,7 @@
-
+
diff --git a/src/Umbraco.ModelsBuilder/UmbracoServices.cs b/src/Umbraco.ModelsBuilder.Embedded/UmbracoServices.cs
similarity index 93%
rename from src/Umbraco.ModelsBuilder/UmbracoServices.cs
rename to src/Umbraco.ModelsBuilder.Embedded/UmbracoServices.cs
index f21f75b5b1..5ede5f45e9 100644
--- a/src/Umbraco.ModelsBuilder/UmbracoServices.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/UmbracoServices.cs
@@ -7,9 +7,9 @@ using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
-using Umbraco.ModelsBuilder.Building;
+using Umbraco.ModelsBuilder.Embedded.Building;
-namespace Umbraco.ModelsBuilder
+namespace Umbraco.ModelsBuilder.Embedded
{
public sealed class UmbracoServices
{
@@ -32,6 +32,10 @@ namespace Umbraco.ModelsBuilder
{
var types = new List();
+ // TODO: this will require 3 rather large SQL queries on startup in PureLive. I know that these will be cached after lookup but it will slow
+ // down startup time ... BUT these queries are also used in NuCache on startup so we can't really avoid them. Maybe one day we can
+ // load all of these in in one query and still have them cached per service, and/or somehow improve the perf of these since they are used on startup
+ // in more than one place.
types.AddRange(GetTypes(PublishedItemType.Content, _contentTypeService.GetAll().Cast().ToArray()));
types.AddRange(GetTypes(PublishedItemType.Media, _mediaTypeService.GetAll().Cast().ToArray()));
types.AddRange(GetTypes(PublishedItemType.Member, _memberTypeService.GetAll().Cast().ToArray()));
diff --git a/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs b/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs
index 99012643aa..e1c3ecc891 100644
--- a/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs
+++ b/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs
@@ -2,15 +2,14 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
-using Microsoft.CodeAnalysis;
using Moq;
using NUnit.Framework;
-using Umbraco.Core.Composing;
using Umbraco.Core.Models.PublishedContent;
-using Umbraco.ModelsBuilder.Building;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded;
+using Umbraco.ModelsBuilder.Embedded.Building;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder.Tests
+namespace Umbraco.Tests.ModelsBuilder
{
[TestFixture]
public class BuilderTests
@@ -68,7 +67,7 @@ using System.Web;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Web;
-using Umbraco.ModelsBuilder;
+using Umbraco.ModelsBuilder.Embedded;
namespace Umbraco.Web.PublishedModels
{
@@ -183,7 +182,7 @@ using System.Web;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Web;
-using Umbraco.ModelsBuilder;
+using Umbraco.ModelsBuilder.Embedded;
namespace Umbraco.Web.PublishedModels
{
@@ -224,7 +223,7 @@ namespace Umbraco.Web.PublishedModels
[Test]
public void GenerateAmbiguous()
{
- // NOTE: since
+ // NOTE: since
var type1 = new TypeModel
{
@@ -246,7 +245,7 @@ namespace Umbraco.Web.PublishedModels
{
Alias = "prop2",
ClrName = "Prop2",
- ModelClrType = typeof(System.Text.StringBuilder),
+ ModelClrType = typeof(global::System.Text.StringBuilder),
});
type1.Properties.Add(new PropertyModel
{
@@ -278,8 +277,8 @@ namespace Umbraco.Web.PublishedModels
[TestCase("int", typeof(int))]
[TestCase("global::System.Collections.Generic.IEnumerable", typeof(IEnumerable))]
- [TestCase("global::Umbraco.ModelsBuilder.Tests.BuilderTestsClass1", typeof(BuilderTestsClass1))]
- [TestCase("global::Umbraco.ModelsBuilder.Tests.BuilderTests.Class1", typeof(Class1))]
+ [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTestsClass1", typeof(BuilderTestsClass1))]
+ [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTests.Class1", typeof(Class1))]
public void WriteClrType(string expected, Type input)
{
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
@@ -294,15 +293,15 @@ namespace Umbraco.Web.PublishedModels
[TestCase("int", typeof(int))]
[TestCase("global::System.Collections.Generic.IEnumerable", typeof(IEnumerable))]
- [TestCase("global::Umbraco.ModelsBuilder.Tests.BuilderTestsClass1", typeof(BuilderTestsClass1))]
- [TestCase("global::Umbraco.ModelsBuilder.Tests.BuilderTests.Class1", typeof(Class1))]
+ [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTestsClass1", typeof(BuilderTestsClass1))]
+ [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTests.Class1", typeof(Class1))]
public void WriteClrTypeUsing(string expected, Type input)
{
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
// which means global:: syntax will be applied to most things
var builder = new TextBuilder();
- builder.Using.Add("Umbraco.ModelsBuilder.Tests");
+ builder.Using.Add("Umbraco.Tests.ModelsBuilder");
builder.ModelsNamespaceForTests = "ModelsNamespace";
var sb = new StringBuilder();
builder.WriteClrType(sb, input);
@@ -314,7 +313,7 @@ namespace Umbraco.Web.PublishedModels
{
var builder = new TextBuilder();
builder.Using.Add("System.Text");
- builder.ModelsNamespaceForTests = "Umbraco.ModelsBuilder.Tests.Models";
+ builder.ModelsNamespaceForTests = "Umbraco.Tests.ModelsBuilder.Models";
var sb = new StringBuilder();
builder.WriteClrType(sb, typeof(StringBuilder));
@@ -328,7 +327,7 @@ namespace Umbraco.Web.PublishedModels
public void WriteClrTypeAnother_WithoutUsing()
{
var builder = new TextBuilder();
- builder.ModelsNamespaceForTests = "Umbraco.ModelsBuilder.Tests.Models";
+ builder.ModelsNamespaceForTests = "Umbraco.Tests.ModelsBuilder.Models";
var sb = new StringBuilder();
builder.WriteClrType(sb, typeof(StringBuilder));
Assert.AreEqual("global::System.Text.StringBuilder", sb.ToString());
@@ -339,10 +338,10 @@ namespace Umbraco.Web.PublishedModels
{
var builder = new TextBuilder();
builder.Using.Add("System.Text");
- builder.Using.Add("Umbraco.ModelsBuilder.Tests");
+ builder.Using.Add("Umbraco.Tests.ModelsBuilder");
builder.ModelsNamespaceForTests = "SomeRandomNamespace";
var sb = new StringBuilder();
- builder.WriteClrType(sb, typeof(System.Text.ASCIIEncoding));
+ builder.WriteClrType(sb, typeof(global::System.Text.ASCIIEncoding));
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
// which means global:: syntax will be applied to most things
@@ -355,10 +354,10 @@ namespace Umbraco.Web.PublishedModels
{
var builder = new TextBuilder();
builder.Using.Add("System.Text");
- builder.Using.Add("Umbraco.ModelsBuilder.Tests");
+ builder.Using.Add("Umbraco.Tests.ModelsBuilder");
builder.ModelsNamespaceForTests = "SomeBorkedNamespace";
var sb = new StringBuilder();
- builder.WriteClrType(sb, typeof(System.Text.ASCIIEncoding));
+ builder.WriteClrType(sb, typeof(global::System.Text.ASCIIEncoding));
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
// which means global:: syntax will be applied to most things
@@ -371,7 +370,7 @@ namespace Umbraco.Web.PublishedModels
{
var builder = new TextBuilder();
builder.Using.Add("System.Text");
- builder.Using.Add("Umbraco.ModelsBuilder.Tests");
+ builder.Using.Add("Umbraco.Tests.ModelsBuilder");
builder.ModelsNamespaceForTests = "SomeRandomNamespace";
var sb = new StringBuilder();
builder.WriteClrType(sb, typeof(ASCIIEncoding));
@@ -379,7 +378,7 @@ namespace Umbraco.Web.PublishedModels
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
// which means global:: syntax will be applied to most things
- Assert.AreEqual("global::Umbraco.ModelsBuilder.Tests.ASCIIEncoding", sb.ToString());
+ Assert.AreEqual("global::Umbraco.Tests.ModelsBuilder.ASCIIEncoding", sb.ToString());
}
[Test]
@@ -387,15 +386,15 @@ namespace Umbraco.Web.PublishedModels
{
var builder = new TextBuilder();
builder.Using.Add("System.Text");
- builder.Using.Add("Umbraco.ModelsBuilder.Tests");
- builder.ModelsNamespaceForTests = "Umbraco.ModelsBuilder.Tests.Models";
+ builder.Using.Add("Umbraco.Tests.ModelsBuilder");
+ builder.ModelsNamespaceForTests = "Umbraco.Tests.ModelsBuilder.Models";
var sb = new StringBuilder();
builder.WriteClrType(sb, typeof(ASCIIEncoding));
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
// which means global:: syntax will be applied to most things
- Assert.AreEqual("global::Umbraco.ModelsBuilder.Tests.ASCIIEncoding", sb.ToString());
+ Assert.AreEqual("global::Umbraco.Tests.ModelsBuilder.ASCIIEncoding", sb.ToString());
}
[Test]
@@ -403,7 +402,7 @@ namespace Umbraco.Web.PublishedModels
{
var builder = new TextBuilder();
builder.Using.Add("System.Text");
- builder.Using.Add("Umbraco.ModelsBuilder.Tests");
+ builder.Using.Add("Umbraco.Tests.ModelsBuilder");
builder.ModelsNamespaceForTests = "SomeRandomNamespace";
var sb = new StringBuilder();
builder.WriteClrType(sb, typeof(ASCIIEncoding.Nested));
@@ -411,13 +410,13 @@ namespace Umbraco.Web.PublishedModels
// note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true
// which means global:: syntax will be applied to most things
- Assert.AreEqual("global::Umbraco.ModelsBuilder.Tests.ASCIIEncoding.Nested", sb.ToString());
+ Assert.AreEqual("global::Umbraco.Tests.ModelsBuilder.ASCIIEncoding.Nested", sb.ToString());
}
public class Class1 { }
}
- // make it public to be ambiguous (see above)
+// make it public to be ambiguous (see above)
public class ASCIIEncoding
{
// can we handle nested types?
@@ -425,9 +424,6 @@ namespace Umbraco.Web.PublishedModels
}
class BuilderTestsClass1 {}
-}
-namespace SomeBorkedNamespace
-{
public class System { }
}
diff --git a/src/Umbraco.Tests/ModelsBuilder/ConfigTests.cs b/src/Umbraco.Tests/ModelsBuilder/ConfigTests.cs
index 58215707f7..5e122ad0fa 100644
--- a/src/Umbraco.Tests/ModelsBuilder/ConfigTests.cs
+++ b/src/Umbraco.Tests/ModelsBuilder/ConfigTests.cs
@@ -1,8 +1,8 @@
using System.Configuration;
using NUnit.Framework;
-using Umbraco.ModelsBuilder.Configuration;
+using Umbraco.ModelsBuilder.Embedded.Configuration;
-namespace Umbraco.ModelsBuilder.Tests
+namespace Umbraco.Tests.ModelsBuilder
{
[TestFixture]
public class ModelsBuilderConfigTests
diff --git a/src/Umbraco.Tests/ModelsBuilder/StringExtensions.cs b/src/Umbraco.Tests/ModelsBuilder/StringExtensions.cs
index 13a256aa14..361d104911 100644
--- a/src/Umbraco.Tests/ModelsBuilder/StringExtensions.cs
+++ b/src/Umbraco.Tests/ModelsBuilder/StringExtensions.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Umbraco.ModelsBuilder.Tests
+namespace Umbraco.Tests.ModelsBuilder
{
public static class StringExtensions
{
diff --git a/src/Umbraco.Tests/ModelsBuilder/UmbracoApplicationTests.cs b/src/Umbraco.Tests/ModelsBuilder/UmbracoApplicationTests.cs
index d6d44474c3..4d2ae0e6c6 100644
--- a/src/Umbraco.Tests/ModelsBuilder/UmbracoApplicationTests.cs
+++ b/src/Umbraco.Tests/ModelsBuilder/UmbracoApplicationTests.cs
@@ -1,12 +1,10 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using NUnit.Framework;
-using Umbraco.ModelsBuilder.Building;
+using Umbraco.ModelsBuilder.Embedded;
+using Umbraco.ModelsBuilder.Embedded.Building;
-namespace Umbraco.ModelsBuilder.Tests
+namespace Umbraco.Tests.ModelsBuilder
{
[TestFixture]
public class UmbracoApplicationTests
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index ebf081160b..83fff814a4 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -553,9 +553,9 @@
{31785BC3-256C-4613-B2F5-A1B0BDDED8C1}Umbraco.Core
-
+ {52ac0ba8-a60e-4e36-897b-e8b97a54ed1c}
- Umbraco.ModelsBuilder
+ Umbraco.ModelsBuilder.Embedded{651E1350-91B6-44B7-BD60-7207006D7003}
diff --git a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.controller.js b/src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/modelsbuilder.controller.js
similarity index 100%
rename from src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.controller.js
rename to src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/modelsbuilder.controller.js
diff --git a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.html b/src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/modelsbuilder.html
similarity index 100%
rename from src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.html
rename to src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/modelsbuilder.html
diff --git a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.resource.js b/src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/modelsbuilder.resource.js
similarity index 100%
rename from src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/modelsbuilder.resource.js
rename to src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/modelsbuilder.resource.js
diff --git a/src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/package.manifest b/src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/package.manifest
similarity index 100%
rename from src/Umbraco.Web.UI/App_Plugins/ModelsBuilder/package.manifest
rename to src/Umbraco.Web.UI/App_Plugins/UmbModelsBuilder/package.manifest
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index 1db4fabbe1..ceec3ee927 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -12,7 +12,7 @@
{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}OnBuildSuccesstrue
- 44319
+ 44331enableddisabledfalse
@@ -118,9 +118,9 @@
Umbraco.Examine{07FBC26B-2927-4A22-8D96-D644C667FECC}
-
+ {52ac0ba8-a60e-4e36-897b-e8b97a54ed1c}
- Umbraco.ModelsBuilder
+ Umbraco.ModelsBuilder.Embedded{651e1350-91b6-44b7-bd60-7207006d7003}
@@ -144,9 +144,9 @@
TrueSettings.settings
-
-
-
+
+
+
@@ -172,7 +172,7 @@
-
+ ClientDependency.configDesigner
diff --git a/src/Umbraco.Web.UI/web.Template.config b/src/Umbraco.Web.UI/web.Template.config
index 8759fc6459..f0abbfde52 100644
--- a/src/Umbraco.Web.UI/web.Template.config
+++ b/src/Umbraco.Web.UI/web.Template.config
@@ -47,6 +47,7 @@
+
diff --git a/src/Umbraco.Web/Editors/IEditorValidator.cs b/src/Umbraco.Web/Editors/IEditorValidator.cs
index d469d9d9eb..2d655e3506 100644
--- a/src/Umbraco.Web/Editors/IEditorValidator.cs
+++ b/src/Umbraco.Web/Editors/IEditorValidator.cs
@@ -14,9 +14,7 @@ namespace Umbraco.Web.Editors
// initialized with all IEditorValidator instances
//
// validation is used exclusively in ContentTypeControllerBase
- // the whole thing is internal at the moment, never released
- // and, there are no IEditorValidator implementation in Core
- // so... this all mechanism is basically useless
+ // currently the only implementations are for Models Builder.
///
/// Provides a general object validator.
diff --git a/src/Umbraco.Web/Properties/AssemblyInfo.cs b/src/Umbraco.Web/Properties/AssemblyInfo.cs
index 9f5abb99b5..ce2cbf0282 100644
--- a/src/Umbraco.Web/Properties/AssemblyInfo.cs
+++ b/src/Umbraco.Web/Properties/AssemblyInfo.cs
@@ -12,7 +12,7 @@ using System.Runtime.InteropServices;
// Umbraco Cms
[assembly: InternalsVisibleTo("Umbraco.Web.UI")]
-
+[assembly: InternalsVisibleTo("Umbraco.ModelsBuilder.Embedded")]
[assembly: InternalsVisibleTo("Umbraco.Tests")]
[assembly: InternalsVisibleTo("Umbraco.Tests.Benchmarks")]
diff --git a/src/umbraco.sln b/src/umbraco.sln
index 1d5aa9a60e..ba9df633bb 100644
--- a/src/umbraco.sln
+++ b/src/umbraco.sln
@@ -1,6 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
-VisualStudioVersion = 16.0.29009.5
VisualStudioVersion = 16.0.29209.152
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Web.UI", "Umbraco.Web.UI\Umbraco.Web.UI.csproj", "{4C4C194C-B5E4-4991-8F87-4373E24CC19F}"
@@ -103,7 +102,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IssueTemplates", "IssueTemp
..\.github\ISSUE_TEMPLATE\5_Security_issue.md = ..\.github\ISSUE_TEMPLATE\5_Security_issue.md
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.ModelsBuilder", "Umbraco.ModelsBuilder\Umbraco.ModelsBuilder.csproj", "{52AC0BA8-A60E-4E36-897B-E8B97A54ED1C}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.ModelsBuilder.Embedded", "Umbraco.ModelsBuilder.Embedded\Umbraco.ModelsBuilder.Embedded.csproj", "{52AC0BA8-A60E-4E36-897B-E8B97A54ED1C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution