Exemple #1
0
        public Object ResolveArgumentRole(IActor resolvedActor, String[] parameters)
        {
            if (parameters.Length != 1)
            {
                throw new SystemException("argument role expects exactly one parameter (role-name) instead of " + parameters.Length);
            }

            IActor actor = null;

            if (resolvedActor == null)
            {
                try
                {
                    var attributeInstance = attributeRepository.FindAttributeInstanceInScope(parameters[0], CurrentScope, DbSession);
                    actor = (IActor)attributeInstance.GetValue();
                    throw new NotImplementedException();
                }
                catch (InvalidCastException e)
                {
                    //throw new SystemException("argument attribute(" + parameters[0] + ") does not contain an actor : " + executionContext.GetAttribute(parameters[0]).GetType().FullName, e);
                }
            }
            else
            {
                String roleName = parameters[0].Trim();

                try
                {
                    IList users = organizationService.FindUsersByGroupAndRole(resolvedActor.Id, roleName);
                    if (users.Count < 1)
                    {
                        throw new SystemException("no users have role " + roleName + " for group " + resolvedActor.Id);
                    }
                    actor = (IUser)users[0];

                    // TODO : create a new group if more then one user is returned on the query...
                }
                catch (InvalidCastException e)
                {
                    throw new SystemException("can't resolve role-argument : a role must be calculated from a Group, not a " + resolvedActor.GetType().FullName, e);
                }
                catch (OrganisationRuntimeException e)
                {
                    throw new SystemException("can't resolve role-argument : can't find the users that perform role " + roleName + " for group " + resolvedActor.Id + " : " + e.Message);
                }
            }

            return(actor);
        }