Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs @ 1166

Last change on this file since 1166 was 1166, checked in by svonolfe, 15 years ago

Improved memory consumption, fixed bug that already calculated jobs where reset (#372)

File size: 9.0 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Linq;
25using System.Text;
26
27using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
28using HeuristicLab.Hive.Contracts.BusinessObjects;
29using System.Runtime.CompilerServices;
30using System.Data;
31
32namespace HeuristicLab.Hive.Server.ADODataAccess {
33  class UserGroupAdapter:
34    DataAdapterBase<
35      dsHiveServerTableAdapters.UserGroupTableAdapter,
36      UserGroup,
37      dsHiveServer.UserGroupRow>,
38    IUserGroupAdapter {
39
40    #region Fields
41    private dsHiveServerTableAdapters.PermissionOwner_UserGroupTableAdapter permOwnerUserGroupAdapter =
42      new dsHiveServerTableAdapters.PermissionOwner_UserGroupTableAdapter();
43
44    private IPermissionOwnerAdapter permOwnerAdapter = null;
45
46    private IPermissionOwnerAdapter PermOwnerAdapter {
47      get {
48        if (permOwnerAdapter == null)
49          permOwnerAdapter = ServiceLocator.GetPermissionOwnerAdapter();
50
51        return permOwnerAdapter;
52      }
53    }
54
55    private IUserAdapter userAdapter = null;
56
57    private IUserAdapter UserAdapter {
58      get {
59        if (userAdapter == null)
60          userAdapter = ServiceLocator.GetUserAdapter();
61
62        return userAdapter;
63      }
64    }
65    #endregion
66
67    #region Overrides
68    protected override UserGroup ConvertRow(dsHiveServer.UserGroupRow row,
69      UserGroup userGroup) {
70      if (row != null && userGroup != null) {
71        /*Parent - Permission Owner*/
72        userGroup.Id = row.PermissionOwnerId;
73        PermOwnerAdapter.GetById(userGroup);
74
75        //first check for created references
76        dsHiveServer.PermissionOwner_UserGroupDataTable userGroupRows =
77          permOwnerUserGroupAdapter.GetDataByUserGroupId(userGroup.Id);
78
79        foreach (dsHiveServer.PermissionOwner_UserGroupRow permOwnerUserGroupRow in
80          userGroupRows) {
81          PermissionOwner permOwner = null;
82         
83          IEnumerable<PermissionOwner> permOwners =
84            from p in
85              userGroup.Members
86            where p.Id == permOwnerUserGroupRow.PermissionOwnerId
87            select p;
88          if (permOwners.Count<PermissionOwner>() == 1)
89            permOwner = permOwners.First<PermissionOwner>();
90
91          if (permOwner == null) {
92            PermissionOwner permissionOwner =
93              UserAdapter.GetById(permOwnerUserGroupRow.PermissionOwnerId);
94
95            if (permissionOwner == null) {
96              //is a user group
97              permissionOwner =
98                GetById(permOwnerUserGroupRow.PermissionOwnerId);
99            }
100
101            if(permissionOwner != null)
102              userGroup.Members.Add(permissionOwner);
103          }
104        }
105
106        //secondly check for deleted references
107        ICollection<PermissionOwner> deleted =
108          new List<PermissionOwner>();
109
110        foreach (PermissionOwner permOwner in userGroup.Members) {
111          dsHiveServer.PermissionOwner_UserGroupDataTable found =
112            permOwnerUserGroupAdapter.GetDataByPermownerUsergroupId(
113              permOwner.Id,
114              userGroup.Id);
115          if (found.Count != 1) {
116            deleted.Add(permOwner);
117          }
118        }
119
120        foreach (PermissionOwner permOwner in deleted) {
121          userGroup.Members.Remove(permOwner);
122        }
123
124        return userGroup;
125      } else
126        return null;
127    }
128
129    protected override dsHiveServer.UserGroupRow ConvertObj(UserGroup userGroup,
130      dsHiveServer.UserGroupRow row) {
131      if (userGroup != null && row != null) {
132        row.PermissionOwnerId = userGroup.Id;
133     
134        //update references
135        foreach (PermissionOwner permOwner in userGroup.Members) {         
136          //first update the member to make sure it exists in the DB
137          if (permOwner is User) {
138            UserAdapter.Update(permOwner as User);
139          } else if (permOwner is UserGroup) {
140            Update(permOwner as UserGroup);
141          }
142
143          //secondly check for created references
144          dsHiveServer.PermissionOwner_UserGroupRow permOwnerUserGroupRow =
145            null;
146          dsHiveServer.PermissionOwner_UserGroupDataTable found =
147            permOwnerUserGroupAdapter.GetDataByPermownerUsergroupId(
148              permOwner.Id,
149              userGroup.Id);
150          if (found.Count == 1)
151            permOwnerUserGroupRow = found[0];
152
153          if (permOwnerUserGroupRow == null) {
154            permOwnerUserGroupRow =
155              found.NewPermissionOwner_UserGroupRow();
156
157            permOwnerUserGroupRow.PermissionOwnerId =
158              permOwner.Id;
159            permOwnerUserGroupRow.UserGroupId =
160              userGroup.Id;
161
162            found.AddPermissionOwner_UserGroupRow(permOwnerUserGroupRow);
163
164            permOwnerUserGroupAdapter.Update(permOwnerUserGroupRow);
165          }
166        }
167
168        //thirdly check for deleted references
169        dsHiveServer.PermissionOwner_UserGroupDataTable userGroupRows =
170            permOwnerUserGroupAdapter.GetDataByUserGroupId(userGroup.Id);
171
172        ICollection<dsHiveServer.PermissionOwner_UserGroupRow> deleted =
173          new List<dsHiveServer.PermissionOwner_UserGroupRow>();
174
175        foreach (dsHiveServer.PermissionOwner_UserGroupRow permOwnerUserGroupRow in
176          userGroupRows) {
177          PermissionOwner permOwner = null;
178
179          IEnumerable<PermissionOwner> permOwners =
180            from p in
181              userGroup.Members
182            where p.Id == permOwnerUserGroupRow.PermissionOwnerId
183            select p;
184
185          if (permOwners.Count<PermissionOwner>() == 1)
186            permOwner = permOwners.First<PermissionOwner>();
187
188          if (permOwner == null) {
189            deleted.Add(permOwnerUserGroupRow);
190          }
191        }
192
193        foreach (dsHiveServer.PermissionOwner_UserGroupRow
194          permOwnerUserGroupRow in deleted) {
195          permOwnerUserGroupRow.Delete();
196          permOwnerUserGroupAdapter.Update(permOwnerUserGroupRow);
197        }
198      }
199
200      return row;
201    }
202
203    protected override dsHiveServer.UserGroupRow
204      InsertNewRow(UserGroup group) {
205      dsHiveServer.UserGroupDataTable data =
206        new dsHiveServer.UserGroupDataTable();
207
208      dsHiveServer.UserGroupRow row =
209        data.NewUserGroupRow();
210
211      row.PermissionOwnerId = group.Id;
212
213      data.AddUserGroupRow(row);
214      Adapter.Update(row);
215
216      return row;
217    }
218
219    protected override void
220     UpdateRow(dsHiveServer.UserGroupRow row) {
221      Adapter.Update(row);
222    }
223
224    protected override IEnumerable<dsHiveServer.UserGroupRow>
225      FindById(long id) {
226      return Adapter.GetDataById(id);
227    }
228
229    protected override IEnumerable<dsHiveServer.UserGroupRow>
230      FindAll() {
231      return Adapter.GetData();
232    }
233    #endregion
234
235    #region IUserGroupAdapter Members
236    [MethodImpl(MethodImplOptions.Synchronized)]
237    public override void Update(UserGroup group) {
238      if (group != null) {
239        PermOwnerAdapter.Update(group);
240
241        base.Update(group);
242      }
243    }
244
245    public UserGroup GetByName(String name) {
246      if (name != null) {
247        return base.FindSingle(
248          delegate() {
249            return Adapter.GetDataByName(name);
250          });
251      }
252
253      return null;
254    }
255
256    public ICollection<UserGroup> MemberOf(PermissionOwner permOwner) {
257      ICollection<UserGroup> userGroups =
258        new List<UserGroup>();
259     
260      if (permOwner != null) {
261        dsHiveServer.PermissionOwner_UserGroupDataTable userGroupRows =
262          permOwnerUserGroupAdapter.GetDataByPermissionOwnerId(permOwner.Id);
263
264        foreach (dsHiveServer.PermissionOwner_UserGroupRow userGroupRow in
265          userGroupRows) {
266          UserGroup userGroup =
267            GetById(userGroupRow.UserGroupId);
268          userGroups.Add(userGroup);
269        }
270      }
271
272      return userGroups;
273    }
274
275    [MethodImpl(MethodImplOptions.Synchronized)]
276    public override bool Delete(UserGroup group) {
277      if (group != null) {
278        return base.Delete(group) &&
279          PermOwnerAdapter.Delete(group);
280      }
281
282      return false;
283    }
284
285    #endregion
286  }
287}
Note: See TracBrowser for help on using the repository browser.