/// <summary>
        ///   Удаляет устройство из топологии сети.
        /// </summary>
        /// <param name = "deviceEntity">Описатель удаляемого устройства.</param>
        /// <remarks>
        ///   При удалении устройства происходит следующее:
        ///   <list type = "number">
        ///     <item>
        ///       <description>Отключаются от всех интерфейсов среды передачи.</description>
        ///     </item>
        ///     <item>
        ///       <description>Удаляются все интерфейсы из устройства.</description>
        ///     </item>
        ///     <item>
        ///       <description>Удаляются интерфейсы из топологии.</description>
        ///     </item>
        ///     <item>
        ///       <description>Устройство удаляется из топологии.</description>
        ///     </item>
        ///   </list>
        /// </remarks>
        /// <exception cref = "ArgumentNullException"><paramref name = "deviceEntity" /> является <c>null</c>.</exception>
        /// <exception cref = "EntityHandlerNotFoundException">Описатель <paramref name = "deviceEntity" /> некорректный.</exception>
        public void RemoveDevice(NetworkEntity deviceEntity)
        {
            if (!this.devices.ContainsKey (deviceEntity.Id))
                throw new EntityHandlerNotFoundException (deviceEntity);

            var dev = this.devices [deviceEntity.Id];

            var ifaces = new HashSet <ulong> ();
            foreach (var iface in dev.Interfaces) {
                if (iface.Backbone != null)
                    iface.ReleaseBackbone ();

                var iface1 = iface;
                ifaces.Add ((from i in this.interfaces
                             where i.Value == iface1
                             select i.Key).First ());
            }

            dev.RemoveInterfaces ();

            foreach (var id in ifaces)
                this.interfaces.Remove (id);

            this.devices.Remove (deviceEntity.Id);
        }
        /// <summary>
        ///   Удаляет среду передачи данных из топологоии сети.
        /// </summary>
        /// <param name = "backboneEntity">Описатель удаляемой среды передачи.</param>
        /// <remarks>
        ///   При удалении среды передачи происходит следующее:
        ///   <list type = "number">
        ///     <item>
        ///       <description>Интерфейсы всех конечных точек отвязываются от среды передачи.</description>
        ///     </item>
        ///     <item>
        ///       <description>Среда передачи удаляется из топологии.</description>
        ///     </item>
        ///   </list>
        /// </remarks>
        /// <exception cref = "ArgumentNullException"><paramref name = "backboneEntity" /> является <c>null</c>.</exception>
        /// <exception cref = "EntityHandlerNotFoundException">Описатель <paramref name = "backboneEntity" /> некорректный.</exception>
        public void RemoveBackbone(NetworkEntity backboneEntity)
        {
            if (!this.interfaces.ContainsKey (backboneEntity.Id))
                throw new EntityHandlerNotFoundException (backboneEntity);

            var backbone = this.backbones [backboneEntity.Id];
            foreach (var iface in this.interfaces.Where (iface => iface.Value.Backbone == backbone))
                iface.Value.ReleaseBackbone ();

            this.backbones.Remove (backboneEntity.Id);
        }
        /// <summary>
        ///   Удаляет интерфейс из топологии сети.
        /// </summary>
        /// <param name = "interfaceEntity">Описатель удаляемого интерфейса.</param>
        /// <remarks>
        ///   При удалении интерфейса происходит следующее:
        ///   <list type = "number">
        ///     <item>
        ///       <description>Интерфейс отвязывается от среды передачи.</description>
        ///     </item>
        ///     <item>
        ///       <description>Интерфейс отвязывается от устройства.</description>
        ///     </item>
        ///     <item>
        ///       <description>Интерфейс удаляется из топологии.</description>
        ///     </item>
        ///   </list>
        /// </remarks>
        /// <exception cref = "ArgumentNullException"><paramref name = "interfaceEntity" /> является <c>null</c>.</exception>
        /// <exception cref = "EntityHandlerNotFoundException">Описатель <paramref name = "interfaceEntity" /> некорректный.</exception>
        public void RemoveInterface(NetworkEntity interfaceEntity)
        {
            if (!this.interfaces.ContainsKey (interfaceEntity.Id))
                throw new EntityHandlerNotFoundException (interfaceEntity);

            var iface = this.interfaces [interfaceEntity.Id];
            if (iface.Backbone != null)
                iface.ReleaseBackbone ();
            if (iface.Device != null)
                iface.ReleaseDevice ();

            this.interfaces.Remove (interfaceEntity.Id);
        }
 public void RemoveInterface(NetworkEntity interfaceEntity)
 {
     Contract.Requires <ArgumentNullException> (interfaceEntity != null);
 }
 public void RemoveDevice(NetworkEntity deviceEntity)
 {
     Contract.Requires <ArgumentNullException> (deviceEntity != null);
 }
 public void RemoveBackbone(NetworkEntity backboneEntity)
 {
     Contract.Requires <ArgumentNullException> (backboneEntity != null);
 }
 /// <summary>
 ///   Инициализация нового экземпляра исключения.
 /// </summary>
 /// <param name = "entity"></param>
 public EntityHandlerNotFoundException(NetworkEntity entity)
     : base(string.Format (Strings.EntityHandlerNotFoundException, entity))
 {
     this.Entity = entity;
 }