Пример #1
0
        private SubClassMap CreateSubClassMap(Type classType, Func <Type, IClassMap> classMapFinder)
        {
            //TODO: should probably do something different to find the base type
            //mabe a convention?
            var superClassMap = classMapFinder(classType.BaseType);

            if (superClassMap == null)
            {
                throw new InvalidOperationException(string.Format("Unable to find super class map for subclass {0}", classType));
            }

            var subClassMap = new SubClassMap(classType);

            ((ClassMapBase)superClassMap).AddSubClassMap(subClassMap);
            var discriminator       = _profile.GetDiscriminator(classType);
            var parentDiscriminator = superClassMap.Discriminator;

            if (parentDiscriminator == null)
            {
                subClassMap.Discriminator = discriminator;
            }
            else
            {
                Array array;
                if (parentDiscriminator.GetType().IsArray)
                {
                    array = Array.CreateInstance(typeof(object), ((Array)parentDiscriminator).Length + 1);
                }
                else
                {
                    array = Array.CreateInstance(typeof(object), 2);
                    array.SetValue(parentDiscriminator, 0);
                }

                array.SetValue(discriminator, array.Length - 1);
                subClassMap.Discriminator = array;
            }

            foreach (var member in _profile.FindMembers(classType))
            {
                if (subClassMap.HasId && subClassMap.IdMap.MemberName == member.Name)
                {
                    continue;
                }

                if (subClassMap.HasExtendedProperties && subClassMap.ExtendedPropertiesMap.MemberName == member.Name)
                {
                    continue;
                }

                if (superClassMap.GetMemberMapFromMemberName(member.Name) != null)
                {
                    continue; //don't want to remap a member
                }
                subClassMap.AddMemberMap(CreateMemberMap(classType, member));
            }

            return(subClassMap);
        }
        private void ProcessSubClassMap(SubClassMap map, ObjectAccessor accessor, Dictionary <byte[], TCell> input, ConcurrentDictionary <string, long> ts)
        {
            var target         = Activator.CreateInstance(map.Type);
            var targetAccessor = ObjectAccessor.Create(target);

            Parallel.ForEach(map.Mappers.Select(x => x.ExposeMap()),
                             subMap => { ProcessMap(subMap, targetAccessor, input, ts); });

            accessor[map.Name] = target;
        }
Пример #3
0
        private IEnumerable <HBaseCell> ProcessSubclassMap(SubClassMap map, ObjectAccessor accessor, string key,
                                                           IList <string> descriptors)
        {
            var maps   = map.Mappers.Select(x => x.ExposeMap());
            var target = accessor[map.Name];
            var acc    = ObjectAccessor.Create(target);

            var cells = new ConcurrentBag <IEnumerable <HBaseCell> >();

            Parallel.ForEach(maps, subMap => { cells.Add(ProcessMap(subMap, acc, key, descriptors)); });

            return(cells.SelectMany(x => x));
        }