public override async Task<object[]> GetProfiles(RnetBusObject target) { return Enumerable.Concat( await GetRussoundProfiles(target), await base.GetProfiles(target)) .ToArray(); }
/// <summary> /// Obtains additional profiles for a nested bus object. /// </summary> /// <param name="target"></param> /// <returns></returns> protected virtual Task<object[]> GetRussoundProfiles(RnetBusObject target) { var zone = target as RnetZone; if (zone == null) return null; // our zones only if (zone.Controller != Controller) return null; return Task.FromResult(new object[] { new Zone(zone), new Media.Audio.Zone(zone), }); }
/// <summary> /// Obtains the profiles for a nested bus object. /// </summary> /// <param name="target"></param> /// <param name="profileType"></param> /// <returns></returns> public virtual Task<object[]> GetProfiles(RnetBusObject target) { var zone = target as RnetZone; if (zone == null) return null; // our zones only if (zone.Controller != Controller) return null; return Task.FromResult(new object[] { new Zone(zone), new ZoneContainer(zone) }); }
/// <summary> /// Sets the container context values. /// </summary> /// <param name="target"></param> /// <param name="owner"></param> /// <param name="container"></param> public static void SetContainerContext(this RnetBusObject target, RnetBusObject owner, RnetBusObject container) { Contract.Requires<ArgumentNullException>(target != null); Contract.Requires<ArgumentNullException>(container != null); Contract.Requires<ArgumentNullException>(owner != null); var context = target.Context.Get<IContainerContext>(); if (context == null || context.Owner != owner || context.Container != container) target.Context.Set<IContainerContext>(new ContainerContext(owner, container)); }
/// <summary> /// Gets the child objects refs for the given object. /// </summary> /// <param name="o"></param> /// <returns></returns> public async Task<ObjectDataCollection> GetObjects(IContext context, RnetBusObject o) { Contract.Requires<ArgumentNullException>(o != null); // load container var p = await profileManager.GetProfile<IContainer>(o) ?? Enumerable.Empty<RnetBusObject>(); return new ObjectDataCollection(await Task.WhenAll(p.Select(i => ObjectToData(context, i)))); }
/// <summary> /// Gets the profile refs for the given object. /// </summary> /// <param name="o"></param> /// <returns></returns> public async Task<ProfileRefCollection> GetProfileRefs(IContext context, RnetBusObject o) { Contract.Requires<ArgumentNullException>(o != null); // load container var p = await profileManager.GetProfiles(o) ?? Enumerable.Empty<ProfileHandle>(); return new ProfileRefCollection(await Task.WhenAll(p.Select(i => ProfileToRef(context, i)))); }
async Task<ObjectData> FillObjectData(IContext context, RnetBusObject o, ObjectData d) { Contract.Requires<ArgumentNullException>(o != null); Contract.Requires<ArgumentNullException>(d != null); d.Uri = await o.GetUri(profileManager, context); d.FriendlyUri = await o.GetFriendlyUri(profileManager, context); d.Id = await o.GetId(profileManager); d.Name = await o.GetName(profileManager, context); d.Objects = await GetObjects(context, o); d.Profiles = await GetProfileRefs(context, o); return d; }
/// <summary> /// Transforms the given <see cref="RnetBusObject"/> into a <see cref="ObjectData"/> instance. /// </summary> /// <param name="d"></param> /// <returns></returns> public async Task<ObjectData> ObjectToData(IContext context, RnetBusObject d) { Contract.Requires<ArgumentNullException>(d != null); if (d is RnetDevice) return await DeviceToData(context, (RnetDevice)d); else return await FillObjectData(context, d, new ObjectData()); }
/// <summary> /// Updates the values. /// </summary> /// <param name="owner"></param> /// <param name="container"></param> internal void Set(RnetBusObject owner, RnetBusObject container) { Owner = owner; Container = container; }
/// <summary> /// Initializes a new instance. /// </summary> internal ContainerContext(RnetBusObject owner, RnetBusObject container) { Set(owner, container); }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="target"></param> protected ProfileBase(RnetBusObject target) { Contract.Requires<ArgumentNullException>(target != null); Target = target; }