public IMessageBusSpecifier DeclareExchange(string exchangeName, ExchangeTypes exchangeType)
        {
            var rep = DataRepositoryServiceFactory.CreateSimple <MessageExchangeDeclaration>();

            rep.CreateNew(new MessageExchangeDeclaration {
                Name = exchangeName, Type = exchangeType
            });

            return(this);
        }
        public IExchangeSpecifier SpecifyExchange(string exchangeName)
        {
            var rep = DataRepositoryServiceFactory.CreateSimple <MessageExchangeDeclaration>();
            var ex  = rep.Load(exchangeName);

            if (null != ex)
            {
                return(new ExchangeTopologySpecifier(this, ex.Item));
            }

            return(null);
        }
        public IMessageBusSpecifier DeleteExchange(string exchangeName)
        {
            var rep = DataRepositoryServiceFactory.CreateSimple <MessageExchangeDeclaration>();
            var ex  = rep.Load(exchangeName);

            if (null != ex)
            {
                rep.Delete(ex.Item);
            }

            return(this);
        }
        public IExchangeSpecifier DeclareQueue(string queueName, params string[] boundRoutes)
        {
            var rep = DataRepositoryServiceFactory.CreateSimple <MessageExchangeDeclaration>();

            _exchangeDeclaration = rep.Load(_exchangeDeclaration.Name).Item;
            if (null != _exchangeDeclaration)
            {
                if (!_exchangeDeclaration.Queues.Any(q => q.Name == queueName))
                {
                    var mqd = new MessageQueueDeclaration
                    {
                        Name     = queueName,
                        Bindings = boundRoutes.ToList()
                    };

                    _exchangeDeclaration.Queues.Add(mqd);
                    rep.Update(_exchangeDeclaration);
                }
            }

            return(this);
        }
        public IExchangeSpecifier DeleteQueue(string queueName)
        {
            var rep  = DataRepositoryServiceFactory.CreateSimple <MessageExchangeDeclaration>();
            var qrep = DataRepositoryServiceFactory.CreateSimple <MessageQueueDeclaration>();

            _exchangeDeclaration = rep.Load(_exchangeDeclaration.Name).Item;
            if (null != _exchangeDeclaration)
            {
                var q = _exchangeDeclaration.Queues.FirstOrDefault(tq => tq.Name == queueName);
                if (null != q)
                {
                    _exchangeDeclaration.Queues.Remove(q);
                    rep.Update(_exchangeDeclaration);
                    qrep.Delete(q);
                }
            }


            // todo: rabbit delete exchange

            return(this);
        }