9 public interface IDeviceRepository
10 { 11 TDeviceType Get<TDeviceType>(long id) where TDeviceType : Device;
12 TDeviceType FindByControllerIdentifier<TDeviceType>(string controllerIdentifer)
13 where TDeviceType : Device;
14
15 IList<TDeviceType> GetAll<TDeviceType>(int offset, int max,
16 DateTimeOffset? createdAfter = null, DateTimeOffset? updatedAfter = null,
17 DateTimeOffset? disconnectedAfter = null)
18 where TDeviceType : Device;
19
20 int Count<TDeviceType>(DateTimeOffset? createdAfter = null,
21 DateTimeOffset? updatedAfter = null, DateTimeOffset? disconnectedAfter = null)
22 where TDeviceType: Device;
23
24 void Add<TDeviceType>(TDeviceType device) where TDeviceType : Device;
25 IList<TDeviceType> GetAll<TDeviceType>() where TDeviceType : Device;
26 IList<TDeviceType> GetAll<TDeviceType>(long[] deviceIds) where TDeviceType : Device;
27 IList<TDeviceType> FindByControllerIdentifiers<TDeviceType>(string[] controllerIdentifiers)
28 where TDeviceType : Device;
29 IList<NodeDevice> FindNodesDevicesForRootDevice(string controllerIdentifier,
30 bool active = false);
31 ICollection<NodeDevice> FindNodeDevicesForRootDevice(long rootDeviceId, bool active = false);
32
33 IEnumerable<DeviceLink> GetTopology<T>(long id, bool active) where T : Device;
34 DeviceLink GetDeviceLink(string controllerIdentifierA, string controllerIdentifierB);
35 DeviceLink GetDeviceLink(long id);
36
37 void AddDeviceLink(DeviceLink link);
38
39 IList<Route> FindRoutesByDeviceLink(DeviceLink deviceLink);
40 void Delete(Device device);
41 }
11 public class DeleteDeviceRequest : NHibernateWriteRequest
12 { 13 private readonly Device device;
14
15 public DeleteDeviceRequest(Device device)
16 { 17 this.device = device;
18 }
19
20 protected override void DoExecute()
21 { 22 var links =
23 Session.QueryOver<DeviceLinkReference>().Where(x => x.ControllerIdentifier == device.ControllerIdentifier).
24 List();
25
26 links.ForEach(x => x.Device = null);
27
28 DeleteStatistics();
29 new DeleteRoutesWriteRequest(device.Routes).ExecuteWith(DataStore);
30 DeleteFromGroup();
31 DeleteFromOrder();
32 DeleteProfiles();
33 DataStore.Delete(device);
34 }
35
36 // more private methods...
37
38