protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The value of the field."))
     .Member("HashAlgorithm", typeof(string), T("HashAlgorithm"), T("The algorithm the field value is hashed with."))
     .Member("Salt", typeof(string), T("Salt"), T("The salt used to hash the field value."));
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="fieldIndexPart"></param>
        /// <param name="indexService"></param>
        private void DescribeValuesToindex(FieldIndexPart fieldIndexPart, Action <IndexServiceContext> indexService)
        {
            foreach (var part in fieldIndexPart.ContentItem.Parts)
            {
                foreach (var field in part.PartDefinition.Fields)
                {
                    // get all drivers for the current field type
                    // the driver will describe what values of the field should be indexed
                    var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                    ContentPart localPart = part;
                    ContentPartFieldDefinition localField = field;
                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        var fieldStorage = _fieldStorageProvider.BindStorage(localPart, localField);

                        // fieldStorage.Get<T>(storageName)
                        var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                        var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });
                        indexService(new IndexServiceContext {
                            LocalPart   = localPart,
                            LocalField  = localField,
                            StorageName = storageName,
                            FieldValue  = fieldValue,
                            StorageType = storageType
                        });
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
Пример #3
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(DateTime), T("Value"), T("The date time value of the field."))
     .Enumerate <DateTimeField>(() => field => new[] { field.DateTime })
     ;
 }
Пример #4
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(Boolean), T("Value"), T("The boolean value of the field."))
     .Enumerate <BooleanField>(() => field => new [] { field.Value })
     ;
 }
Пример #5
0
        private List <IFieldTypeEditor> GetFieldEditors(string definitionName, string propertyName)
        {
            var fieldTypeEditors = new List <IFieldTypeEditor>();
            // drivers for the ContentField
            var drivers = DriversForField(definitionName);
            // delegate that will help us figure out the tables
            var membersContext = new DescribeMembersContext(
                (storageName, storageType, displayName, description) => {
                // get the correct field type editor
                if ((storageName == null && propertyName == null) ||
                    (storageName ?? string.Empty).Equals(propertyName ?? string.Empty))
                {
                    IFieldTypeEditor fieldTypeEditor = _fieldTypeEditors
                                                       .FirstOrDefault(x => x.CanHandle(storageType));
                    if (fieldTypeEditor != null)
                    {
                        fieldTypeEditors.Add(fieldTypeEditor);
                    }
                }
            });

            foreach (var driver in drivers)
            {
                driver.Describe(membersContext);
            }
            return(fieldTypeEditors);
        }
Пример #6
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member("Text", typeof(string), T("Text"), T("The text of the link."))
     .Member(null, typeof(string), T("Url"), T("The url of the link."))
     .Enumerate <LinkField>(() => field => new[] { field.Value });
 }
Пример #7
0
        public Type GetFieldType(string fieldNameType)
        {
            var  drivers        = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == fieldNameType)).ToList();
            Type defaultType    = typeof(string);
            var  membersContext = new DescribeMembersContext(
                (storageName, storageType, displayName, description) => {
                defaultType = storageType;
            });

            foreach (var driver in drivers)
            {
                driver.Describe(membersContext);
            }
            return(defaultType);
        }
Пример #8
0
        public void Describe(DescribeFilterContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListPartDefinitions())
            {
                if (!part.Fields.Any())
                {
                    continue;
                }

                var descriptor = describe.For(part.Name + "ContentFields", T("{0} Content Fields", part.Name.CamelFriendly()), T("Content Fields for {0}", part.Name.CamelFriendly()));

                foreach (var field in part.Fields)
                {
                    var localField = field;
                    var localPart  = part;
                    var drivers    = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == localField.FieldDefinition.Name)).ToList();

                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        // look for a compatible field type editor
                        IConcreteFieldTypeEditor concreteFieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(localField.FieldDefinition.Name, storageType))
                                                                           ?? _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));
                        IFieldTypeEditor fieldTypeEditor = concreteFieldTypeEditor;

                        if (fieldTypeEditor == null)
                        {
                            return;
                        }

                        descriptor.Element(
                            type: localPart.Name + "." + localField.Name + "." + storageName,
                            name: new LocalizedString(localField.DisplayName + (displayName != null ? ":" + displayName.Text : "")),
                            description: description ?? T("{0} property for {1}", storageName, localField.DisplayName),
                            filter: context => concreteFieldTypeEditor.ApplyFilter(context, storageName, storageType, localPart, localField),
                            display: context => fieldTypeEditor.DisplayFilter(localPart.Name.CamelFriendly() + "." + localField.DisplayName, storageName, context.State),
                            form: fieldTypeEditor.FormName);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), null, null)
     .Member("alpha", typeof(string), null, null)
     .Member("string", typeof(string), null, null)
     .Member("int1", typeof(int), null, null)
     .Member("int2", typeof(int), null, null)
     .Member("long1", typeof(long), null, null)
     .Member("long2", typeof(long), null, null)
     .Member("datetime", typeof(DateTime), null, null)
     .Member("bool1", typeof(bool), null, null)
     .Member("bool2", typeof(bool), null, null)
     .Member("decimal1", typeof(decimal), null, null)
     .Member("decimal2", typeof(decimal), null, null)
     .Member("double1", typeof(double), null, null)
     .Member("double2", typeof(double), null, null);
 }
Пример #10
0
        public void Describe(DescribeFilterContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListPartDefinitions())
            {
                if (!part.Fields.Any())
                {
                    continue;
                }

                var descriptor = describe.For(part.Name + "ContentFieldsNullSafe", T("{0} Content Fields (null-safe)", part.Name.CamelFriendly()), T("Content Fields for {0} (null-safe).", part.Name.CamelFriendly()));

                foreach (var field in part.Fields)
                {
                    var localField = field;
                    var localPart  = part;
                    var drivers    = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == localField.FieldDefinition.Name)).ToList();

                    var membersContext = new DescribeMembersContext((storageName, storageType, displayName, description) =>
                    {
                        // Look for a compatible field type editor.
                        IFieldTypeEditor fieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));

                        if (fieldTypeEditor == null)
                        {
                            return;
                        }

                        descriptor.Element(
                            type: localPart.Name + "." + localField.Name + "." + storageName,
                            name: new LocalizedString(localField.DisplayName + (displayName != null ? ":" + displayName.Text : "") + " (null-safe)"),
                            description: new LocalizedString(description != null ? description + " (null-safe)" : "No filter will be applied if the filter value is empty, so items indexed as null in the database won't be excluded from the result."),
                            filter: context => ApplyFilter(context, fieldTypeEditor, storageName, storageType, localPart, localField),
                            display: context => fieldTypeEditor.DisplayFilter(localPart.Name + "." + localField.DisplayName, storageName, context.State),
                            form: fieldTypeEditor.FormName);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
Пример #11
0
        public void Publishing(PublishContentContext context, FieldIndexPart fieldIndexPart)
        {
            foreach (var part in fieldIndexPart.ContentItem.Parts)
            {
                foreach (var field in part.PartDefinition.Fields)
                {
                    // get the correct field storage provider
                    var fieldStorageProvider = _fieldStorageProviderSelector.GetProvider(field);

                    // get all drivers for the current field type
                    // the driver will describe what values of the field should be indexed
                    var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                    ContentPart localPart = part;
                    ContentPartFieldDefinition localField = field;
                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) => {
                        var fieldStorage = fieldStorageProvider.BindStorage(localPart, localField);

                        // fieldStorage.Get<T>(storageName)
                        var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                        var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });

                        _fieldIndexService.Set(fieldIndexPart,
                                               localPart.PartDefinition.Name,
                                               localField.Name,
                                               storageName, fieldValue, storageType);
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 protected virtual void Describe(DescribeMembersContext context)
 {
 }
 void IContentFieldDriver.Describe(DescribeMembersContext context)
 {
     Describe(context);
 }
Пример #14
0
 protected override void Describe(DescribeMembersContext context)
 {
     context.Member(null, typeof(decimal), T("Value"), T("The value of the field."));
 }
Пример #15
0
 protected override void Describe(DescribeMembersContext context)
 {
     context.Member("Amount", typeof(decimal?), T("Amount"), T("The amount of the money."))
     .Member("Currency", typeof(string), T("Currency"), T("The currency of the money."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Items"), T("A Json serialized list of the media."));
 }
Пример #17
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The value of the field."))
     .Enumerate <InputField>(() => field => new[] { field.Value });
 }
Пример #18
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(DateTime), T("Value"), T("The date time value of the field."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The Hex value string associated with the color (eg. #ff0000)."));
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The string associated with the field."))
     .Enumerate <HiddenStringField>(() => field => new[] { field.Value });
 }
Пример #21
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Url"), T("The url of the media."));
 }
Пример #22
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member("Text", typeof(string), T("Text"), T("The text of the link."))
     .Member(null, typeof(string), T("Url"), T("The url of the link."));
 }
Пример #23
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("值"), T("此字段值."))
     .Enumerate <TextBoxField>(() => field => new[] { field.Value });
 }
        public void Describe(DescribeGroupByContext describe)
        {
            foreach (var part in _contentDefinitionManager.ListPartDefinitions())
            {
                if (!part.Fields.Any())
                {
                    continue;
                }

                var descriptor = describe.For(part.Name + "ContentFields", T("{0} Content Fields", part.Name.CamelFriendly()), T("Content Fields for {0}", part.Name.CamelFriendly()));

                foreach (var field in part.Fields)
                {
                    var localField = field;
                    var localPart  = part;
                    var drivers    = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == localField.FieldDefinition.Name)).ToList();

                    var membersContext = new DescribeMembersContext(
                        (storageName, storageType, displayName, description) =>
                    {
                        // look for a compatible field type editor
                        IFieldTypeEditor fieldTypeEditor = _fieldTypeEditors.FirstOrDefault(x => x.CanHandle(storageType));

                        if (fieldTypeEditor == null)
                        {
                            return;
                        }

                        if (localField.FieldDefinition.Name == "NumericField")
                        {
                            this.DescribeNumericFieldMemberContext(
                                localField: localField,
                                description: description,
                                storageName: storageName,
                                descriptor: descriptor,
                                displayName: displayName,
                                fieldTypeEditor: fieldTypeEditor,
                                localPart: localPart);
                        }
                        else if (localField.FieldDefinition.Name == "EnumerationField")
                        {
                            //field.FieldDefinition.Name
                            List <AggregateMethods> methods = new List <AggregateMethods>();
                            methods.Add(AggregateMethods.Count);

                            descriptor.Element(
                                type: localPart.Name + "." + localField.Name + "." + storageName,
                                name: T(localField.DisplayName),
                                description: T("group the result by {0} values", localField.DisplayName),
                                run: (query, method) => this.fieldAggregateQueryService.RunEnumerationAggregation(query, method, localField.Name, localPart.Name),
                                aggregateMethods: methods,
                                display: context => fieldTypeEditor.DisplayFilter(localPart.Name.CamelFriendly() + "." + localField.DisplayName, storageName, context.State));
                        }
                    });

                    foreach (var driver in drivers)
                    {
                        driver.Describe(membersContext);
                    }
                }
            }
        }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Value"), T("The selected values of the field."))
     .Enumerate <EnumerationField>(() => field => field.SelectedValues);
 }
Пример #26
0
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("HTML"), T("The HTML value of the field."))
     .Enumerate <HtmlBlockField>(() => field => new[] { RemoveTagsRegex.Replace(field.HTML, " ") });
 }
 protected override void Describe(DescribeMembersContext context)
 {
     context
     .Member(null, typeof(string), T("Ids"), T("A formatted list of the ids, e.g., {1},{42}"));
 }
Пример #28
0
 protected override void Describe(DescribeMembersContext context)
 {
     // A field can have multiple values stored. If there are multiple values you should add them in such a form
     // here.
     context.Member("VideoId", typeof(string), T("Video ID"), T("The ID of the video."));
 }
Пример #29
0
 protected override void Describe(DescribeMembersContext context)
 {
     context.Member(null, typeof(string), null, T("The value of the field."));
 }
        public InfosetFieldIndexingHandler(
            IEnumerable <IContentFieldDriver> contentFieldDrivers,
            IFieldStorageProvider fieldStorageProvider)
        {
            _contentFieldDrivers  = contentFieldDrivers;
            _fieldStorageProvider = fieldStorageProvider;

            OnIndexing <InfosetPart>(
                (context, cp) => {
                var infosetPart = context.ContentItem.As <InfosetPart>();
                if (infosetPart == null)
                {
                    return;
                }


                // part fields
                foreach (var part in infosetPart.ContentItem.Parts)
                {
                    foreach (var field in part.PartDefinition.Fields)
                    {
                        if (!field.Settings.GetModel <FieldIndexing>().Included)
                        {
                            continue;
                        }

                        // get all drivers for the current field type
                        // the driver will describe what values of the field should be indexed
                        var drivers = _contentFieldDrivers.Where(x => x.GetFieldInfo().Any(fi => fi.FieldTypeName == field.FieldDefinition.Name)).ToList();

                        ContentPart localPart = part;
                        ContentPartFieldDefinition localField = field;
                        var membersContext = new DescribeMembersContext(
                            (storageName, storageType, displayName, description) =>
                        {
                            var fieldStorage = _fieldStorageProvider.BindStorage(localPart, localField);

                            // fieldStorage.Get<T>(storageName)
                            var getter     = typeof(IFieldStorage).GetMethod("Get").MakeGenericMethod(storageType);
                            var fieldValue = getter.Invoke(fieldStorage, new[] { storageName });
                            var indexName  = String.Format("{0}-{1}", infosetPart.TypeDefinition.Name.ToLower(), field.Name.ToLower());

                            TypeCode typeCode = Type.GetTypeCode(storageType);
                            switch (typeCode)
                            {
                            case TypeCode.Empty:
                            case TypeCode.Object:
                            case TypeCode.DBNull:
                            case TypeCode.String:
                            case TypeCode.Char:
                                context.DocumentIndex.Add(indexName, fieldValue.ToString()).RemoveTags().Analyze();
                                break;

                            case TypeCode.Boolean:
                                context.DocumentIndex.Add(indexName, Convert.ToBoolean(fieldValue));
                                break;

                            case TypeCode.SByte:
                            case TypeCode.Int16:
                            case TypeCode.UInt16:
                            case TypeCode.Int32:
                            case TypeCode.UInt32:
                            case TypeCode.Int64:
                            case TypeCode.UInt64:
                                context.DocumentIndex.Add(indexName, Convert.ToInt32(fieldValue));
                                break;

                            case TypeCode.Single:
                            case TypeCode.Double:
                            case TypeCode.Decimal:
                                context.DocumentIndex.Add(indexName, Convert.ToDouble(fieldValue));
                                break;

                            case TypeCode.DateTime:
                                context.DocumentIndex.Add(indexName, Convert.ToDateTime(fieldValue));
                                break;
                            }
                        });

                        foreach (var driver in drivers)
                        {
                            driver.Describe(membersContext);
                        }
                    }
                }
            });
        }