internal IKTable <KR, VR> BuildWindow <KR, VR>(
            string functionName,
            StoreBuilder <TimestampedWindowStore <K, VR> > storeBuilder,
            IKStreamAggProcessorSupplier <K, KR, V, VR> aggregateSupplier,
            string queryableStoreName,
            ISerDes <KR> keySerdes,
            ISerDes <VR> valueSerdes)
        {
            // if repartition required TODO
            // ELSE
            StatefulProcessorNode <K, V, TimestampedWindowStore <K, VR> > statefulProcessorNode =
                new StatefulProcessorNode <K, V, TimestampedWindowStore <K, VR> >(
                    functionName,
                    new ProcessorParameters <K, V>(aggregateSupplier, functionName),
                    storeBuilder);

            builder.AddGraphNode(node, statefulProcessorNode);

            return(new KTableGrouped <K, KR, V, VR>(functionName,
                                                    keySerdes,
                                                    valueSerdes,
                                                    sourceNodes,
                                                    queryableStoreName,
                                                    aggregateSupplier,
                                                    statefulProcessorNode,
                                                    builder));
        }
        internal IKTable <KR, VR> BuildWindow <KR, VR>(
            string functionName,
            StoreBuilder <ITimestampedWindowStore <K, VR> > storeBuilder,
            IKStreamAggProcessorSupplier <K, KR, V, VR> aggregateSupplier,
            string queryableStoreName,
            ISerDes <KR> keySerdes,
            ISerDes <VR> valueSerdes)
        {
            var sourceName = Repartition(storeBuilder);

            StatefulProcessorNode <K, V, ITimestampedWindowStore <K, VR> > statefulProcessorNode =
                new StatefulProcessorNode <K, V, ITimestampedWindowStore <K, VR> >(
                    functionName,
                    new ProcessorParameters <K, V>(aggregateSupplier, functionName),
                    storeBuilder);

            builder.AddGraphNode(node, statefulProcessorNode);

            return(new KTableGrouped <K, KR, V, VR>(functionName,
                                                    keySerdes,
                                                    valueSerdes,
                                                    sourceName.Equals(name) ? sourceNodes : sourceName.ToSingle().ToList(),
                                                    queryableStoreName,
                                                    aggregateSupplier,
                                                    statefulProcessorNode,
                                                    builder));
        }