- Timestamp:
- 12/11/08 15:38:45 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs
r910 r965 27 27 using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess; 28 28 using HeuristicLab.Hive.Contracts.BusinessObjects; 29 using System.Runtime.CompilerServices; 30 using System.Data; 29 31 30 32 namespace HeuristicLab.Hive.Server.ADODataAccess { 31 class ClientGroupAdapter: IClientGroupAdapter { 33 class ClientGroupAdapter : DataAdapterBase, IClientGroupAdapter { 34 private dsHiveServerTableAdapters.ClientGroupTableAdapter adapter = 35 new dsHiveServerTableAdapters.ClientGroupTableAdapter(); 36 37 private dsHiveServer.ClientGroupDataTable data = 38 new dsHiveServer.ClientGroupDataTable(); 39 40 private dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter resourceClientGroupAdapter = 41 new dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter(); 42 43 private dsHiveServer.ClientGroup_ResourceDataTable resourceClientGroupData = 44 new dsHiveServer.ClientGroup_ResourceDataTable(); 45 46 private IResourceAdapter resourceAdapter = null; 47 48 private IResourceAdapter ResourceAdapter { 49 get { 50 if (resourceAdapter == null) 51 resourceAdapter = ServiceLocator.GetResourceAdapter(); 52 53 return resourceAdapter; 54 } 55 } 56 57 private IClientAdapter clientAdapter = null; 58 59 private IClientAdapter ClientAdapter { 60 get { 61 if (clientAdapter == null) 62 clientAdapter = ServiceLocator.GetClientAdapter(); 63 64 return clientAdapter; 65 } 66 } 67 68 public ClientGroupAdapter() { 69 adapter.Fill(data); 70 resourceClientGroupAdapter.Fill(resourceClientGroupData); 71 } 72 73 protected override void Update() { 74 this.adapter.Update(this.data); 75 this.resourceClientGroupAdapter.Update(resourceClientGroupData); 76 } 77 78 private ClientGroup Convert(dsHiveServer.ClientGroupRow row, 79 ClientGroup clientGroup) { 80 if (row != null && clientGroup != null) { 81 /*Parent - Permission Owner*/ 82 clientGroup.ResourceId = row.ResourceId; 83 ResourceAdapter.GetResourceById(clientGroup); 84 85 //first check for created references 86 IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows = 87 from resource in 88 resourceClientGroupData.AsEnumerable<dsHiveServer.ClientGroup_ResourceRow>() 89 where resource.ClientGroupResource == clientGroup.ResourceId 90 select resource; 91 92 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in 93 clientGroupRows) { 94 Resource resource = null; 95 96 IEnumerable<Resource> resources = 97 from p in 98 clientGroup.Resources 99 where p.ResourceId == resourceClientGroupRow.ResourceId 100 select p; 101 if (resources.Count<Resource>() == 1) 102 resource = resources.First<Resource>(); 103 104 if (resource == null) { 105 Resource res = 106 ClientAdapter.GetClientById(resourceClientGroupRow.ResourceId); 107 108 if (res == null) { 109 //is a client group 110 res = 111 GetClientGroupById(resourceClientGroupRow.ResourceId); 112 } 113 114 if (res != null) 115 clientGroup.Resources.Add(res); 116 } 117 } 118 119 //secondly check for deleted references 120 ICollection<Resource> deleted = 121 new List<Resource>(); 122 123 foreach (Resource resource in clientGroup.Resources) { 124 dsHiveServer.ClientGroup_ResourceRow permOwnerUserGroupRow = 125 resourceClientGroupData.FindByClientGroupResourceResourceId( 126 clientGroup.ResourceId, 127 resource.ResourceId); 128 129 if (permOwnerUserGroupRow == null) { 130 deleted.Add(resource); 131 } 132 } 133 134 foreach (Resource resource in deleted) { 135 clientGroup.Resources.Remove(resource); 136 } 137 138 return clientGroup; 139 } else 140 return null; 141 } 142 143 private dsHiveServer.ClientGroupRow Convert(ClientGroup clientGroup, 144 dsHiveServer.ClientGroupRow row) { 145 if (clientGroup != null && row != null) { 146 row.ResourceId = clientGroup.ResourceId; 147 148 //update references 149 foreach (Resource resource in clientGroup.Resources) { 150 //first update the member to make sure it exists in the DB 151 if (resource is ClientInfo) { 152 ClientAdapter.UpdateClient(resource as ClientInfo); 153 } else if (resource is ClientGroup) { 154 UpdateClientGroup(resource as ClientGroup); 155 } 156 157 //secondly check for created references 158 dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow = 159 resourceClientGroupData.FindByClientGroupResourceResourceId( 160 clientGroup.ResourceId, 161 resource.ResourceId); 162 163 if (resourceClientGroupRow == null) { 164 resourceClientGroupRow = 165 resourceClientGroupData.NewClientGroup_ResourceRow(); 166 167 resourceClientGroupRow.ResourceId = 168 resource.ResourceId; 169 resourceClientGroupRow.ClientGroupResource = 170 clientGroup.ResourceId; 171 172 resourceClientGroupData.AddClientGroup_ResourceRow( 173 resourceClientGroupRow); 174 } 175 } 176 177 //thirdly check for deleted references 178 IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows = 179 from permOwner in 180 resourceClientGroupData.AsEnumerable<dsHiveServer.ClientGroup_ResourceRow>() 181 where permOwner.ClientGroupResource == clientGroup.ResourceId 182 select permOwner; 183 184 ICollection<dsHiveServer.ClientGroup_ResourceRow> deleted = 185 new List<dsHiveServer.ClientGroup_ResourceRow>(); 186 187 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in 188 clientGroupRows) { 189 Resource resource = null; 190 191 IEnumerable<Resource> resources = 192 from r in 193 clientGroup.Resources 194 where r.ResourceId == resourceClientGroupRow.ResourceId 195 select r; 196 197 if (resources.Count<Resource>() == 1) 198 resource = resources.First<Resource>(); 199 200 if (resource == null) { 201 deleted.Add(resourceClientGroupRow); 202 } 203 } 204 205 foreach (dsHiveServer.ClientGroup_ResourceRow resoruceClientGroupRow in 206 deleted) { 207 resourceClientGroupData.RemoveClientGroup_ResourceRow( 208 resoruceClientGroupRow); 209 } 210 211 } 212 213 return row; 214 } 215 32 216 #region IClientGroupAdapter Members 33 217 [MethodImpl(MethodImplOptions.Synchronized)] 34 218 public void UpdateClientGroup(ClientGroup group) { 35 throw new NotImplementedException(); 219 if (group != null) { 220 ResourceAdapter.UpdateResource(group); 221 222 dsHiveServer.ClientGroupRow row = 223 data.FindByResourceId(group.ResourceId); 224 225 if (row == null) { 226 row = data.NewClientGroupRow(); 227 row.ResourceId = group.ResourceId; 228 data.AddClientGroupRow(row); 229 } 230 231 Convert(group, row); 232 } 36 233 } 37 234 38 235 public ClientGroup GetClientGroupById(long clientGroupId) { 39 throw new NotImplementedException(); 236 ClientGroup clientGroup = new ClientGroup(); 237 238 dsHiveServer.ClientGroupRow row = 239 data.FindByResourceId(clientGroupId); 240 241 if (row != null) { 242 Convert(row, clientGroup); 243 244 return clientGroup; 245 } else { 246 return null; 247 } 40 248 } 41 249 42 250 public ICollection<ClientGroup> GetAllClientGroups() { 43 throw new NotImplementedException(); 44 } 45 251 ICollection<ClientGroup> allClientGroups = 252 new List<ClientGroup>(); 253 254 foreach (dsHiveServer.ClientGroupRow row in data) { 255 ClientGroup clientGroup = new ClientGroup(); 256 257 Convert(row, clientGroup); 258 allClientGroups.Add(clientGroup); 259 } 260 261 return allClientGroups; 262 } 263 264 public ICollection<ClientGroup> MemberOf(Resource resource) { 265 ICollection<ClientGroup> clientGroups = 266 new List<ClientGroup>(); 267 268 if (resource != null) { 269 IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows = 270 from clientGroup in 271 resourceClientGroupData.AsEnumerable<dsHiveServer.ClientGroup_ResourceRow>() 272 where clientGroup.ResourceId == resource.ResourceId 273 select clientGroup; 274 275 foreach (dsHiveServer.ClientGroup_ResourceRow clientGroupRow in 276 clientGroupRows) { 277 ClientGroup clientGroup = 278 GetClientGroupById(clientGroupRow.ClientGroupResource); 279 clientGroups.Add(clientGroup); 280 } 281 } 282 283 return clientGroups; 284 } 285 286 [MethodImpl(MethodImplOptions.Synchronized)] 46 287 public bool DeleteClientGroup(ClientGroup group) { 47 throw new NotImplementedException(); 288 if (group != null) { 289 dsHiveServer.ClientGroupRow row = 290 data.FindByResourceId(group.ResourceId); 291 292 if (row != null) { 293 ICollection<dsHiveServer.ClientGroup_ResourceRow> deleted = 294 new List<dsHiveServer.ClientGroup_ResourceRow>(); 295 296 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in 297 resourceClientGroupData) { 298 if (resourceClientGroupRow.ClientGroupResource == group.ResourceId || 299 resourceClientGroupRow.ResourceId == group.ResourceId) { 300 deleted.Add(resourceClientGroupRow); 301 } 302 } 303 304 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in 305 deleted) { 306 resourceClientGroupData.RemoveClientGroup_ResourceRow( 307 resourceClientGroupRow); 308 } 309 310 data.RemoveClientGroupRow(row); 311 return ResourceAdapter.DeleteResource(group); 312 } 313 } 314 315 return false; 48 316 } 49 317
Note: See TracChangeset
for help on using the changeset viewer.