Esempio n. 1
0
        private IEnumerable <StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> > LookupStorages(IEnumerable <ITypedKey <TKey, TMeasureType> > taggedIds, DateTime from, DateTime to)
        {
            var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> >();

            foreach (var id in taggedIds)
            {
                var storages = _storageSelector.GetStorage(id.Key, from, to);
                foreach (var storage in storages)
                {
                    StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> existingStorage;
                    if (!result.TryGetValue(storage, out existingStorage))
                    {
                        var actualFrom = from;
                        if (storage.From > from)
                        {
                            actualFrom = storage.From.Value;
                        }

                        var actualTo = to;
                        if (storage.To < to)
                        {
                            actualTo = storage.To.Value;
                        }

                        existingStorage         = new StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry>(storage.Storage, actualFrom, actualTo);
                        existingStorage.Lookups = new List <ITypedKey <TKey, TMeasureType> >();
                        result.Add(storage, existingStorage);
                    }

                    existingStorage.Lookups.Add(id);
                }
            }

            return(result.Values);
        }
Esempio n. 2
0
        private IEnumerable <StorageLookupResult <TKey, List <TKey>, TEntry> > LookupStorages(IEnumerable <TKey> ids, DateTime to)
        {
            var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <TKey>, TEntry> >();

            foreach (var id in ids)
            {
                var storages = _storageSelector.GetStorage(id, null, to);
                foreach (var storage in storages)
                {
                    StorageLookupResult <TKey, List <TKey>, TEntry> existingStorage;
                    if (!result.TryGetValue(storage, out existingStorage))
                    {
                        var actualTo = to;
                        if (storage.To < to)
                        {
                            actualTo = storage.To.Value;
                        }

                        existingStorage         = new StorageLookupResult <TKey, List <TKey>, TEntry>(storage.Storage, null, actualTo);
                        existingStorage.Lookups = new List <TKey>();
                        result.Add(storage, existingStorage);
                    }

                    existingStorage.Lookups.Add(id);
                }
            }

            return(result.Values);
        }
Esempio n. 3
0
        private IEnumerable <StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry> > LookupStorages(IEnumerable <ISerie <TKey, TEntry> > series)
        {
            var fr = new Dictionary <StorageKey <TKey, TEntry>, StorageLookupResult <TKey, Serie <TKey, TEntry>, TEntry> >();

            foreach (var serie in series)
            {
                var key = serie.GetKey();
                foreach (var entry in serie.GetEntries())
                {
                    var storage    = _storageSelector.GetStorage(key, entry);
                    var storageKey = new StorageKey <TKey, TEntry>(key, storage);

                    StorageLookupResult <TKey, Serie <TKey, TEntry>, TEntry> existingStorage;
                    if (!fr.TryGetValue(storageKey, out existingStorage))
                    {
                        existingStorage         = new StorageLookupResult <TKey, Serie <TKey, TEntry>, TEntry>(storage);
                        existingStorage.Lookups = new Serie <TKey, TEntry>(key);
                        fr.Add(storageKey, existingStorage);
                    }

                    existingStorage.Lookups.Entries.Add(entry);
                }
            }

            // collect series into groupings of storage
            var sr = new Dictionary <IStorage <TKey, TEntry>, StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry> >();
            StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry> current = null;

            foreach (var kvp in fr)
            {
                var key = kvp.Key.Storage;
                if (current?.Storage != key && !sr.TryGetValue(key, out current))
                {
                    current         = new StorageLookupResult <TKey, List <Serie <TKey, TEntry> >, TEntry>(kvp.Value.Storage);
                    current.Lookups = new List <Serie <TKey, TEntry> >();
                    sr.Add(key, current);
                }
                current.Lookups.Add(kvp.Value.Lookups);
            }

            return(sr.Values);
        }
Esempio n. 4
0
        private IEnumerable <StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> > LookupStorages(IEnumerable <ITypedKey <TKey, TMeasureType> > taggedIds)
        {
            var result = new Dictionary <StorageSelection <TKey, TEntry, IStorage <TKey, TEntry> >, StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> >();

            foreach (var id in taggedIds)
            {
                var storages = _storageSelector.GetStorage(id.Key, null, null);
                foreach (var storage in storages)
                {
                    StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry> existingStorage;
                    if (!result.TryGetValue(storage, out existingStorage))
                    {
                        existingStorage         = new StorageLookupResult <TKey, List <ITypedKey <TKey, TMeasureType> >, TEntry>(storage.Storage);
                        existingStorage.Lookups = new List <ITypedKey <TKey, TMeasureType> >();
                        result.Add(storage, existingStorage);
                    }

                    existingStorage.Lookups.Add(id);
                }
            }

            return(result.Values);
        }