/// <summary>
 /// Returns true if this registration matches the application
 /// model provided.
 /// </summary>
 /// <param name="registration"></param>
 /// <param name="model"></param>
 /// <returns></returns>
 public static bool Matches(this ApplicationRegistration registration,
                            ApplicationInfoModel model)
 {
     if (registration == null)
     {
         return(model == null);
     }
     return(model != null &&
            registration.ApplicationId == model.ApplicationId &&
            registration.ApplicationType == model.ApplicationType &&
            registration.ApplicationUri == model.ApplicationUri &&
            registration.HostAddresses.DecodeAsList().SequenceEqualsSafe(
                model.HostAddresses) &&
            registration.CreateAuthorityId == model.Created?.AuthorityId &&
            registration.UpdateAuthorityId == model.Updated?.AuthorityId &&
            registration.CreateTime == model.Created?.Time &&
            registration.UpdateTime == model.Updated?.Time &&
            registration.DiscoveryProfileUri == model.DiscoveryProfileUri &&
            registration.GatewayServerUri == model.GatewayServerUri &&
            registration.NotSeenSince == model.NotSeenSince &&
            registration.DiscovererId == model.DiscovererId &&
            registration.SiteId == model.SiteId &&
            registration.Capabilities.DecodeAsSet().SetEqualsSafe(
                model.Capabilities?.Select(x =>
                                           JTokenEx.SanitizePropertyName(x).ToUpperInvariant())) &&
            registration.DiscoveryUrls.DecodeAsList().SequenceEqualsSafe(
                model.DiscoveryUrls) &&
            registration.Certificate.DecodeAsByteArray().SequenceEqualsSafe(
                model.Certificate));
 }
 /// <summary>
 /// Deep clone
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static ApplicationInfoModel Clone(this ApplicationInfoModel model)
 {
     if (model == null)
     {
         return(null);
     }
     return(new ApplicationInfoModel {
         ApplicationId = model.ApplicationId,
         ApplicationName = model.ApplicationName,
         Locale = model.Locale,
         LocalizedNames = model.LocalizedNames?
                          .ToDictionary(k => k.Key, v => v.Value),
         ApplicationType = model.ApplicationType,
         ApplicationUri = model.ApplicationUri,
         Capabilities = model.Capabilities
                        .ToHashSetSafe(),
         DiscoveryProfileUri = model.DiscoveryProfileUri,
         HostAddresses = model.HostAddresses
                         .ToHashSetSafe(),
         DiscoveryUrls = model.DiscoveryUrls
                         .ToHashSetSafe(),
         NotSeenSince = model.NotSeenSince,
         ProductUri = model.ProductUri,
         SiteId = model.SiteId,
         GatewayServerUri = model.GatewayServerUri,
         Created = model.Created.Clone(),
         Updated = model.Updated.Clone(),
         DiscovererId = model.DiscovererId
     });
 }
 /// <summary>
 /// Decode tags and property into registration object
 /// </summary>
 /// <param name="model"></param>
 /// <param name="disabled"></param>
 /// <param name="etag"></param>
 /// <param name="recordId"></param>
 /// <returns></returns>
 public static ApplicationRegistration ToApplicationRegistration(
     this ApplicationInfoModel model, bool?disabled = null, string etag = null,
     uint?recordId = null)
 {
     if (model == null)
     {
         throw new ArgumentNullException(nameof(model));
     }
     return(new ApplicationRegistration {
         IsDisabled = disabled,
         DiscovererId = model.DiscovererId,
         Etag = etag,
         RecordId = recordId,
         SiteId = model.SiteId,
         ApplicationName = model.ApplicationName,
         Locale = model.Locale,
         LocalizedNames = model.LocalizedNames,
         HostAddresses = model.HostAddresses?.ToList().EncodeAsDictionary(),
         ApplicationType = model.ApplicationType,
         ApplicationUri = model.ApplicationUri,
         ProductUri = model.ProductUri,
         NotSeenSince = model.NotSeenSince,
         DiscoveryProfileUri = model.DiscoveryProfileUri,
         GatewayServerUri = model.GatewayServerUri,
         Capabilities = model.Capabilities.EncodeAsDictionary(true),
         Certificate = model.Certificate.EncodeAsDictionary(),
         Thumbprint = model.Certificate.ToSha1Hash(),
         DiscoveryUrls = model.DiscoveryUrls?.ToList().EncodeAsDictionary(),
         CreateAuthorityId = model.Created?.AuthorityId,
         CreateTime = model.Created?.Time,
         UpdateAuthorityId = model.Updated?.AuthorityId,
         UpdateTime = model.Updated?.Time,
         Connected = false
     });
 }
Beispiel #4
0
        /// <summary>
        /// Convert to document model
        /// </summary>
        /// <returns></returns>
        public static ApplicationDocument ToDocumentModel(
            this ApplicationInfoModel model, string etag = null)
        {
            var document = new ApplicationDocument {
                ID = 0,
                ApplicationState = model.State,
                ApplicationId    = model.ApplicationId,
                ApplicationUri   = model.ApplicationUri,
                ApplicationName  = model.ApplicationName ??
                                   model.LocalizedNames.FirstOrDefault().Value,
                ApplicationType  = model.ApplicationType,
                SiteId           = model.SiteId,
                ApplicationNames =
                    GetLocalizedText(model.LocalizedNames),
                ProductUri         = model.ProductUri,
                DiscoveryUrls      = model.DiscoveryUrls?.ToArray(),
                ServerCapabilities =
                    GetServerCapabilitiesAsString(model.Capabilities),
                GatewayServerUri    = model.GatewayServerUri,
                DiscoveryProfileUri = model.DiscoveryProfileUri,
                UpdateTime          = model.Updated?.Time,
                NotSeenSince        = model.NotSeenSince,
                CreateTime          = model.Created?.Time,
                ApproveTime         = model.Approved?.Time,
                UpdateAuthorityId   = model.Updated?.AuthorityId,
                CreateAuthorityId   = model.Created?.AuthorityId,
                ApproveAuthorityId  = model.Approved?.AuthorityId,
                ETag = etag
            };

            document.Validate();
            return(document);
        }
 /// <summary>
 /// Returns the site or supervisor id
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static string GetSiteOrGatewayId(this ApplicationInfoModel model)
 {
     if (string.IsNullOrEmpty(model.SiteId))
     {
         return(model.DiscovererId);
     }
     return(model.SiteId);
 }
 /// <summary>
 /// Returns the site or supervisor id
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static string GetSiteOrSupervisorId(this ApplicationInfoModel model)
 {
     if (string.IsNullOrEmpty(model.SiteId))
     {
         return(model.SupervisorId);
     }
     return(model.SiteId);
 }
 /// <summary>
 /// Returns an application name from either application name field or
 /// localized text dictionary
 /// </summary>
 /// <param name="model">The application model.</param>
 public static string GetApplicationName(this ApplicationInfoModel model)
 {
     if (!string.IsNullOrWhiteSpace(model.ApplicationName))
     {
         return(model.ApplicationName);
     }
     return(model.LocalizedNames?
            .FirstOrDefault(n => !string.IsNullOrWhiteSpace(n.Value)).Value);
 }
Beispiel #8
0
 /// <summary>
 /// Patch application
 /// </summary>
 /// <param name="application"></param>
 /// <param name="request"></param>
 public static ApplicationInfoModel Patch(this ApplicationInfoModel application,
                                          ApplicationRegistrationUpdateModel request)
 {
     // Update from update request
     if (request.ApplicationName != null)
     {
         application.ApplicationName = string.IsNullOrEmpty(request.ApplicationName) ?
                                       null : request.ApplicationName;
     }
     if (request.LocalizedNames != null)
     {
         application.LocalizedNames = request.LocalizedNames;
     }
     if (request.ProductUri != null)
     {
         application.ProductUri = string.IsNullOrEmpty(request.ProductUri) ?
                                  null : request.ProductUri;
     }
     if (request.GatewayServerUri != null)
     {
         application.GatewayServerUri = string.IsNullOrEmpty(request.GatewayServerUri) ?
                                        null : request.GatewayServerUri;
     }
     if (request.Certificate != null)
     {
         application.Certificate = request.Certificate.Length == 0 ?
                                   null : request.Certificate;
     }
     if (request.Capabilities != null)
     {
         application.Capabilities = request.Capabilities.Count == 0 ?
                                    null : request.Capabilities;
     }
     if (request.DiscoveryUrls != null)
     {
         application.DiscoveryUrls = request.DiscoveryUrls.Count == 0 ?
                                     null : request.DiscoveryUrls;
     }
     if (request.Locale != null)
     {
         application.Locale = string.IsNullOrEmpty(request.Locale) ?
                              null : request.Locale;
     }
     if (request.DiscoveryProfileUri != null)
     {
         application.DiscoveryProfileUri = string.IsNullOrEmpty(request.DiscoveryProfileUri) ?
                                           null : request.DiscoveryProfileUri;
     }
     return(application);
 }
 /// <summary>
 /// Equality comparison
 /// </summary>
 /// <param name="model"></param>
 /// <param name="that"></param>
 /// <returns></returns>
 public static bool IsSameAs(this ApplicationInfoModel model,
                             ApplicationInfoModel that)
 {
     if (model == that)
     {
         return(true);
     }
     if (model == null || that == null)
     {
         return(false);
     }
     return
         (that.ApplicationUri == model.ApplicationUri &&
          that.ApplicationType == model.ApplicationType);
 }
        /// <summary>
        /// Create unique application id
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static string CreateApplicationId(ApplicationInfoModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            var siteOrGatewayId = model.SiteId;

            if (siteOrGatewayId == null && model.DiscovererId != null)
            {
                siteOrGatewayId = DiscovererModelEx.ParseDeviceId(model.DiscovererId, out _);
            }
            return(CreateApplicationId(siteOrGatewayId, model.ApplicationUri,
                                       model.ApplicationType));
        }
 /// <summary>
 /// Convert to Update model
 /// </summary>
 /// <param name="model"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 public static ApplicationRegistrationUpdateModel ToUpdateRequest(
     this ApplicationInfoModel model, RegistryOperationContextModel context = null)
 {
     return(new ApplicationRegistrationUpdateModel {
         ApplicationName = model.ApplicationName,
         Capabilities = model.Capabilities,
         DiscoveryProfileUri = model.DiscoveryProfileUri,
         DiscoveryUrls = model.DiscoveryUrls,
         GatewayServerUri = model.GatewayServerUri,
         LocalizedNames = model.LocalizedNames,
         ProductUri = model.ProductUri,
         Locale = model.Locale,
         Context = context
     });
 }
 /// <summary>
 /// Convert to registration request
 /// </summary>
 /// <param name="model"></param>
 /// <param name="context"></param>
 /// <returns></returns>
 public static ApplicationRegistrationRequestModel ToRegistrationRequest(
     this ApplicationInfoModel model, RegistryOperationContextModel context = null)
 {
     return(new ApplicationRegistrationRequestModel {
         ApplicationName = model.ApplicationName,
         ApplicationType = model.ApplicationType,
         Capabilities = model.Capabilities,
         ApplicationUri = model.ApplicationUri,
         Certificate = model.Certificate,
         DiscoveryProfileUri = model.DiscoveryProfileUri,
         DiscoveryUrls = model.DiscoveryUrls,
         GatewayServerUri = model.GatewayServerUri,
         LocalizedNames = model.LocalizedNames,
         ProductUri = model.ProductUri,
         SiteId = model.SiteId,
         Context = context
     });
 }
 /// <summary>
 /// Patch application
 /// </summary>
 /// <param name="application"></param>
 /// <param name="model"></param>
 public static ApplicationInfoModel Patch(this ApplicationInfoModel application,
                                          ApplicationInfoModel model)
 {
     application.ApplicationId       = model.ApplicationId;
     application.ApplicationName     = model.ApplicationName;
     application.LocalizedNames      = model.LocalizedNames;
     application.ApplicationType     = model.ApplicationType;
     application.ApplicationUri      = model.ApplicationUri;
     application.Capabilities        = model.Capabilities;
     application.DiscoveryProfileUri = model.DiscoveryProfileUri;
     application.HostAddresses       = model.HostAddresses;
     application.DiscoveryUrls       = model.DiscoveryUrls;
     application.NotSeenSince        = model.NotSeenSince;
     application.ProductUri          = model.ProductUri;
     application.SiteId           = model.SiteId;
     application.DiscovererId     = model.DiscovererId;
     application.GatewayServerUri = model.GatewayServerUri;
     application.Created          = model.Created;
     application.Updated          = model.Updated;
     application.Locale           = model.Locale;
     return(application);
 }
 /// <summary>
 /// Deep clone
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static ApplicationInfoModel Clone(this ApplicationInfoModel model)
 {
     if (model == null)
     {
         return(null);
     }
     return(new ApplicationInfoModel {
         ApplicationId = model.ApplicationId,
         ApplicationName = model.ApplicationName,
         Locale = model.Locale,
         ApplicationType = model.ApplicationType,
         ApplicationUri = model.ApplicationUri,
         Capabilities = model.Capabilities.ToHashSetSafe(),
         Certificate = model.Certificate,
         DiscoveryProfileUri = model.DiscoveryProfileUri,
         HostAddresses = model.HostAddresses.ToHashSetSafe(),
         DiscoveryUrls = model.DiscoveryUrls.ToHashSetSafe(),
         NotSeenSince = model.NotSeenSince,
         ProductUri = model.ProductUri,
         SiteId = model.SiteId,
         SupervisorId = model.SupervisorId
     });
 }
 /// <summary>
 /// Create unique application id
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static string CreateApplicationId(ApplicationInfoModel model) =>
 CreateApplicationId(model.SiteId ?? model.SupervisorId, model.ApplicationUri,
                     model.ApplicationType);