diff --git a/src/Umbraco.Core/Models/DataTypeDefinition.cs b/src/Umbraco.Core/Models/DataTypeDefinition.cs index f7068a3b6e..b4b3f42422 100644 --- a/src/Umbraco.Core/Models/DataTypeDefinition.cs +++ b/src/Umbraco.Core/Models/DataTypeDefinition.cs @@ -170,7 +170,7 @@ namespace Umbraco.Core.Models public Guid ControlId { get { return _controlId; } - private set + set { SetPropertyValueAndDetectChanges(o => { diff --git a/src/Umbraco.Core/Models/IDataTypeDefinition.cs b/src/Umbraco.Core/Models/IDataTypeDefinition.cs index 5f0299e24b..4312a2b32d 100644 --- a/src/Umbraco.Core/Models/IDataTypeDefinition.cs +++ b/src/Umbraco.Core/Models/IDataTypeDefinition.cs @@ -9,7 +9,7 @@ namespace Umbraco.Core.Models /// /// Id of the DataType control /// - Guid ControlId { get; } + Guid ControlId { get; set; } /// /// Gets or Sets the DatabaseType for which the DataType's value is saved as diff --git a/src/Umbraco.Tests/DataTypeFactoryTests.cs b/src/Umbraco.Tests/DataTypeFactoryTests.cs deleted file mode 100644 index b8bfa3b183..0000000000 --- a/src/Umbraco.Tests/DataTypeFactoryTests.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Core.ObjectResolution; -using Umbraco.Tests.TestHelpers; -using umbraco.cms.businesslogic.datatype; -using umbraco.interfaces; -using System.Linq; - -namespace Umbraco.Tests -{ - - [TestFixture] - public class DataTypeFactoryTests - { - [SetUp] - public void Initialize() - { - TestHelper.SetupLog4NetForTests(); - - //this ensures its reset - PluginManager.Current = new PluginManager(false); - - //for testing, we'll specify which assemblies are scanned for the PluginTypeResolver - PluginManager.Current.AssembliesToScan = new[] - { - this.GetType().Assembly - }; - - DataTypesResolver.Current = new DataTypesResolver( - () => PluginManager.Current.ResolveDataTypes()); - - Resolution.Freeze(); - } - - [TearDown] - public void TearDown() - { - DataTypesResolver.Reset(); - PluginManager.Current = null; - } - - [Test] - public void Get_All_Instances() - { - var factory = new umbraco.cms.businesslogic.datatype.controls.Factory(); - Assert.AreEqual(2, factory.GetAll().Count()); - } - - #region Classes for tests - public class DataType1 : AbstractDataEditor - { - public override Guid Id - { - get { return new Guid("FBAEA49B-F704-44FE-B725-6C8FE0767CF2"); } - } - - public override string DataTypeName - { - get { return "DataType1"; } - } - - public override IDataEditor DataEditor - { - get { throw new NotImplementedException(); } - } - - public override IDataPrevalue PrevalueEditor - { - get { throw new NotImplementedException(); } - } - - public override IData Data - { - get { throw new NotImplementedException(); } - } - } - - public class DataType2 : AbstractDataEditor - { - public override Guid Id - { - get { return new Guid("3F58099B-96AC-415E-B3F9-BA273F51E681"); } - } - - public override string DataTypeName - { - get { return "DataType2"; } - } - - public override IDataEditor DataEditor - { - get { throw new NotImplementedException(); } - } - - public override IDataPrevalue PrevalueEditor - { - get { throw new NotImplementedException(); } - } - - public override IData Data - { - get { throw new NotImplementedException(); } - } - } - #endregion - - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs index 0f19a5083f..85e9a62fe4 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs @@ -165,8 +165,10 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); // Act + var newId = Guid.NewGuid(); var definition = repository.Get(dataTypeDefinition.Id); definition.Name = "AgeDataType Updated"; + definition.ControlId = newId; repository.AddOrUpdate(definition); unitOfWork.Commit(); @@ -175,6 +177,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Assert Assert.That(definitionUpdated, Is.Not.Null); Assert.That(definitionUpdated.Name, Is.EqualTo("AgeDataType Updated")); + Assert.That(definitionUpdated.ControlId, Is.EqualTo(newId)); } [Test] diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index c4033e919d..e4c7d59117 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -296,7 +296,6 @@ - diff --git a/src/Umbraco.Web.UI/App_Plugins/MyPackage/Controllers/ServerSidePropertyEditorsController.cs b/src/Umbraco.Web.UI/App_Plugins/MyPackage/Controllers/ServerSidePropertyEditorsController.cs index c6afc1e5b6..5671a9a870 100644 --- a/src/Umbraco.Web.UI/App_Plugins/MyPackage/Controllers/ServerSidePropertyEditorsController.cs +++ b/src/Umbraco.Web.UI/App_Plugins/MyPackage/Controllers/ServerSidePropertyEditorsController.cs @@ -1,6 +1,6 @@ using System.Web.Mvc; -namespace Umbraco.Belle.App_Plugins.MyPackage.Controllers +namespace Umbraco.Web.UI.App_Plugins.MyPackage.Controllers { public class ServerSidePropertyEditorsController : Controller diff --git a/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/PostcodeValidator.cs b/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/PostcodeValidator.cs index cb6820d229..159acdce04 100644 --- a/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/PostcodeValidator.cs +++ b/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/PostcodeValidator.cs @@ -12,19 +12,20 @@ namespace Umbraco.Web.UI.App_Plugins.MyPackage.PropertyEditors /// internal class PostcodeValidator : ValidatorBase { - public override IEnumerable Validate(object value, string preValues, PropertyEditor editor) + + public override IEnumerable Validate(string value, string preValues, PropertyEditor editor) { - var stringVal = value.ToString(); + var stringVal = value; if (preValues.IsNullOrWhiteSpace()) yield break; var asJson = JObject.Parse(preValues); if (asJson["country"] == null) yield break; - + if (asJson["country"].ToString() == "Australia") { - if (!Regex.IsMatch(stringVal, "^\\d{4}$")) + if (Regex.IsMatch(stringVal, "^\\d{4}$") == false) { - yield return new ValidationResult("Australian postcodes must be a 4 digit number", + yield return new ValidationResult("Australian postcodes must be a 4 digit number", new[] { //we only store a single value for this editor so the 'member' or 'field' diff --git a/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/ServerInfoPropertyEditor.cs b/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/ServerInfoPropertyEditor.cs index 9b2565b6f2..2df6fa8698 100644 --- a/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/ServerInfoPropertyEditor.cs +++ b/src/Umbraco.Web.UI/App_Plugins/MyPackage/PropertyEditors/ServerInfoPropertyEditor.cs @@ -2,6 +2,7 @@ using System.Web; using System.Web.Mvc; using System.Web.Routing; +using Umbraco.Core.PropertyEditors; namespace Umbraco.Web.UI.App_Plugins.MyPackage.PropertyEditors { diff --git a/src/Umbraco.Web.UI/App_Plugins/MyPackage/System/MyStartupHandler.cs b/src/Umbraco.Web.UI/App_Plugins/MyPackage/System/MyStartupHandler.cs index ef6b7f159f..d98707dedc 100644 --- a/src/Umbraco.Web.UI/App_Plugins/MyPackage/System/MyStartupHandler.cs +++ b/src/Umbraco.Web.UI/App_Plugins/MyPackage/System/MyStartupHandler.cs @@ -1,14 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using System.Web; using System.Web.Mvc; using System.Web.Routing; -using Umbraco.Belle.System; using Umbraco.Core; -using umbraco.businesslogic; +using Umbraco.Web.UI.JavaScript; -namespace Umbraco.Belle.App_Plugins.MyPackage.System +namespace Umbraco.Web.UI.App_Plugins.MyPackage.System { public class MyStartupHandler : ApplicationEventHandler { diff --git a/src/Umbraco.Web.UI/App_Plugins/MyPackage/Trees/LegacyTestTree.cs b/src/Umbraco.Web.UI/App_Plugins/MyPackage/Trees/LegacyTestTree.cs index e5d013d6a0..0cd5d43d8a 100644 --- a/src/Umbraco.Web.UI/App_Plugins/MyPackage/Trees/LegacyTestTree.cs +++ b/src/Umbraco.Web.UI/App_Plugins/MyPackage/Trees/LegacyTestTree.cs @@ -1,11 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Web; +using System.Text; using umbraco.cms.presentation.Trees; -namespace Umbraco.Belle.App_Plugins.MyPackage.Trees +namespace Umbraco.Web.UI.App_Plugins.MyPackage.Trees { public class LegacyTestTree : BaseTree { diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/DataTypes/editDatatype.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/DataTypes/editDatatype.aspx.cs index 7e22296ed9..05a831cdf4 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/developer/DataTypes/editDatatype.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/developer/DataTypes/editDatatype.aspx.cs @@ -1,9 +1,16 @@ using System; using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; using System.Web.UI; using System.Web.UI.WebControls; +using Umbraco.Core; +using Umbraco.Core.IO; +using Umbraco.Core.Models; +using Umbraco.Core.PropertyEditors; using umbraco.cms.presentation.Trees; -using umbraco.IO; +using umbraco.interfaces; namespace umbraco.cms.presentation.developer { @@ -15,68 +22,78 @@ namespace umbraco.cms.presentation.developer } protected ImageButton save; - private cms.businesslogic.datatype.DataTypeDefinition dt; - cms.businesslogic.datatype.controls.Factory f; + private int _id = 0; - private interfaces.IDataPrevalue _prevalue; + private IDataPrevalue _prevalue; + private IDataTypeDefinition _dataTypeDefinition; - protected void Page_Load(object sender, System.EventArgs e) + protected void Page_Load(object sender, EventArgs e) { pp_name.Text = ui.Text("name"); pp_renderControl.Text = ui.Text("renderControl"); pane_settings.Text = ui.Text("settings"); pp_guid.Text = ui.Text("guid"); - _id = int.Parse(Request.QueryString["id"]); - dt = cms.businesslogic.datatype.DataTypeDefinition.GetDataTypeDefinition(_id); - - f = new cms.businesslogic.datatype.controls.Factory(); - - if (!IsPostBack) + _dataTypeDefinition = ApplicationContext.Services.DataTypeService.GetDataTypeDefinitionById(_id); + + if (IsPostBack == false) { - txtName.Text = dt.Text; + txtName.Text = _dataTypeDefinition.Name; - SortedList datatypes = new SortedList(); + //get the legacy data types + var datatypes = DataTypesResolver.Current.DataTypes + .ToDictionary(df => df.Id, df => "(legacy) " + df.DataTypeName); - foreach (interfaces.IDataType df in f.GetAll()) - datatypes.Add(df.DataTypeName + "|" + Guid.NewGuid().ToString(), df.Id); + //get the new property editors + var propEditors = PropertyEditorResolver.Current.PropertyEditors + .ToDictionary(pe => pe.Id, pe => pe.Name); - IDictionaryEnumerator ide = datatypes.GetEnumerator(); - - string datatTypeId = dt.DataType != null ? dt.DataType.Id.ToString() : String.Empty; - while (ide.MoveNext()) + //join the lists + var combined = propEditors.Concat(datatypes); + + foreach (var item in combined) { - ListItem li = new ListItem(); - li.Text = ide.Key.ToString().Substring(0, ide.Key.ToString().IndexOf("|")); - li.Value = ide.Value.ToString(); + var li = new ListItem + { + + Text = item.Value, + Value = item.Key.ToString() + }; + + if (_dataTypeDefinition.ControlId != default(Guid) && li.Value == _dataTypeDefinition.ControlId.ToString()) + { + li.Selected = true; + } - if (!String.IsNullOrEmpty(datatTypeId) && li.Value.ToString() == datatTypeId) li.Selected = true; ddlRenderControl.Items.Add(li); - } + } ClientTools .SetActiveTreeType(TreeDefinitionCollection.Instance.FindTree().Tree.Alias) - .SyncTree("-1,init," + _id.ToString(), false); + .SyncTree("-1,init," + _id.ToString(CultureInfo.InvariantCulture), false); } - if (dt.DataType != null) - litGuid.Text = dt.DataType.Id.ToString(); - Panel1.Text = umbraco.ui.Text("edit") + " datatype: " + dt.Text; - insertPrevalueEditor(); + if (_dataTypeDefinition.ControlId != default(Guid)) + { + litGuid.Text = _dataTypeDefinition.ControlId.ToString(); + } + + Panel1.Text = ui.Text("edit") + " datatype: " + _dataTypeDefinition.Name; + InsertPrevalueEditor(); } - private void insertPrevalueEditor() + private void InsertPrevalueEditor() { try { if (ddlRenderControl.SelectedIndex >= 0) { - interfaces.IDataType o = f.DataType(new Guid(ddlRenderControl.SelectedValue)); + var o = DataTypesResolver.Current.GetById(new Guid(ddlRenderControl.SelectedValue)); - o.DataTypeDefinitionId = dt.Id; + o.DataTypeDefinitionId = _dataTypeDefinition.Id; _prevalue = o.PrevalueEditor; if (o.PrevalueEditor.Editor != null) @@ -97,44 +114,26 @@ namespace umbraco.cms.presentation.developer if (_prevalue != null) _prevalue.Save(); - dt.Text = txtName.Text; + _dataTypeDefinition.ControlId = new Guid(ddlRenderControl.SelectedValue); + _dataTypeDefinition.Name = txtName.Text; - dt.DataType = f.DataType(new Guid(ddlRenderControl.SelectedValue)); - dt.Save(); + ApplicationContext.Services.DataTypeService.Save(_dataTypeDefinition, UmbracoUser.Id); ClientTools.ShowSpeechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "dataTypeSaved", null), ""); - ClientTools.SyncTree(dt.Path, true); + ClientTools.SyncTree("-1,init," + _id.ToString(CultureInfo.InvariantCulture), true); } - - #region Web Form Designer generated code - - override protected void OnInit(EventArgs e) { save = Panel1.Menu.NewImageButton(); save.ID = "save"; - save.Click += new System.Web.UI.ImageClickEventHandler(save_click); + save.Click += save_click; save.ImageUrl = SystemDirectories.Umbraco + "/images/editor/save.gif"; Panel1.hasMenu = true; - // - // CODEGEN: This call is required by the ASP.NET Web Form Designer. - // - InitializeComponent(); base.OnInit(e); } - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - - } - #endregion } } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs index 38d5fc8146..0245097ce5 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/editMedia.aspx.cs @@ -128,7 +128,7 @@ namespace umbraco.cms.presentation private void UpdateMediaFileLinksLiteral() { - var uploadField = new Factory().GetNewObject(new Guid(Constants.PropertyEditors.UploadField)); + var uploadField = DataTypesResolver.Current.GetById(new Guid(Constants.PropertyEditors.UploadField)); // always clear, incase the upload file was removed this._mediaFileLinksLiteral.Text = string.Empty; diff --git a/src/umbraco.cms/businesslogic/Content.cs b/src/umbraco.cms/businesslogic/Content.cs index 786a7b2f6b..c87d1bb66f 100644 --- a/src/umbraco.cms/businesslogic/Content.cs +++ b/src/umbraco.cms/businesslogic/Content.cs @@ -568,7 +568,7 @@ namespace umbraco.cms.businesslogic // Remove all files var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); - var uploadField = new Factory().GetNewObject(new Guid(Constants.PropertyEditors.UploadField)); + var uploadField = DataTypesResolver.Current.GetById(new Guid(Constants.PropertyEditors.UploadField)); foreach (Property p in GenericProperties) { diff --git a/src/umbraco.cms/businesslogic/datatype/DataTypeDefinition.cs b/src/umbraco.cms/businesslogic/datatype/DataTypeDefinition.cs index a0aff986f5..9bae792f5d 100644 --- a/src/umbraco.cms/businesslogic/datatype/DataTypeDefinition.cs +++ b/src/umbraco.cms/businesslogic/datatype/DataTypeDefinition.cs @@ -55,9 +55,8 @@ namespace umbraco.cms.businesslogic.datatype { if (_controlId == Guid.Empty) return null; - - controls.Factory factory = new controls.Factory(); - var dt = factory.DataType(_controlId); + + var dt = DataTypesResolver.Current.GetById(_controlId); if (dt != null) dt.DataTypeDefinitionId = Id; @@ -157,16 +156,12 @@ namespace umbraco.cms.businesslogic.datatype //Make sure that the dtd is not already present - if (!CMSNode.IsNode(new Guid(_def))) + if (IsNode(new Guid(_def)) == false) { - BusinessLogic.User u = BusinessLogic.User.GetCurrent(); + var u = BusinessLogic.User.GetCurrent() ?? BusinessLogic.User.GetUser(0); - if (u == null) - u = BusinessLogic.User.GetUser(0); - - var f = new controls.Factory(); - DataTypeDefinition dtd = MakeNew(u, _name, new Guid(_def)); - var dataType = f.DataType(new Guid(_id)); + var dtd = MakeNew(u, _name, new Guid(_def)); + var dataType = DataTypesResolver.Current.GetById(new Guid(_id)); if (dataType == null) throw new NullReferenceException("Could not resolve a data type with id " + _id); @@ -238,17 +233,16 @@ namespace umbraco.cms.businesslogic.datatype public static DataTypeDefinition MakeNew(BusinessLogic.User u, string Text, Guid UniqueId) { - int newId = CMSNode.MakeNew(-1, _objectType, u.Id, 1, Text, UniqueId).Id; - cms.businesslogic.datatype.controls.Factory f = new cms.businesslogic.datatype.controls.Factory(); + var newId = MakeNew(-1, _objectType, u.Id, 1, Text, UniqueId).Id; // initial control id changed to empty to ensure that it'll always work no matter if 3rd party configurators fail // ref: http://umbraco.codeplex.com/workitem/29788 - Guid FirstcontrolId = Guid.Empty; + var firstcontrolId = Guid.Empty; SqlHelper.ExecuteNonQuery("Insert into cmsDataType (nodeId, controlId, dbType) values (" + newId.ToString() + ",@controlId,'Ntext')", - SqlHelper.CreateParameter("@controlId", FirstcontrolId)); + SqlHelper.CreateParameter("@controlId", firstcontrolId)); - DataTypeDefinition dtd = new DataTypeDefinition(newId); + var dtd = new DataTypeDefinition(newId); dtd.OnNew(EventArgs.Empty); return dtd; diff --git a/src/umbraco.editorControls/mediapicker/MediaPickerDataType.cs b/src/umbraco.editorControls/mediapicker/MediaPickerDataType.cs index 6417b91fd0..03af12e828 100644 --- a/src/umbraco.editorControls/mediapicker/MediaPickerDataType.cs +++ b/src/umbraco.editorControls/mediapicker/MediaPickerDataType.cs @@ -3,12 +3,7 @@ using Umbraco.Core; namespace umbraco.editorControls.mediapicker { - //TODO: Properly rename this for a major release - public class MediaPickerDataType : MemberPickerDataType - { } - - [Obsolete("Renamed to MediaPickerDataType because.. that is what it was all along")] - public class MemberPickerDataType : cms.businesslogic.datatype.BaseDataType, interfaces.IDataType + public class MediaPickerDataType : cms.businesslogic.datatype.BaseDataType, interfaces.IDataType { private interfaces.IDataEditor _editor; private interfaces.IData _baseData; @@ -25,13 +20,13 @@ namespace umbraco.editorControls.mediapicker } - public override Guid Id - { - get - { - return new Guid(Constants.PropertyEditors.MediaPicker); - } - } + public override Guid Id + { + get + { + return new Guid(Constants.PropertyEditors.MediaPicker); + } + } public override string DataTypeName