Exemplo n.º 1
0
        public override object DeepCopy(object component, EntityMode entityMode, ISessionFactoryImplementor factory)
        {
            if (component == null)
            {
                return(null);
            }

            object[] values = GetPropertyValues(component, entityMode);
            for (int i = 0; i < propertySpan; i++)
            {
                values[i] = propertyTypes[i].DeepCopy(values[i], entityMode, factory);
            }

            object result = Instantiate(entityMode);

            SetPropertyValues(result, values, entityMode);

            //not absolutely necessary, but helps for some
            //equals()/hashCode() implementations
            IComponentTuplizer ct = (IComponentTuplizer)tuplizerMapping.GetTuplizer(entityMode);

            if (ct.HasParentProperty)
            {
                ct.SetParent(result, ct.GetParent(component), factory);
            }

            return(result);
        }
Exemplo n.º 2
0
        public virtual object Instantiate(object parent, ISessionImplementor session)
        {
            object result = Instantiate(session.EntityMode);

            IComponentTuplizer ct = (IComponentTuplizer)tuplizerMapping.GetTuplizer(session.EntityMode);

            if (ct.HasParentProperty && parent != null)
            {
                ct.SetParent(result, session.PersistenceContext.ProxyFor(parent), session.Factory);
            }

            return(result);
        }
Exemplo n.º 3
0
        public ComponentEntityModeToTuplizerMapping(Mapping.Component component)
        {
            PersistentClass owner = component.Owner;

            // create our own copy of the user-supplied tuplizer impl map
            Dictionary <EntityMode, string> userSuppliedTuplizerImpls;

            if (component.TuplizerMap != null)
            {
                userSuppliedTuplizerImpls = new Dictionary <EntityMode, string>(component.TuplizerMap);
            }
            else
            {
                userSuppliedTuplizerImpls = new Dictionary <EntityMode, string>();
            }

            // Build the dynamic-map tuplizer...
            ITuplizer dynamicMapTuplizer;
            string    tuplizerImpl;

            if (!userSuppliedTuplizerImpls.TryGetValue(EntityMode.Map, out tuplizerImpl))
            {
                dynamicMapTuplizer = new DynamicMapComponentTuplizer(component);
            }
            else
            {
                dynamicMapTuplizer = BuildComponentTuplizer(tuplizerImpl, component);
                userSuppliedTuplizerImpls.Remove(EntityMode.Map);
            }

            // then the pojo tuplizer, using the dynamic-map tuplizer if no pojo representation is available
            ITuplizer pojoTuplizer;
            string    tempObject2;

            userSuppliedTuplizerImpls.TryGetValue(EntityMode.Poco, out tempObject2);
            userSuppliedTuplizerImpls.Remove(EntityMode.Poco);
            tuplizerImpl = tempObject2;
            if (owner.HasPocoRepresentation && component.HasPocoRepresentation)
            {
                if (tuplizerImpl == null)
                {
                    pojoTuplizer = new PocoComponentTuplizer(component);
                }
                else
                {
                    pojoTuplizer = BuildComponentTuplizer(tuplizerImpl, component);
                }
            }
            else
            {
                pojoTuplizer = dynamicMapTuplizer;
            }

            // put the "standard" tuplizers into the tuplizer map first
            if (pojoTuplizer != null)
            {
                AddTuplizer(EntityMode.Poco, pojoTuplizer);
            }
            if (dynamicMapTuplizer != null)
            {
                AddTuplizer(EntityMode.Map, dynamicMapTuplizer);
            }

            // then handle any user-defined entity modes..
            foreach (KeyValuePair <EntityMode, string> entry in userSuppliedTuplizerImpls)
            {
                IComponentTuplizer tuplizer = BuildComponentTuplizer(entry.Value, component);
                AddTuplizer(entry.Key, tuplizer);
            }
        }