/// <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)); }
/// <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)); }