OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
PGSQLGroupsData.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using System.Collections;
30 using System.Collections.Generic;
31 using System.Reflection;
32 using OpenSim.Framework;
33 using OpenMetaverse;
34 using log4net;
35 using Npgsql;
36 
37 namespace OpenSim.Data.PGSQL
38 {
40  {
41  private PGSqlGroupsGroupsHandler m_Groups;
42  private PGSqlGroupsMembershipHandler m_Membership;
43  private PGSqlGroupsRolesHandler m_Roles;
44  private PGSqlGroupsRoleMembershipHandler m_RoleMembership;
45  private PGSqlGroupsInvitesHandler m_Invites;
46  private PGSqlGroupsNoticesHandler m_Notices;
47  private PGSqlGroupsPrincipalsHandler m_Principals;
48 
49  public PGSQLGroupsData(string connectionString, string realm)
50  {
51  m_Groups = new PGSqlGroupsGroupsHandler(connectionString, realm + "_groups", realm + "_Store");
52  m_Membership = new PGSqlGroupsMembershipHandler(connectionString, realm + "_membership");
53  m_Roles = new PGSqlGroupsRolesHandler(connectionString, realm + "_roles");
54  m_RoleMembership = new PGSqlGroupsRoleMembershipHandler(connectionString, realm + "_rolemembership");
55  m_Invites = new PGSqlGroupsInvitesHandler(connectionString, realm + "_invites");
56  m_Notices = new PGSqlGroupsNoticesHandler(connectionString, realm + "_notices");
57  m_Principals = new PGSqlGroupsPrincipalsHandler(connectionString, realm + "_principals");
58  }
59 
60  #region groups table
61  public bool StoreGroup(GroupData data)
62  {
63  return m_Groups.Store(data);
64  }
65 
66  public GroupData RetrieveGroup(UUID groupID)
67  {
68  GroupData[] groups = m_Groups.Get("GroupID", groupID.ToString());
69  if (groups.Length > 0)
70  return groups[0];
71 
72  return null;
73  }
74 
75  public GroupData RetrieveGroup(string name)
76  {
77  GroupData[] groups = m_Groups.Get("Name", name);
78  if (groups.Length > 0)
79  return groups[0];
80 
81  return null;
82  }
83 
84  public GroupData[] RetrieveGroups(string pattern)
85  {
86 
87  if (string.IsNullOrEmpty(pattern)) // True for where clause
88  {
89  pattern = " 1 ORDER BY lower(\"Name\") LIMIT 100";
90 
91  return m_Groups.Get(pattern);
92  }
93  else
94  {
95  pattern = " \"ShowInList\" = 1 AND lower(\"Name\") LIKE lower('%" + pattern + "%') ORDER BY lower(\"Name\") LIMIT 100";
96 
97  return m_Groups.Get(pattern, new NpgsqlParameter("pattern", pattern));
98  }
99  }
100 
101  public bool DeleteGroup(UUID groupID)
102  {
103  return m_Groups.Delete("GroupID", groupID.ToString());
104  }
105 
106  public int GroupsCount()
107  {
108  return (int)m_Groups.GetCount(" \"Location\" = \"\"");
109  }
110 
111  #endregion
112 
113  #region membership table
114  public MembershipData[] RetrieveMembers(UUID groupID)
115  {
116  return m_Membership.Get("GroupID", groupID.ToString());
117  }
118 
119  public MembershipData RetrieveMember(UUID groupID, string pricipalID)
120  {
121  MembershipData[] m = m_Membership.Get(new string[] { "GroupID", "PrincipalID" },
122  new string[] { groupID.ToString(), pricipalID });
123  if (m != null && m.Length > 0)
124  return m[0];
125 
126  return null;
127  }
128 
129  public MembershipData[] RetrieveMemberships(string pricipalID)
130  {
131  return m_Membership.Get("PrincipalID", pricipalID.ToString());
132  }
133 
134  public bool StoreMember(MembershipData data)
135  {
136  return m_Membership.Store(data);
137  }
138 
139  public bool DeleteMember(UUID groupID, string pricipalID)
140  {
141  return m_Membership.Delete(new string[] { "GroupID", "PrincipalID" },
142  new string[] { groupID.ToString(), pricipalID });
143  }
144 
145  public int MemberCount(UUID groupID)
146  {
147  return (int)m_Membership.GetCount("GroupID", groupID.ToString());
148  }
149  #endregion
150 
151  #region roles table
152  public bool StoreRole(RoleData data)
153  {
154  return m_Roles.Store(data);
155  }
156 
157  public RoleData RetrieveRole(UUID groupID, UUID roleID)
158  {
159  RoleData[] data = m_Roles.Get(new string[] { "GroupID", "RoleID" },
160  new string[] { groupID.ToString(), roleID.ToString() });
161 
162  if (data != null && data.Length > 0)
163  return data[0];
164 
165  return null;
166  }
167 
168  public RoleData[] RetrieveRoles(UUID groupID)
169  {
170  //return m_Roles.RetrieveRoles(groupID);
171  return m_Roles.Get("GroupID", groupID.ToString());
172  }
173 
174  public bool DeleteRole(UUID groupID, UUID roleID)
175  {
176  return m_Roles.Delete(new string[] { "GroupID", "RoleID" },
177  new string[] { groupID.ToString(), roleID.ToString() });
178  }
179 
180  public int RoleCount(UUID groupID)
181  {
182  return (int)m_Roles.GetCount("GroupID", groupID.ToString());
183  }
184 
185 
186  #endregion
187 
188  #region rolememberhip table
190  {
191  RoleMembershipData[] data = m_RoleMembership.Get("GroupID", groupID.ToString());
192 
193  return data;
194  }
195 
196  public RoleMembershipData[] RetrieveRoleMembers(UUID groupID, UUID roleID)
197  {
198  RoleMembershipData[] data = m_RoleMembership.Get(new string[] { "GroupID", "RoleID" },
199  new string[] { groupID.ToString(), roleID.ToString() });
200 
201  return data;
202  }
203 
204  public RoleMembershipData[] RetrieveMemberRoles(UUID groupID, string principalID)
205  {
206  RoleMembershipData[] data = m_RoleMembership.Get(new string[] { "GroupID", "PrincipalID" },
207  new string[] { groupID.ToString(), principalID.ToString() });
208 
209  return data;
210  }
211 
212  public RoleMembershipData RetrieveRoleMember(UUID groupID, UUID roleID, string principalID)
213  {
214  RoleMembershipData[] data = m_RoleMembership.Get(new string[] { "GroupID", "RoleID", "PrincipalID" },
215  new string[] { groupID.ToString(), roleID.ToString(), principalID.ToString() });
216 
217  if (data != null && data.Length > 0)
218  return data[0];
219 
220  return null;
221  }
222 
223  public int RoleMemberCount(UUID groupID, UUID roleID)
224  {
225  return (int)m_RoleMembership.GetCount(new string[] { "GroupID", "RoleID" },
226  new string[] { groupID.ToString(), roleID.ToString() });
227  }
228 
230  {
231  return m_RoleMembership.Store(data);
232  }
233 
235  {
236  return m_RoleMembership.Delete(new string[] { "GroupID", "RoleID", "PrincipalID"},
237  new string[] { data.GroupID.ToString(), data.RoleID.ToString(), data.PrincipalID });
238  }
239 
240  public bool DeleteMemberAllRoles(UUID groupID, string principalID)
241  {
242  return m_RoleMembership.Delete(new string[] { "GroupID", "PrincipalID" },
243  new string[] { groupID.ToString(), principalID });
244  }
245 
246  #endregion
247 
248  #region principals table
249  public bool StorePrincipal(PrincipalData data)
250  {
251  return m_Principals.Store(data);
252  }
253 
254  public PrincipalData RetrievePrincipal(string principalID)
255  {
256  PrincipalData[] p = m_Principals.Get("PrincipalID", principalID);
257  if (p != null && p.Length > 0)
258  return p[0];
259 
260  return null;
261  }
262 
263  public bool DeletePrincipal(string principalID)
264  {
265  return m_Principals.Delete("PrincipalID", principalID);
266  }
267  #endregion
268 
269  #region invites table
270 
271  public bool StoreInvitation(InvitationData data)
272  {
273  return m_Invites.Store(data);
274  }
275 
276  public InvitationData RetrieveInvitation(UUID inviteID)
277  {
278  InvitationData[] invites = m_Invites.Get("InviteID", inviteID.ToString());
279 
280  if (invites != null && invites.Length > 0)
281  return invites[0];
282 
283  return null;
284  }
285 
286  public InvitationData RetrieveInvitation(UUID groupID, string principalID)
287  {
288  InvitationData[] invites = m_Invites.Get(new string[] { "GroupID", "PrincipalID" },
289  new string[] { groupID.ToString(), principalID });
290 
291  if (invites != null && invites.Length > 0)
292  return invites[0];
293 
294  return null;
295  }
296 
297  public bool DeleteInvite(UUID inviteID)
298  {
299  return m_Invites.Delete("InviteID", inviteID.ToString());
300  }
301 
302  public void DeleteOldInvites()
303  {
304  m_Invites.DeleteOld();
305  }
306 
307  #endregion
308 
309  #region notices table
310 
311  public bool StoreNotice(NoticeData data)
312  {
313  return m_Notices.Store(data);
314  }
315 
316  public NoticeData RetrieveNotice(UUID noticeID)
317  {
318  NoticeData[] notices = m_Notices.Get("NoticeID", noticeID.ToString());
319 
320  if (notices != null && notices.Length > 0)
321  return notices[0];
322 
323  return null;
324  }
325 
326  public NoticeData[] RetrieveNotices(UUID groupID)
327  {
328  NoticeData[] notices = m_Notices.Get("GroupID", groupID.ToString());
329 
330  return notices;
331  }
332 
333  public bool DeleteNotice(UUID noticeID)
334  {
335  return m_Notices.Delete("NoticeID", noticeID.ToString());
336  }
337 
338  public void DeleteOldNotices()
339  {
340  m_Notices.DeleteOld();
341  }
342 
343  #endregion
344 
345  #region combinations
346  public MembershipData RetrievePrincipalGroupMembership(string principalID, UUID groupID)
347  {
348  // TODO
349  return null;
350  }
352  {
353  // TODO
354  return null;
355  }
356 
357  #endregion
358  }
359 
360  public class PGSqlGroupsGroupsHandler : PGSQLGenericTableHandler<GroupData>
361  {
362  protected override Assembly Assembly
363  {
364  // WARNING! Moving migrations to this assembly!!!
365  get { return GetType().Assembly; }
366  }
367 
368  public PGSqlGroupsGroupsHandler(string connectionString, string realm, string store)
369  : base(connectionString, realm, store)
370  {
371  }
372 
373  }
374 
375  public class PGSqlGroupsMembershipHandler : PGSQLGenericTableHandler<MembershipData>
376  {
377  protected override Assembly Assembly
378  {
379  // WARNING! Moving migrations to this assembly!!!
380  get { return GetType().Assembly; }
381  }
382 
383  public PGSqlGroupsMembershipHandler(string connectionString, string realm)
384  : base(connectionString, realm, string.Empty)
385  {
386  }
387 
388  }
389 
390  public class PGSqlGroupsRolesHandler : PGSQLGenericTableHandler<RoleData>
391  {
392  protected override Assembly Assembly
393  {
394  // WARNING! Moving migrations to this assembly!!!
395  get { return GetType().Assembly; }
396  }
397 
398  public PGSqlGroupsRolesHandler(string connectionString, string realm)
399  : base(connectionString, realm, string.Empty)
400  {
401  }
402 
403  }
404 
405  public class PGSqlGroupsRoleMembershipHandler : PGSQLGenericTableHandler<RoleMembershipData>
406  {
407  protected override Assembly Assembly
408  {
409  // WARNING! Moving migrations to this assembly!!!
410  get { return GetType().Assembly; }
411  }
412 
413  public PGSqlGroupsRoleMembershipHandler(string connectionString, string realm)
414  : base(connectionString, realm, string.Empty)
415  {
416  }
417 
418  }
419 
420  public class PGSqlGroupsInvitesHandler : PGSQLGenericTableHandler<InvitationData>
421  {
422  protected override Assembly Assembly
423  {
424  // WARNING! Moving migrations to this assembly!!!
425  get { return GetType().Assembly; }
426  }
427 
428  public PGSqlGroupsInvitesHandler(string connectionString, string realm)
429  : base(connectionString, realm, string.Empty)
430  {
431  }
432 
433  public void DeleteOld()
434  {
435 
436  using (NpgsqlCommand cmd = new NpgsqlCommand())
437  {
438  cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm);
439 
440  ExecuteNonQuery(cmd);
441  }
442 
443  }
444  }
445 
446  public class PGSqlGroupsNoticesHandler : PGSQLGenericTableHandler<NoticeData>
447  {
448  protected override Assembly Assembly
449  {
450  // WARNING! Moving migrations to this assembly!!!
451  get { return GetType().Assembly; }
452  }
453 
454  public PGSqlGroupsNoticesHandler(string connectionString, string realm)
455  : base(connectionString, realm, string.Empty)
456  {
457  }
458 
459  public void DeleteOld()
460  {
461 
462  using (NpgsqlCommand cmd = new NpgsqlCommand())
463  {
464  cmd.CommandText = String.Format("delete from {0} where \"TMStamp\" < CURRENT_DATE - INTERVAL '2 week'", m_Realm);
465 
466  ExecuteNonQuery(cmd);
467  }
468 
469  }
470  }
471 
472  public class PGSqlGroupsPrincipalsHandler : PGSQLGenericTableHandler<PrincipalData>
473  {
474  protected override Assembly Assembly
475  {
476  // WARNING! Moving migrations to this assembly!!!
477  get { return GetType().Assembly; }
478  }
479 
480  public PGSqlGroupsPrincipalsHandler(string connectionString, string realm)
481  : base(connectionString, realm, string.Empty)
482  {
483  }
484  }
485 }
bool DeleteRoleMember(RoleMembershipData data)
InvitationData RetrieveInvitation(UUID groupID, string principalID)
PGSqlGroupsNoticesHandler(string connectionString, string realm)
RoleMembershipData RetrieveRoleMember(UUID groupID, UUID roleID, string principalID)
RoleMembershipData[] RetrieveMemberRoles(UUID groupID, string principalID)
bool DeleteRole(UUID groupID, UUID roleID)
NoticeData RetrieveNotice(UUID noticeID)
InvitationData RetrieveInvitation(UUID inviteID)
PGSqlGroupsGroupsHandler(string connectionString, string realm, string store)
bool StoreInvitation(InvitationData data)
PGSQLGroupsData(string connectionString, string realm)
RoleData RetrieveRole(UUID groupID, UUID roleID)
PGSqlGroupsInvitesHandler(string connectionString, string realm)
RoleMembershipData[] RetrieveRoleMembers(UUID groupID, UUID roleID)
RoleMembershipData[] RetrieveRolesMembers(UUID groupID)
MembershipData RetrieveMember(UUID groupID, string pricipalID)
bool StorePrincipal(PrincipalData data)
PGSqlGroupsPrincipalsHandler(string connectionString, string realm)
int RoleMemberCount(UUID groupID, UUID roleID)
MembershipData[] RetrieveMemberships(string pricipalID)
GroupData RetrieveGroup(string name)
PGSqlGroupsMembershipHandler(string connectionString, string realm)
PGSqlGroupsRolesHandler(string connectionString, string realm)
bool DeleteMemberAllRoles(UUID groupID, string principalID)
MembershipData[] RetrievePrincipalGroupMemberships(string principalID)
GroupData[] RetrieveGroups(string pattern)
MembershipData[] RetrieveMembers(UUID groupID)
bool DeleteMember(UUID groupID, string pricipalID)
GroupData RetrieveGroup(UUID groupID)
bool DeletePrincipal(string principalID)
MembershipData RetrievePrincipalGroupMembership(string principalID, UUID groupID)
PGSqlGroupsRoleMembershipHandler(string connectionString, string realm)
RoleData[] RetrieveRoles(UUID groupID)
PrincipalData RetrievePrincipal(string principalID)
NoticeData[] RetrieveNotices(UUID groupID)
bool StoreRoleMember(RoleMembershipData data)
bool StoreMember(MembershipData data)