public ClientDetailResource(ClientDetail client, UrlHelper url, IdentityAdminMetadata idmAdminMeta)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (url == null) throw new ArgumentNullException("url");
            if (idmAdminMeta == null) throw new ArgumentNullException("idmAdminMeta");

            Data = new ClientDetailDataResource(client, url, idmAdminMeta);

            var links = new Dictionary<string, string>();
            if (idmAdminMeta.ClientMetaData.SupportsDelete)
            {
                links["Delete"] = url.Link(Constants.RouteNames.DeleteClient, new {subject = client.Subject});
            }
            Links = links;
        }
        public Task<IdentityAdminResult<ClientDetail>> GetClientAsync(string subject)
        {
            int parsedId;
            if (int.TryParse(subject, out parsedId))
            {
                var inMemoryClient = _clients.FirstOrDefault(p => p.Id == parsedId);
                if (inMemoryClient == null)
                {
                    return Task.FromResult(new IdentityAdminResult<ClientDetail>((ClientDetail) null));
                }

                var result = new ClientDetail
                {
                    Subject = subject,
                    ClientId = inMemoryClient.ClientId,
                    ClientName = inMemoryClient.ClientName,
                };
                result.AllowedCorsOrigins = new List<ClientCorsOriginValue>();
                Mapper.Map(inMemoryClient.AllowedCorsOrigins.ToList(), result.AllowedCorsOrigins);
                result.AllowedCustomGrantTypes = new List<ClientCustomGrantTypeValue>();
                Mapper.Map(inMemoryClient.AllowedCustomGrantTypes.ToList(), result.AllowedCustomGrantTypes);
                result.AllowedScopes = new List<ClientScopeValue>();
                Mapper.Map(inMemoryClient.AllowedScopes.ToList(), result.AllowedScopes);
                result.Claims = new List<ClientClaimValue>();
                Mapper.Map(inMemoryClient.Claims.ToList(), result.Claims);
                result.ClientSecrets = new List<ClientSecretValue>();
                Mapper.Map(inMemoryClient.ClientSecrets.ToList(), result.ClientSecrets);
                result.IdentityProviderRestrictions = new List<ClientIdPRestrictionValue>();
                Mapper.Map(inMemoryClient.IdentityProviderRestrictions.ToList(), result.IdentityProviderRestrictions);
                result.PostLogoutRedirectUris = new List<ClientPostLogoutRedirectUriValue>();
                Mapper.Map(inMemoryClient.PostLogoutRedirectUris.ToList(), result.PostLogoutRedirectUris);
                result.RedirectUris = new List<ClientRedirectUriValue>();
                Mapper.Map(inMemoryClient.RedirectUris.ToList(), result.RedirectUris);

                var metadata = GetMetadata();
                var props = from prop in metadata.ClientMetaData.UpdateProperties
                    select new PropertyValue
                    {
                        Type = prop.Type,
                        Value = GetClientProperty(prop, inMemoryClient),
                    };

                result.Properties = props.ToArray();
                return Task.FromResult(new IdentityAdminResult<ClientDetail>(result));
            }
            return Task.FromResult(new IdentityAdminResult<ClientDetail>((ClientDetail) null));
        }