private void ValidateBindings(object sender, ConditionalEventArgs e) { IPageTypeMetaDataTypeLink pageTypeMetaDataTypeLink = this.GetDataItemFromEntityToken <IPageTypeMetaDataTypeLink>(); IPageMetaDataDefinition pageMetaDataDefinition = PageMetaDataFacade.GetMetaDataDefinition(pageTypeMetaDataTypeLink.PageTypeId, pageTypeMetaDataTypeLink.Name); string metaDataDescriptionLabel = this.GetBinding <string>("CompositionDescriptionLabel"); Guid containerId = this.GetBinding <Guid>("CompositionContainerId"); e.Result = true; if (pageMetaDataDefinition.Label != metaDataDescriptionLabel) { if (PageMetaDataFacade.IsDefinitionAllowed(pageTypeMetaDataTypeLink.PageTypeId, pageMetaDataDefinition.Name, metaDataDescriptionLabel, pageMetaDataDefinition.MetaDataTypeId) == false) { this.ShowFieldMessage("CompositionDescriptionLabel", GetText("PageType.EditPageTypeMetaDataFieldWorkflow.ValidationError.MetaDataFieldNameAlreadyUsed")); SetSaveStatus(false); e.Result = false; } } if (pageMetaDataDefinition.MetaDataContainerId != containerId) { if (PageMetaDataFacade.IsNewContainerIdAllowed(pageTypeMetaDataTypeLink.PageTypeId, pageMetaDataDefinition.Name, containerId) == false) { this.ShowFieldMessage("CompositionContainerId", GetText("PageType.EditPageTypeMetaDataFieldWorkflow.ValidationError.MetaDataContainerChangeNotAllowed")); SetSaveStatus(false); e.Result = false; } } }
private void ValidateNewDefinition(object sender, ConditionalEventArgs e) { Pair <string, Type> metaDataPair = this.GetBinding <Pair <string, Type> >("SelectedMetaDataDefinition"); IPageMetaDataDefinition pageMetaDataDefinition = PageMetaDataFacade.GetMetaDataDefinition(GetCurrentPageId(), metaDataPair.First); e.Result = true; string newLabel = this.GetBinding <string>("Label"); Guid newMetaDataContainerId = this.GetBinding <Guid>("SelectedMetaDataContainer"); Guid pageId = GetCurrentPageId(); if (pageMetaDataDefinition.Label != newLabel) { if (PageMetaDataFacade.IsDefinitionAllowed(pageId, pageMetaDataDefinition.Name, newLabel, pageMetaDataDefinition.MetaDataTypeId) == false) { e.Result = false; ShowFieldMessage("Label", StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.EditMetaDataWorkflow.MetaDataFieldNameAlreadyUsed")); } } if (pageMetaDataDefinition.MetaDataContainerId != newMetaDataContainerId) { if (PageMetaDataFacade.IsNewContainerIdAllowed(pageId, pageMetaDataDefinition.Name, newMetaDataContainerId) == false) { e.Result = false; ShowFieldMessage("SelectedMetaDataContainer", StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.EditMetaDataWorkflow.MetaDataContainerChangeNotAllowed")); } } }
/// <summary> /// Gets all existing pages that are affected by the given meta data definition /// </summary> /// <param name="definingPage">If null, empty guid is used</param> /// <param name="definitionName"></param> /// <returns></returns> public static IEnumerable <IPage> GetMetaDataAffectedPages(this IPage definingPage, string definitionName) { Guid pageId = definingPage.GetPageIdOrNull(); IPageMetaDataDefinition pageMetaDataDefinition = GetMetaDataDefinition(pageId, definitionName); return(GetMetaDataAffectedPages(definingPage, pageMetaDataDefinition.StartLevel, pageMetaDataDefinition.Levels)); }
private List <Guid> GetOldAffectedPageIds() { Pair <string, Type> metaDataPair = this.GetBinding <Pair <string, Type> >("SelectedMetaDataDefinition"); IPageMetaDataDefinition pageMetaDataDefinition = PageMetaDataFacade.GetMetaDataDefinition(GetCurrentPageId(), metaDataPair.First); IPage page = GetCurrentPage(); return(page.GetMetaDataAffectedPages(pageMetaDataDefinition.StartLevel, pageMetaDataDefinition.Levels).Select(f => f.Id).ToList()); }
/// <summary> /// Using the given pageType this methods adds meta data instances that are missing /// </summary> /// <param name="definingPageType"></param> /// <param name="metaDataDefinitionName"></param> /// <param name="newDataTemplate"></param> public static void AddNewMetaDataToExistingPages(this IPageType definingPageType, string metaDataDefinitionName, IData newDataTemplate) { IPageMetaDataDefinition pageMetaDataDefinition = GetMetaDataDefinition(definingPageType.Id, metaDataDefinitionName); DataTypeDescriptor dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(pageMetaDataDefinition.MetaDataTypeId); Type metaDataType = TypeManager.GetType(dataTypeDescriptor.TypeManagerTypeName); IEnumerable <IPage> affectedPages = PageMetaDataFacade.GetMetaDataAffectedPagesByPageTypeId(definingPageType.Id); AddNewMetaDataToExistingPages(affectedPages, metaDataDefinitionName, metaDataType, newDataTemplate); }
private static DataTypeDescriptorFormsHelper CreateDataTypeDescriptorFormsHelper(IPageMetaDataDefinition pageMetaDataDefinition, DataTypeDescriptor dataTypeDescriptor) { var bindingPrefix = $"{pageMetaDataDefinition.Name}:{dataTypeDescriptor.Namespace}.{dataTypeDescriptor.Name}"; var helper = new DataTypeDescriptorFormsHelper(dataTypeDescriptor, bindingPrefix); var generatedTypesHelper = new GeneratedTypesHelper(dataTypeDescriptor); helper.AddReadOnlyFields(generatedTypesHelper.NotEditableDataFieldDescriptorNames); helper.FieldGroupLabel = StringResourceSystemFacade.ParseString(pageMetaDataDefinition.Label); return helper; }
/// <summary> /// Adds a new metadata definition to the given definingItemId. Guid.Empty is the whole website /// </summary> /// <param name="definingItemId"></param> /// <param name="name"></param> /// <param name="label"></param> /// <param name="metaDataTypeId"></param> /// <param name="metaDataContainerId"></param> /// <param name="startLevel"></param> /// <param name="levels"></param> public static void AddDefinition(Guid definingItemId, string name, string label, Guid metaDataTypeId, Guid metaDataContainerId, int startLevel = 0, int levels = 100000) { IPageMetaDataDefinition pageMetaDataDefinition = DataFacade.BuildNew <IPageMetaDataDefinition>(); pageMetaDataDefinition.Id = Guid.NewGuid(); pageMetaDataDefinition.DefiningItemId = definingItemId; pageMetaDataDefinition.Name = name; pageMetaDataDefinition.Label = label; pageMetaDataDefinition.MetaDataContainerId = metaDataContainerId; pageMetaDataDefinition.MetaDataTypeId = metaDataTypeId; pageMetaDataDefinition.StartLevel = startLevel; pageMetaDataDefinition.Levels = levels; DataFacade.AddNew <IPageMetaDataDefinition>(pageMetaDataDefinition); }
/// <summary> /// Using the given page this methods adds meta data instances that are missing /// </summary> /// <param name="definingPage">If null, empty guid is used</param> /// <param name="metaDataDefinitionName"></param> /// <param name="newDataTemplate"></param> public static void AddNewMetaDataToExistingPages(this IPage definingPage, string metaDataDefinitionName, IData newDataTemplate) { Guid pageId = definingPage.GetPageIdOrNull(); IPageMetaDataDefinition pageMetaDataDefinition = GetMetaDataDefinition(pageId, metaDataDefinitionName); DataTypeDescriptor dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(pageMetaDataDefinition.MetaDataTypeId); Type metaDataType = TypeManager.GetType(dataTypeDescriptor.TypeManagerTypeName); IEnumerable <IPage> affectedPages = definingPage.GetMetaDataAffectedPages(metaDataDefinitionName); foreach (IPage affectedPage in affectedPages) { AddNewMetaDataToExistingPage(affectedPage, metaDataDefinitionName, metaDataType, newDataTemplate); } }
private void editDefinitionCodeActivity_UpdateBindings_ExecuteCode(object sender, EventArgs e) { Pair <string, Type> metaDataPair = this.GetBinding <Pair <string, Type> >("SelectedMetaDataDefinition"); IPageMetaDataDefinition pageMetaDataDefinition = PageMetaDataFacade.GetMetaDataDefinition(GetCurrentPageId(), metaDataPair.First); this.UpdateBinding("Label", pageMetaDataDefinition.Label); List <KeyValuePair <Guid, string> > containers = PageMetaDataFacade.GetAllMetaDataContainers(); this.UpdateBinding("MetaDataContainerOptions", containers); this.UpdateBinding("SelectedMetaDataContainer", pageMetaDataDefinition.MetaDataContainerId); IPage page = GetCurrentPage(); Dictionary <int, string> startDisplayOptions = new Dictionary <int, string>(); if (page != null) { startDisplayOptions.Add(0, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.StartDisplayOption0")); } startDisplayOptions.Add(1, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.StartDisplayOption1")); startDisplayOptions.Add(2, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.StartDisplayOption2")); startDisplayOptions.Add(3, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.StartDisplayOption3")); startDisplayOptions.Add(4, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.StartDisplayOption4")); startDisplayOptions.Add(5, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.StartDisplayOption5")); this.UpdateBinding("StartDisplayOptions", startDisplayOptions); this.UpdateBinding("SelectedStartDisplay", pageMetaDataDefinition.StartLevel); int levels = pageMetaDataDefinition.Levels; if (levels > 10) { levels = 10000; } Dictionary <int, string> inheritDisplayOptions = new Dictionary <int, string>(); inheritDisplayOptions.Add(0, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.InheritDisplayOption0")); inheritDisplayOptions.Add(1, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.InheritDisplayOption1")); inheritDisplayOptions.Add(2, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.InheritDisplayOption2")); inheritDisplayOptions.Add(3, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.InheritDisplayOption3")); inheritDisplayOptions.Add(10000, StringResourceSystemFacade.GetString("Composite.Management", "AssociatedDataElementProviderHelper.AddMetaDataWorkflow.InheritDisplayOption4")); this.UpdateBinding("InheritDisplayOptions", inheritDisplayOptions); this.UpdateBinding("SelectedInheritDisplay", levels); }
/// <exclude /> public static bool IsNewContainerIdAllowed(Guid definingItemId, string name, Guid newMetaDataContainerName) { IEnumerable <IPageMetaDataDefinition> pageMetaDataDefinitions = DataFacade.GetData <IPageMetaDataDefinition>().Where(f => f.Name == name).Evaluate(); IPageMetaDataDefinition pageMetaDataDefinition = pageMetaDataDefinitions.Where(f => f.DefiningItemId == definingItemId).SingleOrDefault(); if ((pageMetaDataDefinition != null) && (pageMetaDataDefinition.MetaDataContainerId == newMetaDataContainerName)) { return(true); // Return true if no changes are made } if (pageMetaDataDefinitions.Count() > 1) { return(false); } return(true); }
private void initializeCodeActivity_UpdateBindings_ExecuteCode(object sender, EventArgs e) { IPageTypeMetaDataTypeLink pageTypeMetaDataTypeLink = this.GetDataItemFromEntityToken <IPageTypeMetaDataTypeLink>(); IPageMetaDataDefinition pageMetaDataDefinition = PageMetaDataFacade.GetMetaDataDefinition(pageTypeMetaDataTypeLink.PageTypeId, pageTypeMetaDataTypeLink.Name); //this.UpdateBinding("CompositionDescriptionName", compositionDescription.Name); this.UpdateBinding("CompositionDescriptionLabel", pageMetaDataDefinition.Label); List <KeyValuePair <Guid, string> > metaDataContainerOptions = PageMetaDataFacade.GetAllMetaDataContainers(); this.Bindings.Add("MetaDataContainerOptions", metaDataContainerOptions); this.Bindings.Add("CompositionContainerId", pageMetaDataDefinition.MetaDataContainerId); var dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(pageTypeMetaDataTypeLink.DataTypeId); this.Bindings.Add("MetaTypeName", dataTypeDescriptor.TypeManagerTypeName); }
/// <summary> /// Removes a metadata definition and possibly deletes all data items that are defined by it /// </summary> /// <param name="definingItemId"></param> /// <param name="definitionName"></param> /// <param name="deleteExistingMetaData"></param> public static void RemoveDefinition(Guid definingItemId, string definitionName, bool deleteExistingMetaData = true) { IPageMetaDataDefinition pageMetaDataDefinition = GetMetaDataDefinition(definingItemId, definitionName); IEnumerable <IPageMetaDataDefinition> otherPageMetaDataDefinitions = DataFacade.GetData <IPageMetaDataDefinition>(). Where(f => f.Name == definitionName && f.Id != pageMetaDataDefinition.Id). Evaluate(); DataTypeDescriptor dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(pageMetaDataDefinition.MetaDataTypeId); Type metaDataType = TypeManager.GetType(dataTypeDescriptor.TypeManagerTypeName); if (deleteExistingMetaData) { using (var transactionScope = TransactionsFacade.CreateNewScope()) { foreach (CultureInfo localeCultureInfo in DataLocalizationFacade.ActiveLocalizationCultures) { using (new DataScope(localeCultureInfo)) { using (new DataScope(DataScopeIdentifier.Public)) { RemoveDefinitionDeleteData(definitionName, metaDataType, otherPageMetaDataDefinitions); } using (new DataScope(DataScopeIdentifier.Administrated)) { RemoveDefinitionDeleteData(definitionName, metaDataType, otherPageMetaDataDefinitions); } } } DataFacade.Delete(pageMetaDataDefinition); transactionScope.Complete(); } } else { DataFacade.Delete(pageMetaDataDefinition); } }
/// <summary> /// Update an existing metadata definition with possible new label and container id /// </summary> /// <param name="definingItemId"></param> /// <param name="definitionName"></param> /// <param name="newLabel"></param> /// <param name="newMetaDataContainerId"></param> public static void UpdateDefinition(Guid definingItemId, string definitionName, string newLabel, Guid newMetaDataContainerId) { using (var transactionScope = TransactionsFacade.CreateNewScope()) { IPageMetaDataDefinition pageMetaDataDefinition = GetMetaDataDefinition(definingItemId, definitionName); pageMetaDataDefinition.Label = newLabel; pageMetaDataDefinition.MetaDataContainerId = newMetaDataContainerId; // Update all data // PageDataAssociationVisabilityWrapper wrapper = new PageDataAssociationVisabilityWrapper(pageAssociationVisability); // Make join expression tree with compositionType and IPage on compositionType ref to IPage // and test those pages against the PageDataAssociationVisabilityWrapper (IsAllowed) and // Change compositionType composition description name to new name DataFacade.Update(pageMetaDataDefinition); transactionScope.Complete(); } }
/// <summary> /// Returns true if the given page metadata definition is allowed for the given page /// </summary> /// <param name="pageMetaDataDefinition"></param> /// <param name="page">If null, empty guid is used (whole website)</param> /// <returns></returns> public static bool IsDefinitionAllowed(IPageMetaDataDefinition pageMetaDataDefinition, IPage page) { Guid pageId = page.GetPageIdOrNull(); if (pageMetaDataDefinition.DefiningItemId == page.PageTypeId) { return(true); } // Its not a pagetype attached meta data definitions, check page attacked int levelsToParent = CountLevelsToParent(pageMetaDataDefinition.DefiningItemId, pageId); if (pageMetaDataDefinition.StartLevel > levelsToParent) { return(false); } if (pageMetaDataDefinition.StartLevel + pageMetaDataDefinition.Levels < levelsToParent) { return(false); } return(true); }
/// <summary> /// Returns true if the given page metadata definition is allowed for the given page /// </summary> /// <param name="pageMetaDataDefinition"></param> /// <param name="page">If null, empty guid is used (whole website)</param> /// <returns></returns> public static bool IsDefinitionAllowed(IPageMetaDataDefinition pageMetaDataDefinition, IPage page) { Guid pageId = page.GetPageIdOrNull(); if (pageMetaDataDefinition.DefiningItemId == page.PageTypeId) return true; // Its not a pagetype attached meta data definitions, check page attacked int levelsToParent = CountLevelsToParent(pageMetaDataDefinition.DefiningItemId, pageId); if (pageMetaDataDefinition.StartLevel > levelsToParent) return false; if (pageMetaDataDefinition.StartLevel + pageMetaDataDefinition.Levels < levelsToParent) return false; return true; }
private static DataTypeDescriptorFormsHelper CreateDataTypeDescriptorFormsHelper(IPageMetaDataDefinition pageMetaDataDefinition, DataTypeDescriptor dataTypeDescriptor) { var bindingPrefix = $"{pageMetaDataDefinition.Name}:{dataTypeDescriptor.Namespace}.{dataTypeDescriptor.Name}"; var helper = new DataTypeDescriptorFormsHelper(dataTypeDescriptor, bindingPrefix); var generatedTypesHelper = new GeneratedTypesHelper(dataTypeDescriptor); helper.AddReadOnlyFields(generatedTypesHelper.NotEditableDataFieldDescriptorNames); helper.FieldGroupLabel = StringResourceSystemFacade.ParseString(pageMetaDataDefinition.Label); return(helper); }