예제 #1
0
        public static PropertyProxy PropertyProxyFactory(ShContext context, PropertyInfo prInfo, ClassProxy parent)
        {
            if (TypeHelper.IsPrimitiveOrAlike(prInfo.PropertyType))
            {
                return(new PropertyPrimitiveProxy(context, prInfo, parent));
            }
            if (prInfo.PropertyType.IsSubclassOf(typeof(Base)))
            {
                return(new PropertyObjectProxy(context, prInfo, parent));
            }
            if (TypeHelper.IsGenericList(prInfo.PropertyType))
            {
                return(new PropertyListProxy(context, prInfo, parent));
            }
            if (TypeHelper.IsDictionary(prInfo.PropertyType))
            {
                return(new PropertyDictionaryProxy(context, prInfo, parent));
            }
            if (prInfo.PropertyType.IsEnum)
            {
                return(new PropertyEnumProxy(context, prInfo, parent));
            }

            throw new Exception("Le type " + prInfo.PropertyType.Name + " n'est pas pris en compte.");
        }
예제 #2
0
파일: ClassProxy.cs 프로젝트: CFLShine/CFL
        public ClassProxy(ShContext context, Type classType, Guid id)
            : base(context)
        {
            ClassProxy _proxy = this;

            ProxyFactory.ClassProxyFactory(Context, ref _proxy, classType, id);
            IsBuilt = true;
        }
예제 #3
0
파일: ClassProxy.cs 프로젝트: CFLShine/CFL
        /// <summary>
        /// La string s représente le type et l'id de l'objet représenté
        /// par le proxy sous la forme typename_id.
        /// Retourne le proxy, ou null si non trouvé.
        /// Provoque une exception si s ne répond pas au format demandé,
        /// ou si le type demandé n'est pas représenté dans le context.
        /// </summary>
        public static ClassProxy GetProxy(ShContext context, string s)
        {
            Tuple <Type, Guid> _representation = BaseObjectRepresentation(context, s);
            Set _set = context.GetSet(_representation.Item1);

            if (_set == null)
            {
                throw new Exception("Le type " + _representation.Item1.Name
                                    + " n'est pas représenté dans le context.");
            }
            return(_set.GetProxy(_representation.Item2));
        }
예제 #4
0
파일: ClassProxy.cs 프로젝트: CFLShine/CFL
        public ClassProxy(ShContext context, Base entity)
            : base(context)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            ClassProxy _proxy = this;

            ProxyFactory.ClassProxyFactory(Context, ref _proxy, entity.GetType(), entity.ID);
            __entity = entity;
            UpdateProxyValues();
            IsBuilt = true;
        }
예제 #5
0
파일: ClassProxy.cs 프로젝트: CFLShine/CFL
        /// <summary>
        /// La string s représente le type et l'id de l'objet représenté
        /// par le proxy sous la forme typename_id.
        /// Retourne un Tuple de Set, Guid représeantant l'objet.
        /// Provoque une exception si s ne répond pas au format demandé,
        /// si le type demandé n'est pas représenté dans le context,
        /// si context est null.
        /// </summary>
        public static Tuple <Type, Guid> BaseObjectRepresentation(ShContext context, string s)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (string.IsNullOrWhiteSpace(s) || !s.Contains("_"))
            {
                throw new Exception("s ne répond pas au format typename_id");
            }

            string[] _elements = s.Split('_');
            if (_elements.Length != 2 ||
                string.IsNullOrWhiteSpace(_elements[0]) ||
                string.IsNullOrWhiteSpace(_elements[1]))
            {
                throw new Exception("s ne répond pas au format typename_id");
            }

            Set _set = context.GetSet(_elements[0]);

            if (_set == null)
            {
                throw new Exception("Le type " + _elements[0] + " n'est pas représenté dans le context");
            }

            Guid _guid;

            if (!Guid.TryParse(_elements[1], out _guid))
            {
                throw new Exception("La chaine " + _elements[1] + "ne représente pas un Guid valide");
            }

            return(new Tuple <Type, Guid>(_set.Type, _guid));
        }
예제 #6
0
        public static ClassProxy ClassProxyFactory(ShContext context, ref ClassProxy proxy, Type t, Guid id)
        {
            if (proxy == null)
            {
                return(new ClassProxy(context, t, id));// appellera cette fonction à nouveau.
            }
            proxy.Context = context;
            proxy.Type    = t;

            if (proxy.ID == Guid.Empty)
            {
                proxy.ID = id;
            }

            foreach (PropertyInfo _pr in t.GetProperties())
            {
                if (PropertyHelper.IsMappableProperty(_pr))
                {
                    proxy.SetProperty(_pr.Name, PropertyProxyFactory(context, _pr, proxy));
                }
            }

            return(proxy);
        }
예제 #7
0
 public PropertyProxy(ShContext context, PropertyInfo prInfo, ClassProxy parent)
     : base(context)
 {
     PropertyInfo = prInfo;
     Parent       = parent;
 }
예제 #8
0
 public PropertyProxy(ShContext context)
     : base(context)
 {
 }
예제 #9
0
파일: ClassProxy.cs 프로젝트: CFLShine/CFL
 public Proxy(ShContext context)
 {
     Context = context;
 }