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);
        }
예제 #6
0
        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);
        }
예제 #10
0
        /// <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);
        }
예제 #15
0
        /// <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;
        }
예제 #16
0
        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);
        }