public CodeTranslator(IMetadataGenerator metadataGenerator, IOutputTypeMetadataGenerator outputTypeMetadataGenerator, ICodeGenerator codeGenerator, ITypePartsCodeGenerator typePartsCodeGenerator)
 {
     _metadataGenerator           = metadataGenerator;
     _outputTypeMetadataGenerator = outputTypeMetadataGenerator;
     _codeGenerator          = codeGenerator;
     _typePartsCodeGenerator = typePartsCodeGenerator;
 }
Ejemplo n.º 2
0
 public JobCandidatesController(IRepository <JobCandidateModel> repository, IMetadataGenerator metadataGenerator) : base(metadataGenerator)
 {
     this.repository = repository;
 }
            public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
            {
                var data = "description='Honda motors'".AsLaconicConfig();

                dataRoot.MergeAttributes(data);
                dataRoot.MergeSections(data);
                return(dataRoot);
            }
Ejemplo n.º 4
0
 public ShiftsController(IRepository <ShiftModel> repository, IMetadataGenerator metadataGenerator) : base(metadataGenerator)
 {
     this.repository = repository;
 }
Ejemplo n.º 5
0
        public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
        {
            var schema = instance as Schema;//is a sealed class by design

            if (schema == null)
            {
                return(null);
            }

            var ndoc = dataRoot.AddChildNode("schema");

            if (context.DetailLevel > MetadataDetailLevel.Public)
            {
                ndoc.AddAttributeNode("name", schema.Name);
            }
            else
            {
                ndoc.AddAttributeNode("name", schema.TypedDocType?.Name ?? schema.Name);
            }

            ndoc.AddAttributeNode("read-only", schema.ReadOnly);

            TypedDoc doc = null;

            if (schema.TypedDocType != null)
            {
                ndoc.AddAttributeNode("typed-doc-type", context.AddTypeToDescribe(schema.TypedDocType));

                if (!schema.TypedDocType.IsAbstract)
                {
                    try
                    { //this may fail because there may be constructor incompatibility, then we just can get instance-specific metadata
                        doc = Activator.CreateInstance(schema.TypedDocType, true) as TypedDoc;
                        context.App.InjectInto(doc);
                    }
                    catch { }
                }
            }

            foreach (var def in schema)
            {
                var nfld = ndoc.AddChildNode("field");
                try
                {
                    var targetName = context.GetSchemaDataTargetName(schema, doc);
                    field(targetName, def, context, nfld, doc);
                }
                catch (Exception error)
                {
                    var err = new CustomMetadataException(StringConsts.METADATA_GENERATION_SCHEMA_FIELD_ERROR.Args(schema.Name, def.Name, error.ToMessageWithType()), error);
                    nfld.AddAttributeNode("--ERROR--", StringConsts.METADATA_GENERATION_SCHEMA_FIELD_ERROR.Args(schema.Name, def.Name, "<logged>"));
                    context.ReportError(Log.MessageType.CriticalAlert, err);
                }
            }

            return(ndoc);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Called by various metadata consumers to get additional metadata about the decorated type
 /// </summary>
 /// <param name="member">A member (e.g. a type or a method) which is being described</param>
 /// <param name="instance">
 /// Optional instance of Type when member represents a type, this way the metadata may depend on instance,
 /// e.g. when generating permissions the instance contains the required access level
 /// </param>
 /// <param name="context">IMetadataGenerator context in which the metadata acquisition takes place</param>
 /// <param name="dataRoot">Root data node under which THIS entity is supposed to create its sub-node to provide its metadata into</param>
 /// <param name="overrideRules">Config node override rules to use for structured merging, or null to use the defaults</param>
 /// <returns>A new data node that this provider has written into, such as a new node which is a child of dataRoot</returns>
 public abstract ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null);
Ejemplo n.º 7
0
        public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
        {
            if (instance is ReleaseAttribute release)
            {
                var node = dataRoot.AddChildNode("release");
                node.AddAttributeNode("type", release.Type);
                node.AddAttributeNode("utc", release.ReleaseTimestampUtc);
                node.AddAttributeNode("title", release.Title);

                if (release.Tags.IsNotNullOrWhiteSpace())
                {
                    node.AddAttributeNode("tags", release.Tags);
                }

                if (release.Description.IsNotNullOrWhiteSpace())
                {
                    node.AddAttributeNode("descr", release.Description);
                }

                if (context.DetailLevel > MetadataDetailLevel.Public)
                {
                    if (release.Metadata.IsNotNullOrWhiteSpace())
                    {
                        node.AddAttributeNode("meta", release.Metadata);
                    }
                }
            }

            return(dataRoot);
        }
Ejemplo n.º 8
0
 public EmployeesController(IRepository <EmployeeModel> repository, IMetadataGenerator metadataGenerator) : base(metadataGenerator)
 {
     this.repository = repository;
 }
 public OrderController(IRepository <OrderModel> repository, IMetadataGenerator metadataGenerator) : base(metadataGenerator)
 {
     this.repository = repository;
 }
Ejemplo n.º 10
0
        private void field(Schema.FieldDef def, IMetadataGenerator context, ConfigSectionNode data, TypedDoc doc)
        {
            var fname = def.GetBackendNameForTarget(context.DataTargetName, out var fatr);

            if (fatr == null)
            {
                return;
            }

            if (context.DetailLevel > MetadataDetailLevel.Public)
            {
                data.AddAttributeNode("prop-name", def.Name);
                data.AddAttributeNode("prop-type", def.Type.AssemblyQualifiedName);
                data.AddAttributeNode("non-ui", fatr.NonUI);
                data.AddAttributeNode("is-arow", fatr.IsArow);
                data.AddAttributeNode("store-flag", fatr.StoreFlag);
                data.AddAttributeNode("backend-type", fatr.BackendType);
                if (fatr.Metadata != null)
                {
                    data.AddChildNode(fatr.Metadata);
                }
            }

            data.AddAttributeNode("name", fname);
            data.AddAttributeNode("type", context.AddTypeToDescribe(def.Type));
            data.AddAttributeNode("order", def.Order);

            if (fatr.Description.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("description", fatr.Description);
            }
            data.AddAttributeNode("key", fatr.Key);

            if (def.Type == typeof(string))
            {
                data.AddAttributeNode("kind", fatr.Kind);
            }

            data.AddAttributeNode("required", fatr.Required);
            data.AddAttributeNode("visible", fatr.Required);
            data.AddAttributeNode("case", fatr.CharCase);
            if (fatr.Default != null)
            {
                data.AddAttributeNode("default", fatr.Default);
            }
            if (fatr.DisplayFormat.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("display-format", fatr.DisplayFormat);
            }
            if (fatr.FormatRegExp.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("format-reg-exp", fatr.FormatRegExp);
            }
            if (fatr.FormatDescription.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("format-description", fatr.FormatDescription);
            }
            if (fatr.Max != null)
            {
                data.AddAttributeNode("max", fatr.Max);
            }
            if (fatr.Min != null)
            {
                data.AddAttributeNode("min", fatr.Min);
            }
            if (fatr.MinLength > 0 || fatr.MaxLength > 0)
            {
                data.AddAttributeNode("min-len", fatr.MinLength);
            }
            if (fatr.MinLength > 0 || fatr.MaxLength > 0)
            {
                data.AddAttributeNode("max-len", fatr.MaxLength);
            }

            //add values from field attribute .ValueList property
            var nvlist = new Lazy <ConfigSectionNode>(() => data.AddChildNode("value-list"));

            if (fatr.HasValueList)
            {
                fatr.ParseValueList().ForEach(item => nvlist.Value.AddAttributeNode(item.Key, item.Value));
            }

            //if doc!=null call doc.GetClientFieldValueList on the instance to get values from Database lookups etc...
            if (doc != null)
            {
                var lookup = doc.GetClientFieldValueList(def, context.DataTargetName, null);
                if (lookup != null)
                {
                    lookup.ForEach(item => nvlist.Value.AddAttributeNode(item.Key, item.Value));
                }
            }
        }
Ejemplo n.º 11
0
 public override ConfigSectionNode ProvideInstanceMetadata(IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
 {
     dataRoot.AddAttributeNode("max-content-length", MaxContentLength);
     return(dataRoot);
 }
Ejemplo n.º 12
0
 public override bool ShouldProvideInstanceMetadata(IMetadataGenerator context, ConfigSectionNode dataRoot)
 => MaxContentLength > 0;
Ejemplo n.º 13
0
 public virtual ConfigSectionNode ProvideInstanceMetadata(IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
 => dataRoot;
Ejemplo n.º 14
0
 public virtual bool ShouldProvideInstanceMetadata(IMetadataGenerator context, ConfigSectionNode dataRoot)
 => false;
 public DepartmentsController(IRepository <DepartmentModel> repository, IMetadataGenerator metadataGenerator) : base(metadataGenerator)
 {
     this.repository = repository;
 }
Ejemplo n.º 16
0
        public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
        {
            var tdoc = member.NonNull(nameof(member)) as Type;

            if (tdoc == null || !typeof(Doc).IsAssignableFrom(tdoc))
            {
                return(null);
            }

            var typed = tdoc.IsSubclassOf(typeof(TypedDoc));

            var    ndoc = dataRoot.AddChildNode("data-doc");
            Schema schema;

            if (instance is Doc doc)
            {
                schema = doc.Schema;
            }
            else if (typed)
            {
                schema = Schema.GetForTypedDoc(tdoc);
            }
            else
            {
                schema = null;
            }

            MetadataUtils.AddMetadataTokenIdAttribute(ndoc, tdoc);
            ndoc.AddAttributeNode("kind", typed ? "typed" : "dynamic");

            CustomMetadataAttribute.Apply(typeof(Schema), schema, context, ndoc, overrideRules);

            return(ndoc);
        }
            public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
            {
                var data = "a=123 b=789 score=100 description='Generic car' origin{_override=all country=world} z=0".AsLaconicConfig();

                dataRoot.MergeAttributes(data);
                dataRoot.MergeSections(data);
                return(dataRoot);
            }
Ejemplo n.º 18
0
        public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
        {
            if (member is Type tController && instance is ApiDocGenerator.ControllerContext apictx)
            {
                var apiAttr = tController.GetCustomAttribute <ApiControllerDocAttribute>();
                if (apiAttr != null)
                {
                    return(describe(tController, instance, apictx, dataRoot, overrideRules));
                }
            }

            return(null);
        }
            public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
            {
                var data = "score=90 description='Very usable and decent quality' a=-900".AsLaconicConfig();

                dataRoot.MergeAttributes(data);
                dataRoot.MergeSections(data);
                return(dataRoot);
            }
Ejemplo n.º 20
0
        public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
        {
            var tperm = member.NonNull(nameof(member)) as Type;

            if (tperm == null || !typeof(Permission).IsAssignableFrom(tperm))
            {
                return(null);
            }

            var node = dataRoot.AddChildNode("permission");

            MetadataUtils.AddMetadataTokenIdAttribute(node, tperm);
            if (instance is Permission perm)
            {
                node.AddAttributeNode("name", perm.Name);
                node.AddAttributeNode("path", perm.Path);
                node.AddAttributeNode("description", perm.Description);
                node.AddAttributeNode("level", perm.Level);
            }
            else
            {
                node.AddAttributeNode("name", tperm.Name.Replace("Permission", string.Empty));
                node.AddAttributeNode("ns", tperm.Namespace);
            }
            return(dataRoot);
        }
            public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
            {
                var data = "score=40 description='Luxury item, but unreliable'  origin{country=XYZYZ/*this will never take effect*/}".AsLaconicConfig();

                dataRoot.MergeAttributes(data);
                dataRoot.MergeSections(data);
                return(dataRoot);
            }
Ejemplo n.º 22
0
 public ProductController(IRepository <ProductModel> repository, IMetadataGenerator metadataGenerator) : base(metadataGenerator)
 {
     this.repository = repository;
 }
            public override ConfigSectionNode ProvideMetadata(MemberInfo member, object instance, IMetadataGenerator context, ConfigSectionNode dataRoot, NodeOverrideRules overrideRules = null)
            {
                var data = "score=110 description='Cars built in Japan' origin{_override=stop country=jap} z=1".AsLaconicConfig();

                dataRoot.MergeAttributes(data);
                dataRoot.MergeSections(data);
                return(dataRoot);
            }
Ejemplo n.º 24
0
        private void field(string targetName, Schema.FieldDef def, IMetadataGenerator context, ConfigSectionNode data, TypedDoc doc)
        {
            var fname = def.GetBackendNameForTarget(targetName, out var fatr);

            if (fatr == null)
            {
                return;
            }

            if (context.DetailLevel > MetadataDetailLevel.Public)
            {
                data.AddAttributeNode("prop-name", def.Name);
                data.AddAttributeNode("prop-type", def.Type.AssemblyQualifiedName);
                data.AddAttributeNode("non-ui", fatr.NonUI);
                data.AddAttributeNode("is-arow", fatr.IsArow);
                data.AddAttributeNode("store-flag", fatr.StoreFlag);
                data.AddAttributeNode("backend-type", fatr.BackendType);

                //try to disclose ALL metadata (as we are above PUBLIC)
                if (fatr.Metadata != null && fatr.Metadata.Exists)
                {
                    var metad = data.AddChildNode("meta");
                    metad.MergeSections(fatr.Metadata);
                    metad.MergeAttributes(fatr.Metadata);
                }
            }
            else //try to disclose pub-only metadata
            {
                var pubSection = context.PublicMetadataSection;
                if (fatr.Metadata != null && pubSection.IsNotNullOrWhiteSpace())
                {
                    var metasrc = fatr.Metadata[pubSection];//<-- pub metadata only
                    if (metasrc.Exists)
                    {
                        var metad = data.AddChildNode("meta");
                        metad.MergeSections(metasrc);
                        metad.MergeAttributes(metasrc);
                    }
                }
            }

            data.AddAttributeNode("name", fname);
            data.AddAttributeNode("type", context.AddTypeToDescribe(def.Type));
            data.AddAttributeNode("order", def.Order);

            if (fatr.Description.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("description", fatr.Description);
            }
            data.AddAttributeNode("key", fatr.Key);

            data.AddAttributeNode("kind", fatr.Kind);

            data.AddAttributeNode("required", fatr.Required);
            data.AddAttributeNode("visible", fatr.Required);
            data.AddAttributeNode("case", fatr.CharCase);
            if (fatr.Default != null)
            {
                data.AddAttributeNode("default", fatr.Default);
            }
            if (fatr.DisplayFormat.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("display-format", fatr.DisplayFormat);
            }
            if (fatr.FormatRegExp.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("format-reg-exp", fatr.FormatRegExp);
            }
            if (fatr.FormatDescription.IsNotNullOrWhiteSpace())
            {
                data.AddAttributeNode("format-description", fatr.FormatDescription);
            }
            if (fatr.Max != null)
            {
                data.AddAttributeNode("max", fatr.Max);
            }
            if (fatr.Min != null)
            {
                data.AddAttributeNode("min", fatr.Min);
            }
            if (fatr.MinLength > 0 || fatr.MaxLength > 0)
            {
                data.AddAttributeNode("min-len", fatr.MinLength);
            }
            if (fatr.MinLength > 0 || fatr.MaxLength > 0)
            {
                data.AddAttributeNode("max-len", fatr.MaxLength);
            }

            //add values from field attribute .ValueList property
            var nvlist = new Lazy <ConfigSectionNode>(() => data.AddChildNode("value-list"));

            if (fatr.HasValueList)
            {
                fatr.ParseValueList().ForEach(item => nvlist.Value.AddAttributeNode(item.Key, item.Value));
            }

            //if doc!=null call doc.GetClientFieldValueList on the instance to get values from Database lookups etc...
            if (doc != null)
            {
                var lookup = doc.GetDynamicFieldValueList(def, targetName, null);
                if (lookup != null)//non-null blank lookup is treated as blank lookup overshadowing the hard-coded choices from .ValueList
                {
                    if (nvlist.IsValueCreated)
                    {
                        nvlist.Value.DeleteAllAttributes();
                    }

                    lookup.ForEach(item => nvlist.Value.AddAttributeNode(item.Key, item.Value));
                }
            }
        }
Ejemplo n.º 25
0
 public AdventureWorksBaseController(IMetadataGenerator metadataGenerator)
 {
     this.metadataGenerator = metadataGenerator;
 }