/// <summary>
        ///     Removes the specified service.
        /// </summary>
        /// <param name="service">The service.</param>
        public void Remove(Identification service)
        {
            SubscriptorEntity subscriptorEntity =
                _repository.FindOne(s => s.Service.Id == service.Id && s.Service.Type == service.Type);

            if (subscriptorEntity != null)
            {
                _repository.Remove(subscriptorEntity);
            }
        }
        /// <summary>
        ///     Adds the specified subscriptor.
        /// </summary>
        /// <param name="subscriptor">The subscriptor.</param>
        public void Add(Subscriptor subscriptor)
        {
            SubscriptorEntity subscriptorEntity =
                _repository.FindOne(
                    s => s.Service.Id == subscriptor.Service.Id && s.Service.Type == subscriptor.Service.Type) ??
                new SubscriptorEntity();

            subscriptorEntity.From(subscriptor);
            _repository.Save(subscriptorEntity);
        }
        /// <summary>
        /// Toes the subscriptor.
        /// </summary>
        /// <param name="subscriptorEntity">The subscriptor entity.</param>
        /// <param name="processor">The processor.</param>
        /// <returns></returns>
        public static Subscriptor ToSubscriptor(this SubscriptorEntity subscriptorEntity, Identification processor)
        {
            var subscriptor = new Subscriptor
            {
                Service             = subscriptorEntity.Service,
                ServiceInputGateway =
                    RouterGatewayFactory.CreateOutputGateway(
                        new Uri(subscriptorEntity.InputGateway.Uri),
                        (TransportType)subscriptorEntity.InputGateway.Transport),
                ServiceInputControlGateway =
                    AgentGatewayFactory.CreateOutputGateway(processor,
                                                            new Uri(subscriptorEntity.InputControlGateway.Uri),
                                                            (TransportType)subscriptorEntity.InputControlGateway.Transport),
            };


            foreach (var subscriptionTypeMessage in subscriptorEntity.SubcriptionTypes)
            {
                subscriptor.SubcriptionTypes.Add(subscriptionTypeMessage.ToSubscriptorKey());
            }
            return(subscriptor);
        }
        /// <summary>
        /// Froms the specified subscriptor entity.
        /// </summary>
        /// <param name="subscriptorEntity">The subscriptor entity.</param>
        /// <param name="subscriptor">The subscriptor.</param>
        public static void From(this SubscriptorEntity subscriptorEntity, Subscriptor subscriptor)
        {
            subscriptorEntity.InputGateway = new GatewayEntity
            {
                Uri       = subscriptor.ServiceInputGateway.EndPoint.Uri.OriginalString,
                Transport =
                    (int)subscriptor.ServiceInputGateway.EndPoint.Transport
            };

            subscriptorEntity.InputControlGateway = new GatewayEntity
            {
                Uri =
                    subscriptor.ServiceInputControlGateway.EndPoint.Uri.
                    OriginalString,
                Transport =
                    (int)
                    subscriptor.ServiceInputControlGateway.EndPoint.
                    Transport
            };

            subscriptorEntity.Service = subscriptor.Service;

            subscriptorEntity.SubcriptionTypes = subscriptor.SubcriptionTypes.Where(t => t != null).Select(t => t.ToSubscriptorType()).ToList();
        }