private void saveCodeActivity_Save_ExecuteCode(object sender, EventArgs e)
        {
            IPageTypeMetaDataTypeLink pageTypeMetaDataTypeLink = this.GetDataItemFromEntityToken <IPageTypeMetaDataTypeLink>();
            string metaDataDescriptionLabel = this.GetBinding <string>("CompositionDescriptionLabel");
            Guid   containerId = this.GetBinding <Guid>("CompositionContainerId");

            PageMetaDataFacade.UpdateDefinition(pageTypeMetaDataTypeLink.PageTypeId, pageTypeMetaDataTypeLink.Name, metaDataDescriptionLabel, containerId);

            SetSaveStatus(true);
            this.RefreshCurrentEntityToken();
        }
        private void finalizeCodeActivity_Finalize_ExecuteCode(object sender, EventArgs e)
        {
            using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
            {
                List <Guid> oldPageIds = GetOldAffectedPageIds();
                List <Guid> newPageIds = GetNewAffectedPageIds();

                Pair <string, Type> metaDataPair = this.GetBinding <Pair <string, Type> >("SelectedMetaDataDefinition");
                Guid   newMetaDataContainerId    = this.GetBinding <Guid>("SelectedMetaDataContainer");
                string newLabel   = this.GetBinding <string>("Label");
                int    startLevel = this.GetBinding <int>("SelectedStartDisplay");
                int    levels     = this.GetBinding <int>("SelectedInheritDisplay");

                PageMetaDataFacade.UpdateDefinition(GetCurrentPageId(), metaDataPair.First, newLabel, startLevel, levels, newMetaDataContainerId);

                IEnumerable <Guid> oldPageIdsToRemove = oldPageIds.Except(newPageIds);
                foreach (Guid id in oldPageIdsToRemove)
                {
                    IPage page = Composite.Data.PageManager.GetPageById(id);

                    bool otherDefinitionExists = page.GetAllowedMetaDataDefinitions().Where(f => f.Name == metaDataPair.First).Any();

                    if (otherDefinitionExists)
                    {
                        continue;
                    }

                    using (new DataScope(DataScopeIdentifier.Public))
                    {
                        IData dataToDelete = page.GetMetaData(metaDataPair.First, metaDataPair.Second);
                        if (dataToDelete != null)
                        {
                            DataFacade.Delete(dataToDelete);
                        }
                    }

                    using (new DataScope(DataScopeIdentifier.Administrated))
                    {
                        IData dataToDelete = page.GetMetaData(metaDataPair.First, metaDataPair.Second);
                        if (dataToDelete != null)
                        {
                            DataFacade.Delete(dataToDelete);
                        }
                    }
                }


                IData newDataTemplate = null;
                if (this.BindingExist("NewDataTemplate"))
                {
                    newDataTemplate = this.GetBinding <IData>("NewDataTemplate");

                    DataTypeDescriptor            dataTypeDescriptor = DynamicTypeManager.GetDataTypeDescriptor(metaDataPair.Second.GetImmutableTypeId());
                    DataTypeDescriptorFormsHelper helper             = new DataTypeDescriptorFormsHelper(dataTypeDescriptor);
                    helper.BindingsToObject(this.Bindings, newDataTemplate);
                }


                IEnumerable <Guid> newPageIdsToAdd = newPageIds.Except(oldPageIds);
                foreach (Guid id in newPageIdsToAdd)
                {
                    IPage page = Composite.Data.PageManager.GetPageById(id);

                    page.AddNewMetaDataToExistingPage(metaDataPair.First, metaDataPair.Second, newDataTemplate);
                }

                transactionScope.Complete();
            }
        }