예제 #1
0
        public override bool MapToEntityFromMap(object obj, IDictionary data)
        {
            if (data == null || obj == null)
            {
                return(false);
            }

            var objType = obj.GetType();
            var getter  = ReflectionTools.GetGetter(objType, _idPropertyData);
            var setter  = ReflectionTools.GetSetter(objType, _idPropertyData);

            try
            {
                var subObj = ReflectionTools.CreateInstanceByDefaultConstructor(getter.ReturnType);
                var ret    = true;
                foreach (var idMapper in Ids.Values)
                {
                    ret &= idMapper.MapToEntityFromMap(subObj, data);
                }
                if (ret)
                {
                    setter.Set(obj, subObj);
                }
                return(ret);
            }
            catch (Exception e)
            {
                throw new AuditException("Cannot create instance of type " + getter.ReturnType, e);
            }
        }
예제 #2
0
        public object MapToObjectFromFullMap(EntityInstantiator entityInstantiator, IDictionary data, object dataObject, long revision)
        {
            var componentInstance = dataObject ?? ReflectionTools.CreateInstanceByDefaultConstructor(_componentClass);

            _delegate.MapToEntityFromMap(entityInstantiator.AuditConfiguration, componentInstance, data, null,
                                         entityInstantiator.AuditReaderImplementor, revision);
            return(componentInstance);
        }
예제 #3
0
        public void MapToEntityFromMap(AuditConfiguration verCfg, object obj, IDictionary data,
                                       object primaryKey, IAuditReaderImplementor versionsReader, long revision)
        {
            if (data == null || obj == null)
            {
                return;
            }

            if (_propertyData.BeanName == null)
            {
                // If properties are not encapsulated in a component but placed directly in a class
                // (e.g. by applying <properties> tag).
                _delegate.MapToEntityFromMap(verCfg, obj, data, primaryKey, versionsReader, revision);
                return;
            }

            var setter = ReflectionTools.GetSetter(obj.GetType(), _propertyData);

            // If all properties are null and single, then the component has to be null also.
            var allNullAndSingle = true;

            foreach (var property in _delegate.Properties)
            {
                if (data[property.Key.Name] != null || !(property.Value is SinglePropertyMapper))
                {
                    allNullAndSingle = false;
                    break;
                }
            }

            if (allNullAndSingle)
            {
                // single property, but default value need not be null, so we'll set it to null anyway
                setter.Set(obj, null);
            }
            else
            {
                var componentType = Toolz.ResolveDotnetType(_componentClassName);
                var subObj        = ReflectionTools.CreateInstanceByDefaultConstructor(componentType);
                _delegate.MapToEntityFromMap(verCfg, subObj, data, primaryKey, versionsReader, revision);
                setter.Set(obj, subObj);
            }
        }
 public object Instantiate(System.Type entityType)
 {
     return(ReflectionTools.CreateInstanceByDefaultConstructor(entityType));
 }