Exemplo n.º 1
0
        public static ISchemaBuilderStep <T, TProviderFilter> Define <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            string propertyAlias,
            string typeAlias,
            string groupAlias,
            string groupName = null)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            // Try to get the group from the existing builder's schema
            AttributeGroup group = null;

            if (builder.Item != null)
            {
                group = builder.Item.AttributeGroups.FirstOrDefault(x => x.Alias == groupAlias);
                if (group == null)
                {
                    // See if it's a composite schema and try to get an inherited group
                    var composite = builder.Item as CompositeEntitySchema;
                    if (composite != null)
                    {
                        group = composite.InheritedAttributeGroups.FirstOrDefault(x => x.Alias == groupAlias);
                    }
                }
            }
            if (group == null)
            {
                // Create a group
                groupName = groupName ?? groupAlias;
                group     = new AttributeGroup(groupAlias, groupName, 0);
            }

            return(Define(builder, propertyAlias, type => type.UseExistingType(typeAlias), group));
        }
Exemplo n.º 2
0
 public static ISchemaBuilderStep <T, TProviderFilter> IsOnlyInheritable <T, TProviderFilter>(
     this ISchemaBuilderStep <T, TProviderFilter> builder)
     where TProviderFilter : class, IProviderTypeFilter
     where T : EntitySchema, new()
 {
     return(builder.SetCustom(x => x.IsAbstract = true));
 }
Exemplo n.º 3
0
 public static ISchemaBuilderStep <T, TProviderFilter> Define <T, TProviderFilter>(
     this ISchemaBuilderStep <T, TProviderFilter> builder,
     string propertyAlias,
     string typeAlias,
     AttributeGroup group)
     where TProviderFilter : class, IProviderTypeFilter
     where T : EntitySchema, new()
 {
     return(Define(builder, propertyAlias, type => type.UseExistingType(typeAlias), group));
 }
Exemplo n.º 4
0
        public static ISchemaBuilderStep <T, TProviderFilter> Define <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            string propertyAlias,
            Func <IEntityBuilderStep <AttributeType, TProviderFilter>, ISchemaBuilderStep <AttributeType, TProviderFilter> > typeBuilder,
            AttributeGroup group)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            var type = typeBuilder.Invoke(new EntityBuilderStarter <AttributeType, TProviderFilter>(builder.HiveManager));

            return(Define(builder, propertyAlias, type.Item, group));
        }
Exemplo n.º 5
0
        public static ISchemaBuilderStep <T, TProviderFilter> SetCustom <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            Action <T> customModifier)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            Mandate.ParameterNotNull(builder, "builder");

            customModifier.Invoke(builder.Item);

            return(builder);
        }
Exemplo n.º 6
0
        public static ISchemaBuilderStep <T, TProviderFilter> SaveTo <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            IGroupUnit <TProviderFilter> writer)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            Mandate.ParameterNotNull(builder, "builder");
            Mandate.ParameterNotNull(writer, "writer");
            Mandate.ParameterCondition(!writer.WasAbandoned, "writer.WasAbandoned");

            writer.Repositories.Schemas.AddOrUpdate(builder.Item);

            return(builder);
        }
Exemplo n.º 7
0
        public static ISchemaBuilderStep <T, TProviderFilter> InheritFrom <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            ISchemaBuilderStep <T, TProviderFilter> otherSchemaBuilder)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            Mandate.ParameterNotNull(builder, "builder");
            Mandate.ParameterNotNull(otherSchemaBuilder, "otherSchemaBuilder");
            Mandate.ParameterNotNull(otherSchemaBuilder.Item, "otherSchemaBuilder.Item");

            // Add a relation between the parent and the schema we're building
            builder.Item.RelationProxies.EnlistParent(otherSchemaBuilder.Item, FixedRelationTypes.DefaultRelationType);

            return(builder);
        }
Exemplo n.º 8
0
        public static ISchemaBuilderStep <T, TProviderFilter> Define <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            string propertyAlias,
            AttributeType type,
            AttributeGroup group)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            var def = new AttributeDefinition(propertyAlias, propertyAlias)
            {
                AttributeType = type, AttributeGroup = @group
            };

            builder.Item.AttributeDefinitions.Add(def);
            return(builder);
        }
Exemplo n.º 9
0
 public static ISchemaSaveResult <T> Commit <T, TProviderFilter>(this ISchemaBuilderStep <T, TProviderFilter> modelBuilder)
     where TProviderFilter : class, IProviderTypeFilter
     where T : AbstractSchemaPart, new()
 {
     using (var unit = modelBuilder.HiveManager.OpenWriter <TProviderFilter>())
     {
         var item = modelBuilder.Item;
         try
         {
             unit.Repositories.Schemas.AddOrUpdate(item);
             unit.Complete();
             return(new SchemaSaveResult <T>(true, item));
         }
         catch (Exception ex)
         {
             unit.Abandon();
             return(new SchemaSaveResult <T>(false, item, ex));
         }
     }
 }
Exemplo n.º 10
0
        public static ISchemaBuilderStep <T, TProviderFilter> InheritFrom <T, TProviderFilter>(
            this ISchemaBuilderStep <T, TProviderFilter> builder,
            string schemaAlias)
            where TProviderFilter : class, IProviderTypeFilter
            where T : EntitySchema, new()
        {
            Mandate.ParameterNotNull(builder, "builder");
            Mandate.ParameterNotNullOrEmpty(schemaAlias, "schemaAlias");

            // Find the schema with the relevant alias
            var parent = builder.HiveManager.GetSchemaByAlias <TProviderFilter>(schemaAlias);

            if (parent == null)
            {
                throw new ArgumentOutOfRangeException("An existing schema cannot be found with the alias '{0}'".InvariantFormat(schemaAlias));
            }

            // Add a relation between the parent and the schema we're building
            builder.Item.RelationProxies.EnlistParent(parent, FixedRelationTypes.DefaultRelationType);

            return(builder);
        }