From 68c7842fe756904185c4311c2a040ed91d91595a Mon Sep 17 00:00:00 2001 From: SignpostMarv Date: Mon, 2 Jan 2012 09:48:33 +0000 Subject: [PATCH] adding a webui-friendly method for getting a list of groups by a list of group IDs --- .../IGroupsServiceConnector.cs | 3 +- .../Local/LocalGroupsServiceConnector.cs | 78 +++++++------ .../RemoteGroupsServiceConnector.cs | 107 ++++++++++-------- 3 files changed, 107 insertions(+), 81 deletions(-) diff --git a/Aurora/Framework/DatabaseInterfaces/IGroupsServiceConnector.cs b/Aurora/Framework/DatabaseInterfaces/IGroupsServiceConnector.cs index 9c6e20b3f4..783fd1d3af 100644 --- a/Aurora/Framework/DatabaseInterfaces/IGroupsServiceConnector.cs +++ b/Aurora/Framework/DatabaseInterfaces/IGroupsServiceConnector.cs @@ -67,7 +67,8 @@ public interface IGroupsServiceConnector : IAuroraDataPlugin uint GetNumberOfGroups(UUID requestingAgentID, Dictionary boolFields); GroupRecord GetGroupRecord(UUID requestingAgentID, UUID GroupID, string GroupName); - List GetGroupRecords(UUID requestingAgentID, uint start, uint count, Dictionary sort, Dictionary boolFields); + List GetGroupRecords(UUID requestingAgentID, uint start, uint count, Dictionary sort, Dictionary boolFields); + List GetGroupRecords(UUID requestingAgentID, List GroupIDs); GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID); diff --git a/Aurora/Services/DataService/Connectors/Local/LocalGroupsServiceConnector.cs b/Aurora/Services/DataService/Connectors/Local/LocalGroupsServiceConnector.cs index ee684e6a20..5700cc73db 100644 --- a/Aurora/Services/DataService/Connectors/Local/LocalGroupsServiceConnector.cs +++ b/Aurora/Services/DataService/Connectors/Local/LocalGroupsServiceConnector.cs @@ -582,6 +582,22 @@ public uint GetNumberOfGroups(UUID requestingAgentID, Dictionary b return uint.Parse(numGroups[0]); } + private static GroupRecord GroupRecordQueryResult2GroupRecord(List result){ + return new GroupRecord{ + GroupID = UUID.Parse(result[0]), + GroupName = result[1], + Charter = result[2], + GroupPicture = UUID.Parse(result[3]), + FounderID = UUID.Parse(result[4]), + MembershipFee = int.Parse(result[5]), + OpenEnrollment = int.Parse(result[6]) == 1, + ShowInList = int.Parse(result[7]) == 1, + AllowPublish = int.Parse(result[8]) == 1, + MaturePublish = int.Parse(result[9]) == 1, + OwnerRoleID = UUID.Parse(result[10]) + }; + } + public GroupRecord GetGroupRecord(UUID requestingAgentID, UUID GroupID, string GroupName) { GroupRecord record = new GroupRecord(); @@ -598,23 +614,8 @@ public GroupRecord GetGroupRecord(UUID requestingAgentID, UUID GroupID, string G Keys.Add("Name"); Values.Add(GroupName.MySqlEscape(50)); } - List osgroupsData = data.Query(Keys.ToArray(), Values.ToArray(), "osgroup", - "GroupID, Name, Charter, InsigniaID, FounderID, MembershipFee, OpenEnrollment, ShowInList, AllowPublish, MaturePublish, OwnerRoleID"); - if (osgroupsData.Count == 0) - return null; - record.GroupID = UUID.Parse(osgroupsData[0]); - record.GroupName = osgroupsData[1]; - record.Charter = osgroupsData[2]; - record.GroupPicture = UUID.Parse(osgroupsData[3]); - record.FounderID = UUID.Parse(osgroupsData[4]); - record.MembershipFee = int.Parse(osgroupsData[5]); - record.OpenEnrollment = int.Parse(osgroupsData[6]) == 1; - record.ShowInList = int.Parse(osgroupsData[7]) == 1; - record.AllowPublish = int.Parse(osgroupsData[8]) == 1; - record.MaturePublish = int.Parse(osgroupsData[9]) == 1; - record.OwnerRoleID = UUID.Parse(osgroupsData[10]); - - return record; + List osgroupsData = data.Query(Keys.ToArray(), Values.ToArray(), "osgroup", "GroupID, Name, Charter, InsigniaID, FounderID, MembershipFee, OpenEnrollment, ShowInList, AllowPublish, MaturePublish, OwnerRoleID"); + return (osgroupsData.Count == 0) ? null : GroupRecordQueryResult2GroupRecord(osgroupsData); } public List GetGroupRecords(UUID requestingAgentID, uint start, uint count, Dictionary sort, Dictionary boolFields) @@ -663,32 +664,39 @@ public List GetGroupRecords(UUID requestingAgentID, uint start, uin List Reply = new List(); - GroupRecord group; - Dictionary groupDict; List osgroupsData = data.Query(whereClause, "osgroup", "GroupID, Name, Charter, InsigniaID, FounderID, MembershipFee, OpenEnrollment, ShowInList, AllowPublish, MaturePublish, OwnerRoleID"); if (osgroupsData.Count < 11) { return Reply; } - for (int i = 0; i < osgroupsData.Count; ) - { - groupDict = new Dictionary(); - groupDict["GroupID"] = osgroupsData[i++]; - groupDict["GroupName"] = osgroupsData[i++]; - groupDict["Charter"] = osgroupsData[i++]; - groupDict["GroupPicture"] = osgroupsData[i++]; - groupDict["FounderID"] = osgroupsData[i++]; - groupDict["MembershipFee"] = osgroupsData[i++]; - groupDict["OpenEnrollment"] = int.Parse(osgroupsData[i++]) == 1 ? "true" : "false"; - groupDict["ShowInList"] = int.Parse(osgroupsData[i++]) == 1 ? "true" : "false"; - groupDict["AllowPublish"] = int.Parse(osgroupsData[i++]) == 1 ? "true" : "false"; - groupDict["MaturePublish"] = int.Parse(osgroupsData[i++]) == 1 ? "true" : "false"; - groupDict["OwnerRoleID"] = osgroupsData[i++]; - group = new GroupRecord(groupDict); - Reply.Add(group); + for (int i = 0; i < osgroupsData.Count; i+= 11) + { + Reply.Add(GroupRecordQueryResult2GroupRecord(osgroupsData.GetRange(i, 11))); } return Reply; + } + + public List GetGroupRecords(UUID requestingAgentID, List GroupIDs) + { + List Reply = new List(0); + if (GroupIDs.Count <= 0) + { + return Reply; + } + + string whereClause = "GroupID = '" + string.Join("' OR GroupID = '", GroupIDs.ConvertAll(x => x.ToString()).ToArray()) + "'"; + + List osgroupsData = data.Query(whereClause, "osgroup", "GroupID, Name, Charter, InsigniaID, FounderID, MembershipFee, OpenEnrollment, ShowInList, AllowPublish, MaturePublish, OwnerRoleID"); + if (osgroupsData.Count < 11) + { + return Reply; + } + for (int i = 0; i < osgroupsData.Count; i += 11) + { + Reply.Add(GroupRecordQueryResult2GroupRecord(osgroupsData.GetRange(i, 11))); + } + return Reply; } public GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID) diff --git a/Aurora/Services/DataService/Connectors/RobustRemote/RemoteGroupsServiceConnector.cs b/Aurora/Services/DataService/Connectors/RobustRemote/RemoteGroupsServiceConnector.cs index 76f2f21119..778545e665 100644 --- a/Aurora/Services/DataService/Connectors/RobustRemote/RemoteGroupsServiceConnector.cs +++ b/Aurora/Services/DataService/Connectors/RobustRemote/RemoteGroupsServiceConnector.cs @@ -763,44 +763,36 @@ public GroupRecord GetGroupRecord(UUID requestingAgentID, UUID GroupID, string G } return null; - } - - public List GetGroupRecords(UUID requestingAgentID, uint start, uint count, Dictionary sort, Dictionary boolFields) - { - Dictionary sendData = new Dictionary(); - - sendData["METHOD"] = "GetGroupRecords"; - sendData["requestingAgentID"] = requestingAgentID.ToString(); - sendData["start"] = start; - sendData["count"] = count; - sendData["sort"] = sort; - sendData["boolFields"] = boolFields; - string reqString = WebUtils.BuildXmlResponse(sendData); - - try - { - List m_ServerURIs = m_registry.RequestModuleInterface().FindValueOf("RemoteServerURI"); -#if (!ISWIN) - foreach (string mServerUri in m_ServerURIs) - { - string reply = SynchronousRestFormsRequester.MakeRequest("POST", mServerUri, reqString); - if (reply != string.Empty) - { - Dictionary replyData = WebUtils.ParseXmlResponse(reply); - if (replyData != null) - { - Dictionary.ValueCollection replyvalues = replyData.Values; - // Success - List list = new List(); - foreach (object replyvalue in replyvalues) - { - Dictionary f = replyvalue as Dictionary; - if (f != null) list.Add(new GroupRecord(f)); - } - return list; - } - } - } + } + + private static List remoteGroupRecordsQueryResult(IRegistryCore registry, Dictionary sendData) + { + string reqString = WebUtils.BuildXmlResponse(sendData); + + try + { + List m_ServerURIs = registry.RequestModuleInterface().FindValueOf("RemoteServerURI"); +#if (!ISWIN) + foreach (string mServerUri in m_ServerURIs) + { + string reply = SynchronousRestFormsRequester.MakeRequest("POST", mServerUri, reqString); + if (reply != string.Empty) + { + Dictionary replyData = WebUtils.ParseXmlResponse(reply); + if (replyData != null) + { + Dictionary.ValueCollection replyvalues = replyData.Values; + // Success + List list = new List(); + foreach (object replyvalue in replyvalues) + { + Dictionary f = replyvalue as Dictionary; + if (f != null) list.Add(new GroupRecord(f)); + } + return list; + } + } + } #else foreach (Dictionary.ValueCollection replyvalues in from m_ServerURI in m_ServerURIs select SynchronousRestFormsRequester.MakeRequest("POST", @@ -814,15 +806,40 @@ select WebUtils.ParseXmlResponse(reply) into replyData // Success return replyvalues.OfType>().Select(f => new GroupRecord(f)).ToList(); } -#endif +#endif + + } + catch (Exception e) + { + MainConsole.Instance.DebugFormat("[AuroraRemoteGroupsServiceConnector]: Exception when contacting server: {0}", e); + } + + return new List(0); + } - } - catch (Exception e) - { - MainConsole.Instance.DebugFormat("[AuroraRemoteGroupsServiceConnector]: Exception when contacting server: {0}", e); - } + public List GetGroupRecords(UUID requestingAgentID, uint start, uint count, Dictionary sort, Dictionary boolFields) + { + Dictionary sendData = new Dictionary(); - return new List(); + sendData["METHOD"] = "GetGroupRecords"; + sendData["requestingAgentID"] = requestingAgentID.ToString(); + sendData["start"] = start; + sendData["count"] = count; + sendData["sort"] = sort; + sendData["boolFields"] = boolFields; + + return remoteGroupRecordsQueryResult(m_registry, sendData); + } + + public List GetGroupRecords(UUID requestingAgentID, List GroupIDs) + { + Dictionary sendData = new Dictionary(); + + sendData["METHOD"] = "GetGroupRecords"; + sendData["requestingAgentID"] = requestingAgentID.ToString(); + sendData["GroupIDs"] = GroupIDs; + + return remoteGroupRecordsQueryResult(m_registry, sendData); } public GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID)