private DataTypeDescriptorFormsHelper GetDataTypeDescriptorFormsHelper()
        {
            if (_helper == null)
            {
                var type = GetInterfaceType();
                var guid = type.GetImmutableTypeId();

                var typeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(guid);
                if (typeDescriptor == null)
                {
                    throw new InvalidOperationException(string.Format("Can not find the type descriptor for the type '{0}'", type));
                }

                var generatedTypesHelper = new GeneratedTypesHelper(typeDescriptor)
                {
                    AllowForeignKeyEditing = true
                };

                _helper = new DataTypeDescriptorFormsHelper(typeDescriptor, true, EntityToken)
                {
                    LayoutIconHandle = "generated-type-data-add"
                };

                _helper.AddReadOnlyFields(generatedTypesHelper.NotEditableDataFieldDescriptorNames);

                _typeName = typeDescriptor.Name;
            }

            return(_helper);
        }
Exemple #2
0
        private Dictionary <DataTypeDescriptor, IEnumerable <SqlDataTypeStoreDataScope> > BuildAllExistingDataTypeStoreDataScopes()
        {
            var allSqlDataTypeStoreDataScopes = new Dictionary <DataTypeDescriptor, IEnumerable <SqlDataTypeStoreDataScope> >();

            foreach (InterfaceConfigurationElement element in _interfaceConfigurationElements)
            {
                Guid dataTypeId         = element.DataTypeId;
                var  dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(dataTypeId, true);
                if (dataTypeDescriptor == null)
                {
                    Log.LogWarning(LogTitle, "Failed to get data type descriptor by id '{0}'".FormatWith(dataTypeId));
                    continue;
                }

                var sqlDataTypeStoreDataScopes = new List <SqlDataTypeStoreDataScope>();

                foreach (StorageInformation storageInformation in element.Stores)
                {
                    var sqlDataTypeStoreDataScope = new SqlDataTypeStoreDataScope
                    {
                        DataScopeName = storageInformation.DataScope,
                        CultureName   = storageInformation.CultureName,
                        TableName     = storageInformation.TableName
                    };

                    sqlDataTypeStoreDataScopes.Add(sqlDataTypeStoreDataScope);
                }

                allSqlDataTypeStoreDataScopes.Add(dataTypeDescriptor, sqlDataTypeStoreDataScopes);
            }

            return(allSqlDataTypeStoreDataScopes);
        }
        private DataTypeDescriptorFormsHelper GetDataTypeDescriptorFormsHelper()
        {
            if (_helper == null)
            {
                var dataEntityToken = (DataEntityToken)EntityToken;
                var guid            = dataEntityToken.Data.DataSourceId.InterfaceType.GetImmutableTypeId();
                var typeDescriptor  = DataMetaDataFacade.GetDataTypeDescriptor(guid);

                var generatedTypesHelper = new GeneratedTypesHelper(typeDescriptor)
                {
                    AllowForeignKeyEditing = true
                };

                _helper = new DataTypeDescriptorFormsHelper(typeDescriptor, true, EntityToken)
                {
                    LayoutIconHandle = "generated-type-data-edit"
                };

                _helper.AddReadOnlyFields(generatedTypesHelper.NotEditableDataFieldDescriptorNames);

                _typeName = typeDescriptor.Name;
            }

            return(_helper);
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="interfaceType"></param>
        /// <param name="existingDataTypeDescriptor">Use null to get existing data type descriptor</param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public static bool Validate(Type interfaceType, DataTypeDescriptor existingDataTypeDescriptor, out string errorMessage)
        {
            if (existingDataTypeDescriptor == null)
            {
                existingDataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(interfaceType.GetImmutableTypeId());

                if (existingDataTypeDescriptor == null)
                {
                    errorMessage = null;
                    return(true);
                }
            }

            errorMessage = _typeSpecificValidations.GetOrAdd(
                interfaceType,
                f =>
            {
                string message;
                bool isValid = DataTypeValidator.Validate(interfaceType, existingDataTypeDescriptor, out message);

                if (isValid)
                {
                    return(null);
                }

                var sb = new StringBuilder();
                sb.AppendLine(string.Format("The data type interface '{0}' did not validate and can't be used at the moment.", interfaceType));
                sb.AppendLine(message);

                return(sb.ToString());
            }
                );

            return(errorMessage == null);
        }
Exemple #5
0
        // Helper
        internal static bool IsEnsureUpdateStoreNeeded(Type interfaceType)
        {
            using (TimerProfilerFacade.CreateTimerProfiler())
            {
                DataTypeDescriptor newDataTypeDescriptor;
                if (!TryGetDataTypeDescriptor(interfaceType, out newDataTypeDescriptor))
                {
                    newDataTypeDescriptor = BuildNewDataTypeDescriptor(interfaceType);
                }

                var oldDataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(newDataTypeDescriptor.DataTypeId);

                if (oldDataTypeDescriptor == null)
                {
                    DataMetaDataFacade.PersistMetaData(newDataTypeDescriptor);

                    return(false);
                }

                var dataTypeChangeDescriptor = new DataTypeChangeDescriptor(oldDataTypeDescriptor, newDataTypeDescriptor);

                if (!dataTypeChangeDescriptor.AlteredTypeHasChanges)
                {
                    return(false);
                }

                return(dataTypeChangeDescriptor.AlteredTypeHasChanges);
            }
        }
Exemple #6
0
        private void initialCodeActivity_ExecuteCode(object sender, EventArgs e)
        {
            var entityToken = EntityToken as AssociatedDataElementProviderHelperEntityToken;

            if (!string.IsNullOrEmpty(entityToken?.Payload))
            {
                var type = TypeManager.GetType(entityToken.Payload);
                var id   = type.GetImmutableTypeId();
                var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(id);
                UpdateBinding("DataTypeDescriptor", dataTypeDescriptor);

                UpdateBinding(BindingNames.PageId, new Guid(entityToken.Id));

                if (!PermissionsFacade.GetPermissionsForCurrentUser(EntityToken).Contains(PermissionType.Publish) || !typeof(IPublishControlled).IsAssignableFrom(type))
                {
                    var formData = WorkflowFacade.GetFormData(InstanceId, true);

                    if (formData.ExcludedEvents == null)
                    {
                        formData.ExcludedEvents = new List <string>();
                    }

                    formData.ExcludedEvents.Add("SaveAndPublish");
                }
            }
        }
Exemple #7
0
        private static string GetDataTypeLabel(object datatype)
        {
            var str = (string)datatype;

            Guid dataTypeId;

            if (Guid.TryParse(str, out dataTypeId))
            {
                if (dataTypeId == new Guid("C046F704-D3E4-4b3d-8CB9-77564FB0B9E7"))
                {
                    return(Texts.DataType_Page);
                }

                if (dataTypeId == new Guid("A8716C78-1499-4155-875B-2545006385B2"))
                {
                    return(Texts.DataType_MediaFile);
                }

                var descriptor = DataMetaDataFacade.GetDataTypeDescriptor(dataTypeId);
                if (descriptor != null)
                {
                    return(descriptor.Title ?? descriptor.Name);
                }
            }

            return(str);
        }
        // Helper
        internal static bool EnsureUpdateStore(Type interfaceType, string providerName, bool makeAFlush)
        {
            using (TimerProfilerFacade.CreateTimerProfiler(interfaceType.ToString()))
            {
                var newDataTypeDescriptor = BuildNewDataTypeDescriptor(interfaceType);
                var oldDataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(newDataTypeDescriptor.DataTypeId);

                if (oldDataTypeDescriptor == null)
                {
                    DataMetaDataFacade.PersistMetaData(newDataTypeDescriptor);
                    return(false);
                }

                var dataTypeChangeDescriptor = new DataTypeChangeDescriptor(oldDataTypeDescriptor, newDataTypeDescriptor);

                if (!dataTypeChangeDescriptor.AlteredTypeHasChanges)
                {
                    return(false);
                }

                Log.LogVerbose("DynamicTypeManager", "Updating the store for interface type '{0}' on the '{1}' data provider", interfaceType, providerName);

                var updateDataTypeDescriptor = new UpdateDataTypeDescriptor(oldDataTypeDescriptor, newDataTypeDescriptor, providerName);

                AlterStore(updateDataTypeDescriptor, makeAFlush);

                return(true);
            }
        }
Exemple #9
0
        internal void BuildAllCode(CodeGenerationBuilder codeGenerationBuilder)
        {
            var codeBuilder = new XmlDataProviderCodeBuilder(_dataProviderContext.ProviderName, codeGenerationBuilder);

            foreach (XmlProviderInterfaceConfigurationElement element in _dataTypeConfigurationElements)
            {
                if (element.DataTypeId == Guid.Empty)
                {
                    continue;
                }

                Guid dataTypeId = element.DataTypeId;

                DataTypeDescriptor dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(dataTypeId);

                if (dataTypeDescriptor == null)
                {
                    Log.LogError(LogTitle, "Failed to find interface by id '{0}'. Skipping code generation for that type", dataTypeId);
                    continue;
                }

                if (!dataTypeDescriptor.ValidateRuntimeType())
                {
                    Log.LogError(LogTitle, "The non code generated interface type '{0}' was not found, skipping code generation for that type", dataTypeDescriptor);
                    continue;
                }

                codeBuilder.AddDataType(dataTypeDescriptor);
            }
        }
Exemple #10
0
        private DataTypeDescriptor GetDataTypeDescriptor()
        {
            Type type = TypeManager.GetType(this.Payload);

            Guid guid = type.GetImmutableTypeId();

            return(DataMetaDataFacade.GetDataTypeDescriptor(guid));
        }
Exemple #11
0
        /// <summary>
        /// This method will return the type of the empty data class type.
        /// If the type does not exist, one will be runtime code generated
        /// using the type to get a data type descriptor.
        /// </summary>
        /// <param name="interfaceType">The data interface type to get the empty class type for.</param>
        /// <param name="forceReCompilation">
        /// If this is true a new empty class will be
        /// compiled at runtime regardless if it exists or not.
        /// Use with caution!
        /// </param>
        /// <returns>The empty class type for the given data interface type.</returns>
        public static Type GetEmptyDataClassType(Type interfaceType, bool forceReCompilation = false)
        {
            VerifyAssemblyLocation(interfaceType);

            var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(interfaceType.GetImmutableTypeId(), true);

            return(GetEmptyDataClassType(dataTypeDescriptor, forceReCompilation));
        }
        private DataTypeDescriptor GetDataTypeDescriptor()
        {
            Type type = GetTypeFromEntityToken();

            Guid guid = type.GetImmutableTypeId();

            return(DataMetaDataFacade.GetDataTypeDescriptor(guid));
        }
        private DataTypeDescriptor GetDataTypeDescriptor()
        {
            GeneratedDataTypesElementProviderTypeEntityToken entityToken = (GeneratedDataTypesElementProviderTypeEntityToken)this.EntityToken;
            Type type = TypeManager.GetType(entityToken.SerializedTypeName);

            Guid guid = type.GetImmutableTypeId();

            return(DataMetaDataFacade.GetDataTypeDescriptor(guid));
        }
Exemple #14
0
        /// <exclude />
        public void UpdateDataTypeDescriptor(DataTypeDescriptor dataTypeDescriptor, bool flushTheSystem)
        {
            dataTypeDescriptor.Validate();

            DataMetaDataFacade.PersistMetaData(dataTypeDescriptor);

            if (flushTheSystem)
            {
                GlobalEventSystemFacade.FlushTheSystem();
            }
        }
Exemple #15
0
        /// <summary>
        /// This method will return the type of the empty data class type.
        /// If the type does not exist, one will be runtime code generated
        /// using the type to get a data type descriptor.
        /// </summary>
        /// <param name="interfaceType">The data interface type to get the empty class type for.</param>
        /// <param name="forceReCompilation">
        /// If this is true a new empty class will be
        /// compiled at runtime regardless if it exists or not.
        /// Use with caution!
        /// </param>
        /// <returns>The empty class type for the given data interface type.</returns>
        public static Type GetEmptyDataClassType(Type interfaceType, bool forceReCompilation = false)
        {
            if (!DataTypeTypesManager.IsAllowedDataTypeAssembly(interfaceType))
            {
                string message = string.Format("The data interface '{0}' is not located in an assembly in the website Bin folder. Please move it to that location", interfaceType);
                Log.LogError("EmptyDataClassTypeManager", message);
                throw new InvalidOperationException(message);
            }

            DataTypeDescriptor dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(interfaceType.GetImmutableTypeId(), true);

            return(GetEmptyDataClassType(dataTypeDescriptor, forceReCompilation));
        }
        private static DataTypeDescriptor GetDataTypeDescriptorNotNull(XmlProviderInterfaceConfigurationElement element)
        {
            Guid dataTypeId = element.DataTypeId;

            var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(dataTypeId, true);

            if (dataTypeDescriptor == null)
            {
                throw NewConfigurationException(element, "Failed to get a DataTypeDescriptor by id '{0}'".FormatWith(dataTypeId));
            }

            return(dataTypeDescriptor);
        }
Exemple #17
0
        // Helper
        internal static bool EnsureUpdateStore(Type interfaceType, string providerName, bool makeAFlush)
        {
            using (TimerProfilerFacade.CreateTimerProfiler(interfaceType.ToString()))
            {
                var newDataTypeDescriptor = BuildNewDataTypeDescriptor(interfaceType);

                var oldDataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(newDataTypeDescriptor.DataTypeId);

                if (interfaceType.IsGenerated())
                {
                    var customFields = oldDataTypeDescriptor.Fields.Where(f => !f.Inherited &&
                                                                          !oldDataTypeDescriptor.KeyPropertyNames
                                                                          .Contains(f.Name));
                    foreach (var field in customFields)
                    {
                        newDataTypeDescriptor.Fields.Remove(newDataTypeDescriptor.Fields[field.Name]);
                        newDataTypeDescriptor.Fields.Add(field);
                    }
                }

                if (oldDataTypeDescriptor == null)
                {
                    DataMetaDataFacade.PersistMetaData(newDataTypeDescriptor);
                    return(false);
                }

                var dataTypeChangeDescriptor = new DataTypeChangeDescriptor(oldDataTypeDescriptor, newDataTypeDescriptor);

                if (!dataTypeChangeDescriptor.AlteredTypeHasChanges)
                {
                    if (dataTypeChangeDescriptor.TypeHasMetaDataChanges)
                    {
                        Log.LogInformation(nameof(DynamicTypeManager), $"Updating data type descriptor for type '{newDataTypeDescriptor.GetFullInterfaceName()}'");
                        DataMetaDataFacade.PersistMetaData(newDataTypeDescriptor);
                    }

                    return(false);
                }

                Log.LogVerbose(nameof(DynamicTypeManager),
                               "Updating the store for interface type '{0}' on the '{1}' data provider", interfaceType,
                               providerName);

                var updateDataTypeDescriptor = new UpdateDataTypeDescriptor(oldDataTypeDescriptor, newDataTypeDescriptor,
                                                                            providerName);

                AlterStore(updateDataTypeDescriptor, makeAFlush);

                return(true);
            }
        }
Exemple #18
0
        private static IEnumerable <PropertyInfo> GetPageReferenceFields(Type referencedType)
        {
            var descriptor = DataMetaDataFacade.GetDataTypeDescriptor(referencedType.GetImmutableTypeId());

            if (descriptor == null)
            {
                return(Enumerable.Empty <PropertyInfo>());
            }

            return(descriptor.Fields.Where(f => f.InstanceType == typeof(Guid) &&
                                           f.ForeignKeyReferenceTypeName != null &&
                                           TypeManager.TryGetType(f.ForeignKeyReferenceTypeName) == typeof(IPage))
                   .Select(f => referencedType.GetProperty(f.Name)));
        }
Exemple #19
0
        /// <exclude />
        public void AlterStore(UpdateDataTypeDescriptor updateDataTypeDescriptor, bool forceCompile)
        {
            DataTypeChangeDescriptor dataTypeChangeDescriptor = updateDataTypeDescriptor.CreateDataTypeChangeDescriptor();

            dataTypeChangeDescriptor.AlteredType.Validate();

            using (var transactionScope = TransactionsFacade.CreateNewScope())
            {
                DataMetaDataFacade.PersistMetaData(dataTypeChangeDescriptor.AlteredType);

                if (dataTypeChangeDescriptor.AlteredTypeHasChanges)
                {
                    DataProviderPluginFacade.AlterStore(updateDataTypeDescriptor, forceCompile);
                }

                transactionScope.Complete();
            }
        }
Exemple #20
0
        /// <summary>
        /// Loads all the data types referenced in the provider's configuration file.
        /// </summary>
        private static Dictionary <Guid, Type> LoadDataTypes(IEnumerable <InterfaceConfigurationElement> configurationElements)
        {
            var dataTypeDescriptors = new List <DataTypeDescriptor>();

            foreach (InterfaceConfigurationElement element in configurationElements)
            {
                Guid dataTypeId = element.DataTypeId;

                var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(dataTypeId, true);
                if (dataTypeDescriptor == null)
                {
                    throw NewConfigurationException(element, "Failed to get a DataTypeDescriptor by id '{0}'".FormatWith(dataTypeId));
                }

                dataTypeDescriptors.Add(dataTypeDescriptor);
            }

            return(DataTypeTypesManager.GetDataTypes(dataTypeDescriptors));
        }
        private DataTypeDescriptorFormsHelper GetDataTypeDescriptorFormsHelper()
        {
            if (_helper == null)
            {
                var dataEntityToken = (DataEntityToken)EntityToken;
                var interfaceType   = dataEntityToken.Data.DataSourceId.InterfaceType;
                var guid            = interfaceType.GetImmutableTypeId();
                var typeDescriptor  = DataMetaDataFacade.GetDataTypeDescriptor(guid);

                var generatedTypesHelper = new GeneratedTypesHelper(typeDescriptor);

                _helper = new DataTypeDescriptorFormsHelper(typeDescriptor, true, EntityToken);
                _helper.AddReadOnlyFields(generatedTypesHelper.NotEditableDataFieldDescriptorNames);

                _typeName = typeDescriptor.Name;
            }

            return(_helper);
        }
Exemple #22
0
        /// <exclude />
        public void DropStore(string providerName, DataTypeDescriptor typeDescriptor, bool makeAFlush)
        {
            Verify.ArgumentNotNullOrEmpty(providerName, "providerName");
            Verify.ArgumentNotNull(typeDescriptor, "typeDescriptor");

            typeDescriptor.Validate();

            using (var transactionScope = TransactionsFacade.CreateNewScope())
            {
                DataProviderPluginFacade.DropStore(providerName, typeDescriptor);
                DataMetaDataFacade.DeleteMetaData(typeDescriptor.DataTypeId);
                transactionScope.Complete();
            }

            if (makeAFlush)
            {
                GlobalEventSystemFacade.FlushTheSystem();
            }
        }
        public FlowToken Execute(EntityToken entityToken, ActionToken actionToken, FlowControllerServicesContainer flowControllerServicesContainer)
        {
            var  token = (GeneratedDataTypesElementProviderTypeEntityToken)entityToken;
            var  type  = TypeManager.GetType(token.SerializedTypeName);
            Guid guid  = type.GetImmutableTypeId();

            var oldDataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(guid);
            var superInfterface       = ((ToggleSuperInterfaceActionToken)actionToken).InterfaceType;

            var newDataTypeDescriptor = oldDataTypeDescriptor.Clone();

            if (newDataTypeDescriptor.SuperInterfaces.Contains(superInfterface))
            {
                newDataTypeDescriptor.RemoveSuperInterface(superInfterface);
            }
            else
            {
                newDataTypeDescriptor.AddSuperInterface(superInfterface);
            }

            if (newDataTypeDescriptor.DataScopes.Count == 0)
            {
                newDataTypeDescriptor.DataScopes.Add(DataScopeIdentifier.Public);
            }

            if (oldDataTypeDescriptor.DataScopes.Count == 0)
            {
                oldDataTypeDescriptor.DataScopes.Add(DataScopeIdentifier.Public);
            }

            var updateDescriptor = new UpdateDataTypeDescriptor(oldDataTypeDescriptor, newDataTypeDescriptor, true);

            GeneratedTypesFacade.UpdateType(updateDescriptor);

            EntityTokenCacheFacade.ClearCache();

            var treeRefresher = new ParentTreeRefresher(flowControllerServicesContainer);

            treeRefresher.PostRefreshMesseges(entityToken);

            return(null);
        }
        private DataTypeDescriptor GetDataTypeDescriptor()
        {
            Type type;

            if (this.EntityToken is AssociatedDataElementProviderHelperEntityToken)
            {
                var castedEntityToken = this.EntityToken as AssociatedDataElementProviderHelperEntityToken;

                type = TypeManager.GetType(castedEntityToken.Payload);
            }
            else
            {
                var entityToken = (GeneratedDataTypesElementProviderTypeEntityToken)this.EntityToken;
                type = TypeManager.GetType(entityToken.SerializedTypeName);
            }

            Guid guid = type.GetImmutableTypeId();

            return(DataMetaDataFacade.GetDataTypeDescriptor(guid));
        }
Exemple #25
0
        internal void BuildAllCode(CodeGenerationBuilder codeGenerationBuilder)
        {
            var codeBuilder = new SqlDataProviderCodeBuilder(_dataProviderContext.ProviderName, codeGenerationBuilder);

            foreach (InterfaceConfigurationElement element in _interfaceConfigurationElements)
            {
                if (element.DataTypeId == Guid.Empty)
                {
                    continue;
                }

                var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(element.DataTypeId);

                if (!dataTypeDescriptor.ValidateRuntimeType())
                {
                    Log.LogError(LogTitle, string.Format("The non code generated interface type '{0}' was not found, skipping code generation for that type", dataTypeDescriptor));
                    continue;
                }

                var sqlDataTypeStoreDataScopes = new List <SqlDataTypeStoreDataScope>();

                foreach (StorageInformation storageInformation in element.Stores)
                {
                    var sqlDataTypeStoreDataScope = new SqlDataTypeStoreDataScope
                    {
                        DataScopeName = storageInformation.DataScope,
                        CultureName   = storageInformation.CultureName,
                        TableName     = storageInformation.TableName
                    };

                    sqlDataTypeStoreDataScopes.Add(sqlDataTypeStoreDataScope);
                }

                codeBuilder.AddDataType(dataTypeDescriptor, sqlDataTypeStoreDataScopes);
            }

            codeBuilder.AddDataContext();
        }
Exemple #26
0
        /// <exclude />
        public void CreateStores(string providerName, IReadOnlyCollection <DataTypeDescriptor> typeDescriptors, bool doFlush)
        {
            Verify.ArgumentNotNullOrEmpty(providerName, "providerName");
            Verify.ArgumentNotNull(typeDescriptors, "typeDescriptors");

            typeDescriptors.ForEach(d => d.Validate());

            using (var transactionScope = TransactionsFacade.CreateNewScope())
            {
                foreach (var typeDescriptor in typeDescriptors)
                {
                    DataMetaDataFacade.PersistMetaData(typeDescriptor);
                }

                DataProviderPluginFacade.CreateStores(providerName, typeDescriptors);

                transactionScope.Complete();
            }

            if (doFlush)
            {
                GlobalEventSystemFacade.FlushTheSystem();
            }
        }
        internal void CopyPageData(IPage sourcePage, IPage newPage)
        {
            Guid sourcePageId    = sourcePage.Id;
            Guid newPageId       = newPage.Id;
            Guid sourceVersionId = sourcePage.VersionId;
            Guid newVersionId    = newPage.VersionId;

            var newPlaceholders = new List <IPagePlaceholderContent>();
            var placeholders    =
                DataFacade.GetData <IPagePlaceholderContent>(false)
                .Where(ph => ph.PageId == sourcePageId &&
                       ph.VersionId == sourceVersionId)
                .ToList();

            foreach (var placeholderContent in placeholders)
            {
                var newPlaceholder = DataFacade.BuildNew <IPagePlaceholderContent>();

                newPlaceholder.PageId        = newPageId;
                newPlaceholder.PlaceHolderId = placeholderContent.PlaceHolderId;
                newPlaceholder.Content       = placeholderContent.Content;
                newPlaceholder.VersionId     = newVersionId;

                newPlaceholders.Add(newPlaceholder);
            }
            DataFacade.AddNew <IPagePlaceholderContent>(newPlaceholders);

            var sourceMetaData = sourcePage.GetMetaData().Cast <IPageMetaData>()
                                 .Where(d => d.VersionId == sourceVersionId);

            foreach (var metaDataItem in sourceMetaData)
            {
                var metaDataType   = metaDataItem.DataSourceId.InterfaceType;
                var typeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(metaDataType.GetImmutableTypeId());
                var definition     = PageMetaDataFacade.GetMetaDataDefinition(sourcePageId, metaDataItem.GetTypeTitle());

                var newDataItem = (IPageMetaData)DataFacade.BuildNew(metaDataType);

                var properties = metaDataType.GetPropertiesRecursively().ToDictionary(p => p.Name);
                foreach (var field in typeDescriptor.Fields)
                {
                    var propertyInfo = properties[field.Name];
                    propertyInfo.SetValue(newDataItem, propertyInfo.GetValue(metaDataItem));
                }

                newDataItem.VersionId         = newVersionId;
                newDataItem.Id                = Guid.NewGuid();
                newDataItem.PageId            = newPageId;
                newDataItem.PublicationStatus = GenericPublishProcessController.Draft;
                newDataItem = (IPageMetaData)DataFacade.AddNew((IData)newDataItem);

                if (definition != null)
                {
                    string title = newDataItem.GetTypeTitle();
                    newPage.AddMetaDataDefinition(title, title, newDataItem.GetImmutableTypeId(),
                                                  definition.MetaDataContainerId);
                }
            }

            List <string> selectableTreeIds = TreeFacade.AllTrees.Where(
                tree => tree.HasAttachmentPoints(sourcePage.GetDataEntityToken()))
                                              .Where(tree => !tree.HasAttachmentPoints(newPage.GetDataEntityToken()))
                                              .Select(tree => tree.TreeId).ToList();

            foreach (var selectableTreeId in selectableTreeIds)
            {
                TreeFacade.AddPersistedAttachmentPoint(selectableTreeId, newPage.DataSourceId.InterfaceType,
                                                       newPage.DataSourceId.GetKeyValue());
            }

            foreach (var dataFolderType in sourcePage.GetDefinedFolderTypes())
            {
                newPage.AddFolderDefinition(dataFolderType);
            }
        }
Exemple #28
0
        private InterfaceGeneratedClassesInfo InitializeStoreTypes(InterfaceConfigurationElement element,
                                                                   Dictionary <DataTypeDescriptor, IEnumerable <SqlDataTypeStoreDataScope> > allSqlDataTypeStoreDataScopes,
                                                                   Type dataContextClass,
                                                                   Dictionary <Guid, Type> dataTypes,
                                                                   bool forceCompile,
                                                                   ref bool dataContextRecompilationNeeded,
                                                                   ref HelperClassesGenerationInfo helperClassesGenerationInfo)
        {
            var result = new InterfaceGeneratedClassesInfo();

            var dataScopes = new List <SqlDataTypeStoreDataScope>();

            foreach (StorageInformation storageInformation in element.Stores)
            {
                var sqlDataTypeStoreDataScope = new SqlDataTypeStoreDataScope
                {
                    DataScopeName = storageInformation.DataScope,
                    CultureName   = storageInformation.CultureName,
                    TableName     = storageInformation.TableName
                };

                dataScopes.Add(sqlDataTypeStoreDataScope);
            }

            result.DataScopes = dataScopes;

            Guid dataTypeId = element.DataTypeId;

            var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(dataTypeId, true);

            if (dataTypeDescriptor == null)
            {
                throw NewConfigurationException(element, "Failed to get a DataTypeDescriptor by id '{0}'".FormatWith(dataTypeId));
            }

            result.DataTypeDescriptor = dataTypeDescriptor;

            Type interfaceType = null;

            try
            {
                if (dataTypes == null ||
                    !dataTypes.TryGetValue(dataTypeId, out interfaceType) ||
                    interfaceType == null)
                {
                    interfaceType = DataTypeTypesManager.GetDataType(dataTypeDescriptor);
                }

                if (interfaceType == null)
                {
                    Log.LogWarning(LogTitle, "The data interface type '{0}' does not exists and is not code generated. It will not be unusable", dataTypeDescriptor.TypeManagerTypeName);
                    return(result);
                }

                result.InterfaceType = interfaceType;

                string validationMessage;
                bool   isValid = DataTypeValidationRegistry.Validate(interfaceType, dataTypeDescriptor, out validationMessage);
                if (!isValid)
                {
                    Log.LogCritical(LogTitle, validationMessage);
                    throw new InvalidOperationException(validationMessage);
                }

                Dictionary <SqlDataTypeStoreTableKey, StoreTypeInfo> fields;
                helperClassesGenerationInfo = EnsureNeededTypes(dataTypeDescriptor,
                                                                dataScopes, allSqlDataTypeStoreDataScopes, dataContextClass,
                                                                out fields, ref dataContextRecompilationNeeded, forceCompile);

                result.Fields = fields;
                return(result);
            }
            catch (Exception ex)
            {
                if (interfaceType != null)
                {
                    DataProviderRegistry.RegisterDataTypeInitializationError(interfaceType, ex);
                    DataProviderRegistry.AddKnownDataType(interfaceType, _dataProviderContext.ProviderName);

                    Log.LogError(LogTitle, "Failed initialization for the datatype {0}", dataTypeDescriptor.TypeManagerTypeName);
                }
                Log.LogError(LogTitle, ex);

                result.Fields = new Dictionary <SqlDataTypeStoreTableKey, StoreTypeInfo>();

                return(result);
            }
        }
Exemple #29
0
        /// <exclude />
        public bool TryGetDataTypeDescriptor(Guid immutableTypeId, out DataTypeDescriptor dataTypeDescriptor)
        {
            dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(immutableTypeId);

            return(dataTypeDescriptor != null);
        }