Ejemplo n.º 1
0
        public GroupedConnectionKey(IConnection connection, GroupedConnectionKeyLevel level)
        {
            Level = level;
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }

            var hashCode = Concat(GroupedConnectionKeyLevel.Host, connection.Host).GetHashCode();

            if (level == GroupedConnectionKeyLevel.AuthorisationKey)
            {
                hashCode = (hashCode * 397) ^
                           Concat(GroupedConnectionKeyLevel.AuthorisationKey, connection.AuthorisationKey).GetHashCode();
            }
            if (level == GroupedConnectionKeyLevel.DatabaseId)
            {
                hashCode = (hashCode * 397) ^
                           Concat(GroupedConnectionKeyLevel.DatabaseId, connection.DatabaseId).GetHashCode();
            }
            if (level == GroupedConnectionKeyLevel.CollectionId)
            {
                hashCode = (hashCode * 397) ^
                           Concat(GroupedConnectionKeyLevel.CollectionId, connection.CollectionId).GetHashCode();
            }

            _hashCode = hashCode;
        }
Ejemplo n.º 2
0
 public static IDisposable BuildChildNodes <TNode>(
     this IExplicitConnectionCache explicitConnectionCache,
     IImplicitConnectionCache implicitConnectionCache,
     GroupedConnectionKey parentKey,
     GroupedConnectionKeyLevel childKeyLevel,
     Func <GroupedConnection, TNode> childNodeFactory,
     IComparer <TNode> sortComparer,
     IScheduler scheduler,
     out ReadOnlyObservableCollection <TNode> nodes)
 {
     return(explicitConnectionCache.Connect()
            //user could dupe the connections, so we group em all
            .Filter(FilterBuilder <ExplicitConnection>(parentKey))
            .Group(explicitCn => new GroupedConnectionKey(explicitCn, childKeyLevel))
            .FullJoin(
                implicitConnectionCache.Connect()
                .Filter(FilterBuilder <ImplicitConnection>(parentKey))
                .Group(
                    implicitCn =>
                    new GroupedConnectionKey(implicitCn, childKeyLevel)),
                implicitGroup => implicitGroup.Key,
                (key, left, right) =>
                new GroupedConnection(key, left.GetOptionalConnections(), right.GetOptionalConnections()))
            .Filter(gc => !string.IsNullOrEmpty(gc[childKeyLevel]))
            .Transform(childNodeFactory)
            .DisposeMany()
            .Sort(sortComparer)
            .ObserveOn(scheduler)
            .Bind(out nodes)
            .Subscribe());
 }
Ejemplo n.º 3
0
 private static string Concat(GroupedConnectionKeyLevel level, string value)
 {
     return(level + (value ?? ""));
 }
Ejemplo n.º 4
0
 public string this[GroupedConnectionKeyLevel keyLevel] => _valueIndex[keyLevel];