private void ValidateRelation(dynamic relation) { if (_relations.ContainsKey(relation.Id)) { throw new InvalidRelationIdException(relation.Id); } if (relation.RelationServiceName != _ownName) { throw new InvalidRelationServiceException(relation.RelationServiceName); } string relationType = relation.RelationTypeName; if (relationType == null || !_relationTypes.ContainsKey(relationType)) { throw new RelationTypeNotFoundException(relationType); } RoleResult roles = relation.RetrieveAllRoles(); IRelationType type = _relationTypes[relationType]; foreach (Role r in roles.Roles) { RoleInfo info = type[r.Name]; if (!Role.ValidateRole(r.Value, type[r.Name], _server)) { throw new InvalidRoleValueException(); } } }
public IList <ObjectName> this[string roleName] { get { if (roleName == null) { throw new ArgumentNullException("roleName"); } Role r; if (_roles.TryGetValue(roleName, out r)) { RoleInfo info = _relationService.GetRoleInfo(_relationTypeName, roleName); if (info.Readable) { return(r.Value); } } throw new RoleNotFoundException(roleName); } set { if (roleName == null) { throw new ArgumentNullException("roleName"); } Role r; if (_roles.TryGetValue(roleName, out r)) { RoleInfo info = _relationService.GetRoleInfo(_relationTypeName, roleName); if (!info.Writable) { throw new RoleNotFoundException(roleName); } if (!Role.ValidateRole(value, info, _relationServiceMBeanServer)) { throw new InvalidRoleValueException(); } _roles[roleName] = new Role(roleName, value); } else { throw new RoleNotFoundException(roleName); } } }