mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Lombiq Technologies: ORCH-199
This commit is contained in:
committed by
Benedek Farkas
parent
b07a9ee5bb
commit
ce63f47dc4
@@ -17,13 +17,11 @@ namespace Orchard.Projections.Handlers {
|
||||
private readonly IFieldIndexService _fieldIndexService;
|
||||
private readonly IFieldStorageProvider _fieldStorageProvider;
|
||||
private readonly IEnumerable<IContentFieldDriver> _contentFieldDrivers;
|
||||
private readonly IDraftFieldIndexService _draftFieldIndexService;
|
||||
|
||||
public FieldIndexPartHandler(
|
||||
IContentDefinitionManager contentDefinitionManager,
|
||||
IRepository<FieldIndexPartRecord> repository,
|
||||
IFieldIndexService fieldIndexService,
|
||||
IDraftFieldIndexService draftFieldIndexService,
|
||||
IFieldStorageProvider fieldStorageProvider,
|
||||
IEnumerable<IContentFieldDriver> contentFieldDrivers) {
|
||||
Filters.Add(StorageFilter.For(repository));
|
||||
@@ -31,7 +29,6 @@ namespace Orchard.Projections.Handlers {
|
||||
_fieldIndexService = fieldIndexService;
|
||||
_fieldStorageProvider = fieldStorageProvider;
|
||||
_contentFieldDrivers = contentFieldDrivers;
|
||||
_draftFieldIndexService = draftFieldIndexService;
|
||||
OnUpdated<FieldIndexPart>(Updated);
|
||||
OnPublishing<FieldIndexPart>(Publishing);
|
||||
}
|
||||
@@ -49,22 +46,25 @@ namespace Orchard.Projections.Handlers {
|
||||
}
|
||||
private void Updated(UpdateContentContext context, FieldIndexPart fieldIndexPart) {
|
||||
if (context.UpdatingItemVersionRecord.Latest) { // updates projection draft indexes only if it is the latest version
|
||||
DescribeValuesToindex(fieldIndexPart, (indexServiceContext) => {
|
||||
_draftFieldIndexService.Set(fieldIndexPart,
|
||||
indexServiceContext.LocalPart.PartDefinition.Name,
|
||||
indexServiceContext.LocalField.Name,
|
||||
indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType);
|
||||
DescribeValuesToIndex(fieldIndexPart, (indexServiceContext) => {
|
||||
_fieldIndexService.Set(
|
||||
fieldIndexPart,
|
||||
indexServiceContext.LocalPart.PartDefinition.Name,
|
||||
indexServiceContext.LocalField.Name,
|
||||
indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType,
|
||||
FieldIndexRecordVersionOptions.LatestValue);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Publishing(PublishContentContext context, FieldIndexPart fieldIndexPart) {
|
||||
DescribeValuesToindex(fieldIndexPart, (indexServiceContext) => {
|
||||
_fieldIndexService.Set(fieldIndexPart,
|
||||
indexServiceContext.LocalPart.PartDefinition.Name,
|
||||
indexServiceContext.LocalField.Name,
|
||||
indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType);
|
||||
DescribeValuesToIndex(fieldIndexPart, (indexServiceContext) => {
|
||||
_fieldIndexService.Set(
|
||||
fieldIndexPart,
|
||||
indexServiceContext.LocalPart.PartDefinition.Name,
|
||||
indexServiceContext.LocalField.Name,
|
||||
indexServiceContext.StorageName, indexServiceContext.FieldValue, indexServiceContext.StorageType);
|
||||
|
||||
});
|
||||
}
|
||||
@@ -73,7 +73,7 @@ namespace Orchard.Projections.Handlers {
|
||||
/// </summary>
|
||||
/// <param name="fieldIndexPart"></param>
|
||||
/// <param name="indexService"></param>
|
||||
private void DescribeValuesToindex(FieldIndexPart fieldIndexPart, Action<IndexServiceContext> indexService) {
|
||||
private void DescribeValuesToIndex(FieldIndexPart fieldIndexPart, Action<IndexServiceContext> indexService) {
|
||||
foreach (var part in fieldIndexPart.ContentItem.Parts) {
|
||||
foreach (var field in part.PartDefinition.Fields) {
|
||||
|
||||
@@ -95,7 +95,8 @@ namespace Orchard.Projections.Handlers {
|
||||
LocalField = localField,
|
||||
StorageName = storageName,
|
||||
FieldValue = fieldValue,
|
||||
StorageType = storageType });
|
||||
StorageType = storageType
|
||||
});
|
||||
});
|
||||
|
||||
foreach (var driver in drivers) {
|
||||
|
||||
@@ -189,8 +189,6 @@
|
||||
<Compile Include="Providers\Properties\CustomValueProperties.cs" />
|
||||
<Compile Include="Navigation\NavigationQueryProvider.cs" />
|
||||
<Compile Include="Models\QueryVersionScopeOptions.cs" />
|
||||
<Compile Include="Services\DraftFieldIndexService.cs" />
|
||||
<Compile Include="Services\IDraftFieldIndexService.cs" />
|
||||
<Compile Include="Shapes.cs" />
|
||||
<Compile Include="Descriptors\Layout\LayoutComponentResult.cs" />
|
||||
<Compile Include="Descriptors\Layout\LayoutContext.cs" />
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Orchard.Projections.Models;
|
||||
|
||||
namespace Orchard.Projections.Services {
|
||||
public class DraftFieldIndexService : IDraftFieldIndexService {
|
||||
|
||||
public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType) {
|
||||
var propertyName = String.Join(".", partName, fieldName, valueName ?? "");
|
||||
|
||||
var typeCode = Type.GetTypeCode(valueType);
|
||||
|
||||
if(valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>)) {
|
||||
typeCode = Type.GetTypeCode(Nullable.GetUnderlyingType(valueType));
|
||||
}
|
||||
|
||||
switch (typeCode) {
|
||||
case TypeCode.Char:
|
||||
case TypeCode.String:
|
||||
var stringRecord = part.Record.StringFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
if (stringRecord == null) {
|
||||
stringRecord = new StringFieldIndexRecord { PropertyName = propertyName };
|
||||
part.Record.StringFieldIndexRecords.Add(stringRecord);
|
||||
}
|
||||
|
||||
// take the first 4000 chars as it is the limit for the field
|
||||
stringRecord.LatestValue = value == null ? null : value.ToString().Substring(0, Math.Min(value.ToString().Length, 4000));
|
||||
|
||||
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
case TypeCode.SByte:
|
||||
case TypeCode.Int16:
|
||||
case TypeCode.Int32:
|
||||
case TypeCode.Int64:
|
||||
case TypeCode.UInt16:
|
||||
case TypeCode.UInt32:
|
||||
case TypeCode.UInt64:
|
||||
var integerRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
if (integerRecord == null) {
|
||||
integerRecord = new IntegerFieldIndexRecord { PropertyName = propertyName };
|
||||
part.Record.IntegerFieldIndexRecords.Add(integerRecord);
|
||||
}
|
||||
|
||||
integerRecord.LatestValue = value == null ? default(long?) : Convert.ToInt64(value);
|
||||
break;
|
||||
case TypeCode.DateTime:
|
||||
var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
if (dateTimeRecord == null) {
|
||||
dateTimeRecord = new IntegerFieldIndexRecord { PropertyName = propertyName };
|
||||
part.Record.IntegerFieldIndexRecords.Add(dateTimeRecord);
|
||||
}
|
||||
|
||||
dateTimeRecord.LatestValue = value == null ? default(long?) : ((DateTime)value).Ticks;
|
||||
break;
|
||||
case TypeCode.Boolean:
|
||||
var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
if (booleanRecord == null) {
|
||||
booleanRecord = new IntegerFieldIndexRecord { PropertyName = propertyName };
|
||||
part.Record.IntegerFieldIndexRecords.Add(booleanRecord);
|
||||
}
|
||||
|
||||
booleanRecord.LatestValue = value == null ? default(long?) : Convert.ToInt64((bool)value);
|
||||
break;
|
||||
case TypeCode.Decimal:
|
||||
var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
if (decimalRecord == null) {
|
||||
decimalRecord = new DecimalFieldIndexRecord { PropertyName = propertyName };
|
||||
part.Record.DecimalFieldIndexRecords.Add(decimalRecord);
|
||||
}
|
||||
|
||||
decimalRecord.LatestValue = value == null ? default(decimal?) : Convert.ToDecimal((decimal)value);
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
case TypeCode.Double:
|
||||
var doubleRecord = part.Record.DoubleFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
if (doubleRecord == null) {
|
||||
doubleRecord = new DoubleFieldIndexRecord { PropertyName = propertyName };
|
||||
part.Record.DoubleFieldIndexRecords.Add(doubleRecord);
|
||||
}
|
||||
|
||||
doubleRecord.LatestValue = value == null ? default(double?) : Convert.ToDouble(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName) {
|
||||
var propertyName = String.Join(".", partName, fieldName, valueName ?? "");
|
||||
|
||||
var typeCode = Type.GetTypeCode(typeof(T));
|
||||
|
||||
switch (typeCode) {
|
||||
case TypeCode.Char:
|
||||
case TypeCode.String:
|
||||
var stringRecord = part.Record.StringFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return stringRecord != null ? (T)Convert.ChangeType(stringRecord.LatestValue, typeof(T)) : default(T);
|
||||
case TypeCode.Byte:
|
||||
case TypeCode.SByte:
|
||||
case TypeCode.Int16:
|
||||
case TypeCode.Int32:
|
||||
case TypeCode.Int64:
|
||||
case TypeCode.UInt16:
|
||||
case TypeCode.UInt32:
|
||||
case TypeCode.UInt64:
|
||||
var integerRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return integerRecord != null ? (T)Convert.ChangeType(integerRecord.LatestValue, typeof(T)) : default(T);
|
||||
case TypeCode.Decimal:
|
||||
var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return decimalRecord != null ? (T)Convert.ChangeType(decimalRecord.LatestValue, typeof(T)) : default(T);
|
||||
case TypeCode.Single:
|
||||
case TypeCode.Double:
|
||||
var doubleRecord = part.Record.DoubleFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return doubleRecord != null ? (T)Convert.ChangeType(doubleRecord.LatestValue, typeof(T)) : default(T);
|
||||
case TypeCode.DateTime:
|
||||
var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return dateTimeRecord != null ? (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.LatestValue)), typeof(T)) : default(T);
|
||||
case TypeCode.Boolean:
|
||||
var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return booleanRecord != null ? (T)Convert.ChangeType(booleanRecord.LatestValue, typeof(T)) : default(T);
|
||||
default:
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,12 +5,16 @@ using Orchard.Projections.Models;
|
||||
namespace Orchard.Projections.Services {
|
||||
public class FieldIndexService : IFieldIndexService {
|
||||
|
||||
public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType) {
|
||||
var propertyName = String.Join(".", partName, fieldName, valueName ?? "");
|
||||
public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType) =>
|
||||
Set(part, partName, fieldName, valueName, value, valueType, FieldIndexRecordVersionOptions.Value);
|
||||
|
||||
public void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType,
|
||||
FieldIndexRecordVersionOptions fieldIndexRecordVersionOption) {
|
||||
var propertyName = string.Join(".", partName, fieldName, valueName ?? "");
|
||||
|
||||
var typeCode = Type.GetTypeCode(valueType);
|
||||
|
||||
if(valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>)) {
|
||||
if (valueType.IsGenericType && valueType.GetGenericTypeDefinition() == typeof(Nullable<>)) {
|
||||
typeCode = Type.GetTypeCode(Nullable.GetUnderlyingType(valueType));
|
||||
}
|
||||
|
||||
@@ -23,10 +27,19 @@ namespace Orchard.Projections.Services {
|
||||
part.Record.StringFieldIndexRecords.Add(stringRecord);
|
||||
}
|
||||
|
||||
// take the first 4000 chars as it is the limit for the field
|
||||
stringRecord.Value = value == null ? null : value.ToString().Substring(0, Math.Min(value.ToString().Length, 4000));
|
||||
// Take the first 4000 chars as it is the limit for the field.
|
||||
var stringRecordValue = value?.ToString().Substring(0, Math.Min(value.ToString().Length, 4000));
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
stringRecord.Value = stringRecordValue;
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
stringRecord.LatestValue = stringRecordValue;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
case TypeCode.SByte:
|
||||
@@ -42,7 +55,18 @@ namespace Orchard.Projections.Services {
|
||||
part.Record.IntegerFieldIndexRecords.Add(integerRecord);
|
||||
}
|
||||
|
||||
integerRecord.Value = value == null ? default(long?) : Convert.ToInt64(value);
|
||||
var integerRecordValue = value == null ? default(long?) : Convert.ToInt64(value);
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
integerRecord.Value = integerRecordValue;
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
integerRecord.LatestValue = integerRecordValue;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case TypeCode.DateTime:
|
||||
var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
@@ -51,7 +75,18 @@ namespace Orchard.Projections.Services {
|
||||
part.Record.IntegerFieldIndexRecords.Add(dateTimeRecord);
|
||||
}
|
||||
|
||||
dateTimeRecord.Value = value == null ? default(long?) : ((DateTime)value).Ticks;
|
||||
var dateTimeRecordValue = value == null ? default(long?) : ((DateTime)value).Ticks;
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
dateTimeRecord.Value = dateTimeRecordValue;
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
dateTimeRecord.LatestValue = dateTimeRecordValue;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case TypeCode.Boolean:
|
||||
var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
@@ -60,7 +95,18 @@ namespace Orchard.Projections.Services {
|
||||
part.Record.IntegerFieldIndexRecords.Add(booleanRecord);
|
||||
}
|
||||
|
||||
booleanRecord.Value = value == null ? default(long?) : Convert.ToInt64((bool)value);
|
||||
var booleanRecordValue = value == null ? default(long?) : Convert.ToInt64((bool)value);
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
booleanRecord.Value = booleanRecordValue;
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
booleanRecord.LatestValue = booleanRecordValue;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case TypeCode.Decimal:
|
||||
var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
@@ -69,7 +115,18 @@ namespace Orchard.Projections.Services {
|
||||
part.Record.DecimalFieldIndexRecords.Add(decimalRecord);
|
||||
}
|
||||
|
||||
decimalRecord.Value = value == null ? default(decimal?) : Convert.ToDecimal((decimal)value);
|
||||
var decimalRecordValue = value == null ? default(decimal?) : Convert.ToDecimal((decimal)value);
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
decimalRecord.Value = decimalRecordValue;
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
decimalRecord.LatestValue = decimalRecordValue;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
case TypeCode.Double:
|
||||
@@ -79,13 +136,27 @@ namespace Orchard.Projections.Services {
|
||||
part.Record.DoubleFieldIndexRecords.Add(doubleRecord);
|
||||
}
|
||||
|
||||
doubleRecord.Value = value == null ? default(double?) : Convert.ToDouble(value);
|
||||
var doubleRecordValue = value == null ? default(double?) : Convert.ToDouble(value);
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
doubleRecord.Value = doubleRecordValue;
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
doubleRecord.LatestValue = doubleRecordValue;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName) {
|
||||
var propertyName = String.Join(".", partName, fieldName, valueName ?? "");
|
||||
public T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName) =>
|
||||
Get<T>(part, partName, fieldName, valueName, FieldIndexRecordVersionOptions.Value);
|
||||
|
||||
public T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName, FieldIndexRecordVersionOptions fieldIndexRecordVersionOption) {
|
||||
var propertyName = string.Join(".", partName, fieldName, valueName ?? "");
|
||||
|
||||
var typeCode = Type.GetTypeCode(typeof(T));
|
||||
|
||||
@@ -93,7 +164,20 @@ namespace Orchard.Projections.Services {
|
||||
case TypeCode.Char:
|
||||
case TypeCode.String:
|
||||
var stringRecord = part.Record.StringFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return stringRecord != null ? (T)Convert.ChangeType(stringRecord.Value, typeof(T)) : default(T);
|
||||
var stringRecordValue = default(T);
|
||||
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
stringRecordValue = (T)Convert.ChangeType(stringRecord.Value, typeof(T));
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
stringRecordValue = (T)Convert.ChangeType(stringRecord.LatestValue, typeof(T));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return stringRecord != null ? stringRecordValue : default;
|
||||
case TypeCode.Byte:
|
||||
case TypeCode.SByte:
|
||||
case TypeCode.Int16:
|
||||
@@ -103,22 +187,87 @@ namespace Orchard.Projections.Services {
|
||||
case TypeCode.UInt32:
|
||||
case TypeCode.UInt64:
|
||||
var integerRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return integerRecord != null ? (T)Convert.ChangeType(integerRecord.Value, typeof(T)) : default(T);
|
||||
var integerRecordValue = default(T);
|
||||
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
integerRecordValue = (T)Convert.ChangeType(integerRecord.Value, typeof(T));
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
integerRecordValue = (T)Convert.ChangeType(integerRecord.LatestValue, typeof(T));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return integerRecord != null ? integerRecordValue : default;
|
||||
case TypeCode.Decimal:
|
||||
var decimalRecord = part.Record.DecimalFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return decimalRecord != null ? (T)Convert.ChangeType(decimalRecord.Value, typeof(T)) : default(T);
|
||||
var decimalRecordValue = default(T);
|
||||
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
decimalRecordValue = (T)Convert.ChangeType(decimalRecord.Value, typeof(T));
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
decimalRecordValue = (T)Convert.ChangeType(decimalRecord.LatestValue, typeof(T));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return decimalRecord != null ? decimalRecordValue : default;
|
||||
case TypeCode.Single:
|
||||
case TypeCode.Double:
|
||||
var doubleRecord = part.Record.DoubleFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return doubleRecord != null ? (T)Convert.ChangeType(doubleRecord.Value, typeof(T)) : default(T);
|
||||
var doubleRecordValue = default(T);
|
||||
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
doubleRecordValue = (T)Convert.ChangeType(doubleRecord.Value, typeof(T));
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
doubleRecordValue = (T)Convert.ChangeType(doubleRecord.LatestValue, typeof(T));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return doubleRecord != null ? doubleRecordValue : default;
|
||||
case TypeCode.DateTime:
|
||||
var dateTimeRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return dateTimeRecord != null ? (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.Value)), typeof(T)) : default(T);
|
||||
var dateTimeRecordValue = default(T);
|
||||
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
dateTimeRecordValue = (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.Value)), typeof(T));
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
dateTimeRecordValue = (T)Convert.ChangeType(new DateTime(Convert.ToInt64(dateTimeRecord.LatestValue)), typeof(T));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return dateTimeRecord != null ? dateTimeRecordValue : default;
|
||||
case TypeCode.Boolean:
|
||||
var booleanRecord = part.Record.IntegerFieldIndexRecords.FirstOrDefault(r => r.PropertyName == propertyName);
|
||||
return booleanRecord != null ? (T)Convert.ChangeType(booleanRecord.Value, typeof(T)) : default(T);
|
||||
var booleanRecordValue = default(T);
|
||||
|
||||
switch (fieldIndexRecordVersionOption) {
|
||||
case FieldIndexRecordVersionOptions.Value:
|
||||
booleanRecordValue = (T)Convert.ChangeType(booleanRecord.Value, typeof(T));
|
||||
|
||||
break;
|
||||
case FieldIndexRecordVersionOptions.LatestValue:
|
||||
booleanRecordValue = (T)Convert.ChangeType(booleanRecord.LatestValue, typeof(T));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return booleanRecord != null ? booleanRecordValue : default;
|
||||
default:
|
||||
return default(T);
|
||||
return default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
using System;
|
||||
using Orchard.Projections.Models;
|
||||
|
||||
namespace Orchard.Projections.Services {
|
||||
public interface IDraftFieldIndexService : IDependency {
|
||||
void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType);
|
||||
T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName);
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,14 @@ using Orchard.Projections.Models;
|
||||
|
||||
namespace Orchard.Projections.Services {
|
||||
public interface IFieldIndexService : IDependency {
|
||||
void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType);
|
||||
T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName);
|
||||
T Get<T>(FieldIndexPart part, string partName, string fieldName, string valueName, FieldIndexRecordVersionOptions fieldIndexRecordVersionOption);
|
||||
void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType);
|
||||
void Set(FieldIndexPart part, string partName, string fieldName, string valueName, object value, Type valueType, FieldIndexRecordVersionOptions fieldIndexRecordVersionOption);
|
||||
}
|
||||
|
||||
public enum FieldIndexRecordVersionOptions {
|
||||
Value,
|
||||
LatestValue
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,9 +33,7 @@ namespace Orchard.Projections.Tests.Services {
|
||||
builder.RegisterType<FieldIndexPartHandler>().As<IContentHandler>();
|
||||
builder.RegisterType<OrchardServices>().As<IOrchardServices>();
|
||||
builder.RegisterType<DefaultContentManager>().As<IContentManager>();
|
||||
builder.RegisterType<DraftFieldIndexService>().As<IDraftFieldIndexService>();
|
||||
builder.RegisterType<FieldIndexService>().As<IFieldIndexService>();
|
||||
builder.RegisterType<DraftFieldIndexService>().As<IDraftFieldIndexService>();
|
||||
builder.RegisterType<ThingHandler>().As<IContentHandler>();
|
||||
builder.RegisterType<FieldIndexPartHandler>().As<IContentHandler>();
|
||||
builder.RegisterType<InfosetStorageProvider>().As<IFieldStorageProvider>();
|
||||
|
||||
@@ -41,9 +41,7 @@ namespace Orchard.Projections.Tests.Services {
|
||||
builder.RegisterType<FieldIndexPartHandler>().As<IContentHandler>();
|
||||
builder.RegisterType<OrchardServices>().As<IOrchardServices>();
|
||||
builder.RegisterType<DefaultContentManager>().As<IContentManager>();
|
||||
builder.RegisterType<DraftFieldIndexService>().As<IDraftFieldIndexService>();
|
||||
builder.RegisterType<FieldIndexService>().As<IFieldIndexService>();
|
||||
builder.RegisterType<DraftFieldIndexService>().As<IDraftFieldIndexService>();
|
||||
builder.RegisterType<ThingHandler>().As<IContentHandler>();
|
||||
builder.RegisterType<FieldIndexPartHandler>().As<IContentHandler>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user