public override void Build() { var hasher = new ProjectionHasher(); var builder = this as ISettingsBuilder; var processorSettings = this as ISubscrptionMiddlewareSettings; Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () => { var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory); var clusterServiceMiddleware = new SystemMiddleware(handlerFactory); var middleware = processorSettings.HandleMiddleware(clusterServiceMiddleware); var subscriptionMiddleware = new SubscriptionMiddleware(); var clusterSettings = builder.Container.Resolve <IClusterSettings>(); string nodeId = $"{clusterSettings.CurrentNodeName}@{clusterSettings.ClusterName}"; foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations) { string subscriberId = reg.FullName + "." + nodeId; if (typeof(ISystemProjection).IsAssignableFrom(reg) && reg.IsClass) { subscriptionMiddleware.Subscribe(new SystemProjectionSubscriber(reg, middleware, subscriberId)); var transport = builder.Container.Resolve <ITransport>(builder.Name); var serializer = builder.Container.Resolve <ISerializer>(null); var publisher = transport.GetPublisher <ICommand>(serializer); var projManagerId = new ProjectionVersionManagerId(reg.GetContractId()); var command = new RegisterProjection(projManagerId, hasher.CalculateHash(reg).ToString()); publisher.Publish(command); } } return(subscriptionMiddleware); }; builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name); }
public override void Build() { var builder = this as ISettingsBuilder; var processorSettings = this as ISubscrptionMiddlewareSettings; Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () => { var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory); var repository = builder.Container.Resolve <IAggregateRepository>(builder.Name); var publisher = builder.Container.Resolve <IPublisher <IEvent> >(builder.Name); //create extension methis UseApplicationMiddleware instead of instance here. var applicationServiceMiddleware = new ApplicationServiceMiddleware(handlerFactory, repository, publisher); var middleware = processorSettings.HandleMiddleware(applicationServiceMiddleware); var subscriptionMiddleware = new SubscriptionMiddleware(); foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations) { if (typeof(IAggregateRootApplicationService).IsAssignableFrom(reg)) { subscriptionMiddleware.Subscribe(new HandleSubscriber <IAggregateRootApplicationService, ICommandHandler <ICommand> >(reg, middleware)); } } return(subscriptionMiddleware); }; builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name); }
public override void Build() { var builder = this as ISettingsBuilder; var processorSettings = this as ISubscrptionMiddlewareSettings; Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () => { var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory); var publisher = builder.Container.Resolve <IPublisher <IEvent> >(builder.Name); var repository = builder.Container.Resolve <IAggregateRepository>(builder.Name); var systemServiceMiddleware = new ApplicationServiceMiddleware(handlerFactory, repository, publisher); var middleware = processorSettings.HandleMiddleware(systemServiceMiddleware); var subscriptionMiddleware = new SubscriptionMiddleware(); foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations) { if (typeof(ISystemService).IsAssignableFrom(reg) && reg.IsClass) { subscriptionMiddleware.Subscribe(new SystemServiceSubscriber(reg, middleware)); } } return(subscriptionMiddleware); }; builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name); }
protected override List <TRow> GetItems() { var items = base.GetItems(); if (items.Any()) { var attr = items.First().GetType().GetCustomAttribute <LocalizationRowAttribute>(); if (attr == null) { return(items); } var localRowType = attr.LocalizationRow; var localRowFactory = FastReflection.DelegateForConstructor <Row>(localRowType); var localRow = localRowFactory(); var foreignKeyFieldName = attr.MappedIdField ?? ((Field)((IIdRow)items.First()).IdField).PropertyName; var foreignKeyField = localRow.FindFieldByPropertyName(foreignKeyFieldName) ?? localRow.FindField(foreignKeyFieldName); var foreignKeyCriteria = new Criteria(foreignKeyField.PropertyName ?? foreignKeyField.Name); var languageIdKeyField = ((Field)((ILocalizationRow)localRow).CultureIdField).PropertyName; var languageIdField = localRow.FindFieldByPropertyName(languageIdKeyField) ?? localRow.FindField(languageIdKeyField); var languageIdCriteria = new Criteria(languageIdField.PropertyName ?? languageIdField.Name); var culture = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; var userLanguage = new LanguageRow(); using (var connectionLanguage = SqlConnections.NewFor <LanguageRow>()) { userLanguage = connectionLanguage.TryFirst <LanguageRow>(new Criteria(LanguageRow.Fields.LanguageId).Like($"%{culture}%")); if (userLanguage == null) { return(items); } } var listHandler = DefaultHandlerFactory.ListHandlerFor(localRowType); var listRequest = DefaultHandlerFactory.ListRequestFor(localRowType); listRequest.ColumnSelection = ColumnSelection.List; listRequest.Criteria = (foreignKeyCriteria.In(items.Select(i => i.IdField[i])) && languageIdCriteria == userLanguage.Id.Value); var translationsResponse = listHandler.Process(SqlConnections.NewFor <TRow>(), listRequest); if (translationsResponse.Entities.Count == 0) { return(items); } foreach (var item in items) { var translated = translationsResponse.Entities.Cast <IOMPLocalizationLangRow>().FirstOrDefault( t => (Int32)foreignKeyField.AsObject(t as Row) == item.IdField[item]); if (translated != null && !string.IsNullOrEmpty(translated.NameField[translated as Row])) { item.NameField[item] = translated.NameField[translated as Row]; } } } return(items); }
/// <summary> /// Constructs a DefaultKernel with the specified /// implementation of <see cref = "IProxyFactory" /> and <see cref = "IDependencyResolver" /> /// </summary> /// <param name = "resolver"></param> /// <param name = "proxyFactory"></param> public DefaultKernel(IDependencyResolver resolver, IProxyFactory proxyFactory) { RegisterSubSystems(); ReleasePolicy = new LifecycledComponentsReleasePolicy(this); HandlerFactory = new DefaultHandlerFactory(this); ComponentModelBuilder = new DefaultComponentModelBuilder(this); ProxyFactory = proxyFactory; Resolver = resolver; Resolver.Initialize(this, RaiseDependencyResolving); }
/// <summary> /// Constructs a DefaultKernel with the specified implementation of <see cref = "IProxyFactory" /> and <see cref = "IDependencyResolver" /> /// </summary> /// <param name = "resolver"> </param> /// <param name = "proxyFactory"> </param> public DefaultKernel(IDependencyResolver resolver, IProxyFactory proxyFactory) { RegisterSubSystems(); ReleasePolicy = new LifecycledComponentsReleasePolicy(this); HandlerFactory = new DefaultHandlerFactory(this); ComponentModelBuilder = new DefaultComponentModelBuilder(this); ProxyFactory = proxyFactory; Resolver = resolver; Resolver.Initialize(this, RaiseDependencyResolving); #if !SILVERLIGHT if (new SecurityPermission(SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy).IsGranted()) { Logger = new TraceLogger("Castle.Windsor", LoggerLevel.Warn); } else #endif { Logger = NullLogger.Instance; } }
public override void Build() { var builder = this as ISettingsBuilder; var processorSettings = this as ISubscrptionMiddlewareSettings; Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () => { var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory); var publisher = builder.Container.Resolve <IPublisher <ICommand> >(builder.Name); var portsMiddleware = new PortsMiddleware(handlerFactory, publisher); var middleware = processorSettings.HandleMiddleware(portsMiddleware); var subscriptionMiddleware = new SubscriptionMiddleware(); foreach (var reg in (this as ISubscrptionMiddlewareSettings).HandlerRegistrations) { if (typeof(IPort).IsAssignableFrom(reg)) { subscriptionMiddleware.Subscribe(new HandleSubscriber <IPort, IEventHandler <IEvent> >(reg, middleware)); } } return(subscriptionMiddleware); }; builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name); }
public override void Build() { var builder = this as ISettingsBuilder; var messageProcessorSettings = this as IMessageProcessorSettings <IEvent>; var contractsRepository = builder.Container.Resolve <IContractsRepository>(); var projectionsApi = builder.Container.Resolve <ProjectionApi>(); Func <IMessageProcessor> messageHandlerProcessorFactory = () => { IMessageProcessor processor = new MessageProcessor(messageProcessorSettings.MessageProcessorName); foreach (var contract in contractsRepository.Contracts) { if (typeof(IEvent).IsAssignableFrom(contract)) { var handlerFactory = new DefaultHandlerFactory(typeof(IndexProjection), x => new IndexProjection(projectionsApi)); processor.Subscribe(new ElasticSearchSubscription(SubscriptionName, contract, handlerFactory)); } } projectionsApi.ConfigureMappings(); return(processor); }; builder.Container.RegisterSingleton <IMessageProcessor>(() => messageHandlerProcessorFactory(), builder.Name); }
public override void Build() { var hasher = new ProjectionHasher(); var builder = this as ISettingsBuilder; var processorSettings = this as ISubscrptionMiddlewareSettings; Func <SubscriptionMiddleware> messageHandlerProcessorFactory = () => { var handlerFactory = new DefaultHandlerFactory(processorSettings.HandlerFactory); // May be we want to have separate serializer + transport per type?!?!? var transport = builder.Container.Resolve <ITransport>(builder.Name); var serializer = builder.Container.Resolve <ISerializer>(null); var publisher = transport.GetPublisher <ICommand>(serializer); var projectionsMiddleware = new ProjectionsMiddleware(handlerFactory); var middleware = processorSettings.HandleMiddleware(projectionsMiddleware); var subscriptionMiddleware = new SubscriptionMiddleware(); var iProjection = typeof(IProjection); foreach (var handler in processorSettings.HandlerRegistrations) { if (iProjection.IsAssignableFrom(handler)) { subscriptionMiddleware.Subscribe(new HandlerSubscriber <IProjection, IEventHandler <IEvent> >(handler, middleware)); var projManagerId = new ProjectionVersionManagerId(handler.GetContractId()); var command = new RegisterProjection(projManagerId, hasher.CalculateHash(handler).ToString()); publisher.Publish(command); } } var indexSubscriber = builder.Container.Resolve <EventTypeIndexForProjections>(); subscriptionMiddleware.Subscribe(indexSubscriber); return(subscriptionMiddleware); }; builder.Container.RegisterSingleton <SubscriptionMiddleware>(() => messageHandlerProcessorFactory(), builder.Name); }
public void Setup() { _mockRepository = new MockRepository(MockBehavior.Default); _factory = new DefaultHandlerFactory(""); }
public void OnReturn(IListRequestHandler handler) { if (handler.Response.Entities.Count == 0) { return; } // Lets Get the main row and translate it var culture = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; var userLanguage = new LanguageRow(); using (var connectionLanguage = SqlConnections.NewFor <LanguageRow>()) { userLanguage = connectionLanguage.TryFirst <LanguageRow>(new Criteria(LanguageRow.Fields.LanguageId).Like($"%{culture}%")); if (userLanguage == null) { return; } } var listHandler = DefaultHandlerFactory.ListHandlerFor(localRowType); var listRequest = DefaultHandlerFactory.ListRequestFor(localRowType); listRequest.ColumnSelection = ColumnSelection.List; List <IOMPLocalizationRow> localList = handler.Response.Entities.Cast <IOMPLocalizationRow>().ToList(); listRequest.Criteria = (foreignKeyCriteria.In(localList.Select(s => s.IdField[s as Row])) && languageIdCriteria == userLanguage.Id.Value); var translationsResponse = listHandler.Process(handler.Connection, listRequest); if (translationsResponse.Entities.Count > 0) { var responseLang = translationsResponse.Entities.Cast <IOMPLocalizationLangRow>(); // Validate They have IName row foreach (IOMPLocalizationRow responseEntity in handler.Response.Entities) { var entityLang = responseLang .FirstOrDefault(s => (Int32)foreignKeyField.AsObject(s as Row) == responseEntity.IdField[responseEntity as Row]); if (entityLang != null && !string.IsNullOrEmpty(entityLang?.NameField[entityLang as Row])) { responseEntity.NameField[responseEntity as Row] = entityLang?.NameField[entityLang as Row]; } } } // How about the joined tables, lets translate them too var localizationRowFields = handler.Row.GetFields(); foreach (var localizationRowField in localizationRowFields.Where(f => !String.IsNullOrEmpty(f.ForeignTable))) { var foreignKeyAttr = localizationRowField.GetAttribute <ForeignKeyAttribute>(); var textualFieldAttr = localizationRowField.GetAttribute <TextualFieldAttribute>(); if (foreignKeyAttr.RowType == null || textualFieldAttr == null || string.IsNullOrEmpty(textualFieldAttr.Value)) { continue; } var foreignRowFactory = FastReflection.DelegateForConstructor <Row>(foreignKeyAttr.RowType); var foreignRow = foreignRowFactory(); var foreignAttr = foreignRow.GetType().GetCustomAttribute <LocalizationRowAttribute>(); if (foreignAttr == null) { continue; } var foreignLangType = foreignAttr.LocalizationRow; var foreignLangRowFactory = FastReflection.DelegateForConstructor <Row>(foreignLangType); var foreignLangRow = foreignLangRowFactory(); var externalForeignKeyFieldName = foreignAttr.MappedIdField ?? ((Field)((IIdRow)foreignRow).IdField).PropertyName; var externalForeignKeyField = foreignLangRow.FindFieldByPropertyName(externalForeignKeyFieldName) ?? foreignLangRow.FindField(externalForeignKeyFieldName); var listForeignHandler = DefaultHandlerFactory.ListHandlerFor(foreignLangType); var listForeignRequest = DefaultHandlerFactory.ListRequestFor(foreignLangType); listRequest.ColumnSelection = ColumnSelection.List; var externalForeignCriteria = new Criteria(externalForeignKeyField.PropertyName ?? externalForeignKeyField.Name); var idList = new List <Int32>(); foreach (IOMPLocalizationRow responseEntity in handler.Response.Entities) { var idToAdd = (Int32?)localizationRowField.AsObject(responseEntity as Row); if (idToAdd.HasValue) { idList.Add(idToAdd.Value); } } if (!idList.Any()) { continue; } listForeignRequest.Criteria = externalForeignCriteria.In(idList.Distinct()) && languageIdCriteria == userLanguage.Id.Value; var translationsForeignResponse = listForeignHandler.Process(handler.Connection, listForeignRequest); if (translationsForeignResponse.TotalCount > 0) { foreach (IOMPLocalizationRow responseEntity in handler.Response.Entities) { var localId = (Int32?)localizationRowField.AsObject(responseEntity as Row); var entityLang = translationsForeignResponse.Entities.Cast <IOMPLocalizationLangRow>() .FirstOrDefault(s => (Int32?)externalForeignKeyField.AsObject(s as Row) == localId); if (entityLang != null) { var foreignEntityName = entityLang?.NameField[entityLang as Row]; var textualFieldExternal = (responseEntity as Row).FindField(textualFieldAttr.Value); if (!string.IsNullOrEmpty(foreignEntityName)) { textualFieldExternal.AsObject(responseEntity as Row, foreignEntityName); } } } } } }