Пример #1
0
 public ApiDashboardFilterRelation(int?id, IApiFilter filter, bool isVisible, int order)
 {
     Id        = id;
     Filter    = filter;
     IsVisible = isVisible;
     Order     = order;
 }
Пример #2
0
 static void AddInheritedMembers(
     ITypeSymbol symbol,
     INamespaceOrTypeSymbol type,
     Dictionary <string, string?> dict,
     IReadOnlyList <string> typeParameterNames,
     IApiFilter apiFilter
     )
 {
     foreach (var m in type.GetMembers()
              .Where(m => !(m is INamedTypeSymbol))
              .Where(
                  m => apiFilter.CanVisitApi(
                      m,
                      symbol.Equals(type) ||
                      !symbol.IsSealed ||
                      symbol.TypeKind != TypeKind.Struct
                      )
                  )
              .Where(x => x.IsInheritable()))
     {
         var id = symbol.ToString()?.Trim();
         if (id != null)
         {
             dict.TryAdd(id, type.Equals(symbol) ? null : m.ToDisplayString());
         }
     }
 }
        /// <summary>
        /// Converts any IApiFilter implementation to QueryParameters applied on RestRequest
        /// </summary>
        public static void ApplyFiltersAsQueryString(this RestRequest request, IApiFilter apiFilter)
        {
            if (apiFilter == null)
            {
                return;
            }

            PropertyInfo[] properties = apiFilter.GetType().GetProperties();

            foreach (var propertyInfo in properties.Where(x=> x.GetValue(apiFilter) != null))
            {
                if (propertyInfo.PropertyType == typeof (DateTime) || propertyInfo.PropertyType == typeof (DateTime?))
                {
                    request.AddQueryParameter(propertyInfo.Name, ((DateTime)propertyInfo.GetValue(apiFilter)).ToString(BaseClient.DateFormat));
                    continue;
                }

                if (propertyInfo.PropertyType == typeof(FilterType))
                {
                    request.AddQueryParameter(propertyInfo.Name, ExtractFilterTypeToString(propertyInfo.GetValue(apiFilter)));
                    continue;
                }

                request.AddQueryParameter(propertyInfo.Name, propertyInfo.GetValue(apiFilter).ToString());
            }
        }
        /// <summary>
        /// Converts any IApiFilter implementation to QueryParameters applied on RestRequest
        /// </summary>
        public static void ApplyFiltersAsQueryString(this RestRequest request, IApiFilter apiFilter)
        {
            if (apiFilter == null)
            {
                return;
            }

            PropertyInfo[] properties = apiFilter.GetType().GetProperties();

            foreach (var propertyInfo in properties.Where(x => x.GetValue(apiFilter) != null))
            {
                if (propertyInfo.PropertyType == typeof(DateTime) || propertyInfo.PropertyType == typeof(DateTime?))
                {
                    request.AddQueryParameter(propertyInfo.Name, ((DateTime)propertyInfo.GetValue(apiFilter)).ToString(BaseClient.DateFormat));
                    continue;
                }

                if (propertyInfo.PropertyType == typeof(FilterType))
                {
                    request.AddQueryParameter(propertyInfo.Name, ExtractFilterTypeToString(propertyInfo.GetValue(apiFilter)));
                    continue;
                }

                request.AddQueryParameter(propertyInfo.Name, propertyInfo.GetValue(apiFilter).ToString());
            }
        }
Пример #5
0
 internal static string?GenerateSyntax(
     this ISymbol symbol,
     MemberType type,
     IApiFilter apiFilter
     )
 => type switch
 {
Пример #6
0
 public ApiFilterWrapper(IApiFilter apiFilter)
 {
     if (apiFilter == null)
     {
         throw new ArgumentNullException(nameof(apiFilter));
     }
     ApiFilter = apiFilter;
 }
Пример #7
0
 static IEnumerable <ISymbol> GetImplements(ISymbol symbol, IApiFilter apiFilter)
 => symbol.ContainingType.AllInterfaces
 .Where(type => apiFilter.CanVisitApi(type))
 .SelectMany(type => type.GetMembers())
 .Where(
     x => apiFilter.CanVisitApi(x) &&
     symbol.Equals(
         symbol.ContainingType.FindImplementationForInterfaceMember(x)
         )
     );
Пример #8
0
 internal static List <string> GetMethodImplements(this IMethodSymbol symbol, IApiFilter apiFilter)
 => GetImplements(symbol, apiFilter)
 .Select(
     x => symbol.TypeParameters.Length == 0
                 ? x
                 : ((IMethodSymbol)x).Construct(
         symbol.TypeParameters.ToArray <ITypeSymbol>()
         )
     )
 .Select(x => x.ToDisplayString())
 .ToList();
Пример #9
0
        protected T Get <T>(string resource, IApiFilter filter = null)
        {
            RestRequest request = CreateRequest(resource, Method.GET);

            request.ApplyFiltersAsQueryString(filter);

            IRestResponse response = Client.Execute(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ApplicationException("Response from API is " + response.StatusCode);
            }

            return(DeserializedResult <T>(response));
        }
        public ApiDashboardFilterRelation ConvertToApiEntity(DalDashboardFilterRelation dataEntity)
        {
            IApiFilter filter = null;

            if (dataEntity.FilterTargetId != null)
            {
                filter = _filters.Where(t => t.Id == dataEntity.FilterTargetId).FirstOrDefault();
            }
            else
            {
                filter = _dashboards.Where(t => t.Id == dataEntity.DashboardTargetId).FirstOrDefault();
            }

            var result = new ApiDashboardFilterRelation(dataEntity.Id, filter, dataEntity.IsVisible, dataEntity.Order);

            result.IsDirty           = dataEntity.IsDirty;
            result.IsMarkForDeletion = dataEntity.IsMarkForDeletion;
            return(result);
        }
Пример #11
0
 public ApiFilterWrapper(IApiFilter apiFilter)
 {
     ApiFilter = apiFilter ?? throw new ArgumentNullException(nameof(apiFilter));
 }
 public static HttpConfiguration RegisterFilter(this HttpConfiguration config, IApiFilter filter)
 {
     Filter = filter;
     return(config);
 }
Пример #13
0
        static void GenerateInheritance(
            INamedTypeSymbol symbol,
            MetadataItem item,
            IApiFilter apiFilter
            )
        {
            var dict = new Dictionary <string, string?>();

            switch (symbol.TypeKind)
            {
            case TypeKind.Class:
            case TypeKind.Struct:
            {
                var type        = symbol;
                var inheritance = new List <string>();

                var typeParameterNames = symbol.IsGenericType
                        ? symbol.Accept(TypeGenericParameterNameVisitor.Instance)
                        : EmptyListOfString;

                while (type != null)
                {
                    inheritance.AddWhen(type.Kind == SymbolKind.ErrorType, "System.Object");
                    inheritance.AddWhen(!type.Equals(symbol), type.ToDisplayString());

                    AddInheritedMembers(symbol, type, dict, typeParameterNames, apiFilter);
                    type = type.BaseType;
                }

                if (symbol.TypeKind == TypeKind.Class)
                {
                    inheritance.Reverse();
                    item.Inheritance = inheritance;
                }

                item.Implements = symbol.AllInterfaces
                                  .Where(t => apiFilter.CanVisitApi(t))
                                  .Select(x => x.ToDisplayString())
                                  .ToList();

                break;
            }

            case TypeKind.Interface:
            {
                var typeParameterNames = symbol.IsGenericType
                        ? symbol.Accept(TypeGenericParameterNameVisitor.Instance)
                        : EmptyListOfString;
                AddInheritedMembers(symbol, symbol, dict, typeParameterNames, apiFilter);

                foreach (var t in symbol.AllInterfaces)
                {
                    AddInheritedMembers(symbol, t, dict, typeParameterNames, apiFilter);
                }

                break;
            }
            }

            item.InheritedMembers = dict.Values.Where(r => r != null).ToList() !;
        }
Пример #14
0
 public static void AddFilter(IApiFilter filter)
 {
     filters.Add(filter);
 }
Пример #15
0
 /// <summary>
 /// Adds the global filter.
 /// </summary>
 /// <param name="filter">The filter.</param>
 /// <returns>Instance of this options</returns>
 public LiteApiOptions AddGlobalFilter(IApiFilter filter)
 {
     GlobalFilters.Add(new ApiFilterWrapper(filter));
     return(this);
 }
Пример #16
0
 internal static List <string> GetMemberImplements(this ISymbol symbol, IApiFilter apiFilter)
 => GetImplements(symbol, apiFilter)
 .Select(x => x.ToDisplayString())
 .ToList();