- Timestamp:
- 04/04/09 15:46:43 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs
r1468 r1515 77 77 } 78 78 } 79 80 class ClientGroup_ResourceAdapterWrapper : 81 DataAdapterWrapperBase<dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter, 82 BinaryRelation, 83 dsHiveServer.ClientGroup_ResourceRow> { 84 public override dsHiveServer.ClientGroup_ResourceRow 85 InsertNewRow(BinaryRelation relation) { 86 dsHiveServer.ClientGroup_ResourceDataTable data = 87 new dsHiveServer.ClientGroup_ResourceDataTable(); 88 89 dsHiveServer.ClientGroup_ResourceRow row = 90 data.NewClientGroup_ResourceRow(); 91 92 row.ClientGroupId = relation.Id; 93 row.ResourceId = relation.Id2; 94 95 data.AddClientGroup_ResourceRow(row); 96 TransactionalAdapter.Update(row); 97 98 return row; 99 } 100 101 public override void 102 UpdateRow(dsHiveServer.ClientGroup_ResourceRow row) { 103 TransactionalAdapter.Update(row); 104 } 105 106 public override IEnumerable<dsHiveServer.ClientGroup_ResourceRow> 107 FindById(Guid id) { 108 return TransactionalAdapter.GetDataByClientGroupId(id); 109 } 110 111 public override IEnumerable<dsHiveServer.ClientGroup_ResourceRow> 112 FindAll() { 113 return TransactionalAdapter.GetData(); 114 } 115 116 protected override void SetConnection(DbConnection connection) { 117 adapter.Connection = connection as SqlConnection; 118 } 119 120 protected override void SetTransaction(DbTransaction transaction) { 121 adapter.Transaction = transaction as SqlTransaction; 122 } 123 } 79 124 80 125 class ClientGroupAdapter : … … 84 129 IClientGroupAdapter { 85 130 #region Fields 86 private dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter resourceClientGroupAdapter = 87 new dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter(); 131 private BinaryRelationHelper< 132 dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter, 133 dsHiveServer.ClientGroup_ResourceRow> binaryRelationHelper = null; 134 135 private BinaryRelationHelper<dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter, 136 dsHiveServer.ClientGroup_ResourceRow> BinaryRelationHelper { 137 get { 138 if (binaryRelationHelper == null) { 139 binaryRelationHelper = 140 new BinaryRelationHelper<dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter, 141 dsHiveServer.ClientGroup_ResourceRow>(new ClientGroup_ResourceAdapterWrapper()); 142 } 143 144 binaryRelationHelper.Session = Session as Session; 145 146 return binaryRelationHelper; 147 } 148 } 88 149 89 150 private IResourceAdapter resourceAdapter = null; … … 122 183 /*Parent - Permission Owner*/ 123 184 clientGroup.Id = row.ResourceId; 124 ResAdapter.GetById(clientGroup); 125 126 //first check for created references 127 dsHiveServer.ClientGroup_ResourceDataTable clientGroupRows = 128 resourceClientGroupAdapter.GetDataByClientGroupId(clientGroup.Id); 129 130 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in 131 clientGroupRows) { 132 Resource resource = null; 133 134 IEnumerable<Resource> resources = 135 from p in 136 clientGroup.Resources 137 where p.Id == resourceClientGroupRow.ResourceId 138 select p; 139 if (resources.Count<Resource>() == 1) 140 resource = resources.First<Resource>(); 141 142 if (resource == null) { 143 Resource res = 144 ClientAdapter.GetById(resourceClientGroupRow.ResourceId); 145 146 if (res == null) { 147 //is a client group 148 res = 149 GetById(resourceClientGroupRow.ResourceId); 150 } 151 152 if (res != null) 153 clientGroup.Resources.Add(res); 154 } 155 } 156 157 //secondly check for deleted references 158 ICollection<Resource> deleted = 159 new List<Resource>(); 160 161 foreach (Resource resource in clientGroup.Resources) { 162 dsHiveServer.ClientGroup_ResourceDataTable found = 163 resourceClientGroupAdapter.GetDataByClientGroupResourceId( 164 clientGroup.Id, 165 resource.Id); 166 167 if (found.Count != 1) { 168 deleted.Add(resource); 169 } 170 } 171 172 foreach (Resource resource in deleted) { 173 clientGroup.Resources.Remove(resource); 185 ResAdapter.GetById(clientGroup.Id); 186 187 ICollection<Guid> resources = 188 BinaryRelationHelper.GetRelationships(clientGroup.Id); 189 190 clientGroup.Resources.Clear(); 191 foreach(Guid resource in resources) { 192 ClientInfo client = 193 ClientAdapter.GetById(resource); 194 195 if (client == null) { 196 //client group 197 ClientGroup group = 198 GetById(resource); 199 200 clientGroup.Resources.Add(group); 201 } else { 202 clientGroup.Resources.Add(client); 203 } 174 204 } 175 205 … … 183 213 if (clientGroup != null && row != null) { 184 214 row.ResourceId = clientGroup.Id; 185 186 //update references187 foreach (Resource resource in clientGroup.Resources) {188 //first update the member to make sure it exists in the DB189 if (resource is ClientInfo) {190 ClientAdapter.Update(resource as ClientInfo);191 } else if (resource is ClientGroup) {192 Update(resource as ClientGroup);193 }194 195 //secondly check for created references196 dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow =197 null;198 dsHiveServer.ClientGroup_ResourceDataTable found =199 resourceClientGroupAdapter.GetDataByClientGroupResourceId(200 clientGroup.Id,201 resource.Id);202 if (found.Count == 1)203 resourceClientGroupRow = found[0];204 205 if (resourceClientGroupRow == null) {206 resourceClientGroupRow =207 found.NewClientGroup_ResourceRow();208 209 resourceClientGroupRow.ResourceId =210 resource.Id;211 resourceClientGroupRow.ClientGroupId =212 clientGroup.Id;213 214 found.AddClientGroup_ResourceRow(resourceClientGroupRow);215 216 resourceClientGroupAdapter.Update(217 resourceClientGroupRow);218 }219 }220 221 //thirdly check for deleted references222 dsHiveServer.ClientGroup_ResourceDataTable clientGroupRows =223 resourceClientGroupAdapter.GetDataByClientGroupId(clientGroup.Id);224 225 ICollection<dsHiveServer.ClientGroup_ResourceRow> deleted =226 new List<dsHiveServer.ClientGroup_ResourceRow>();227 228 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in229 clientGroupRows) {230 Resource resource = null;231 232 IEnumerable<Resource> resources =233 from r in234 clientGroup.Resources235 where r.Id == resourceClientGroupRow.ResourceId236 select r;237 238 if (resources.Count<Resource>() == 1)239 resource = resources.First<Resource>();240 241 if (resource == null) {242 deleted.Add(resourceClientGroupRow);243 }244 }245 246 foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in deleted) {247 resourceClientGroupRow.Delete();248 resourceClientGroupAdapter.Update(resourceClientGroupRow);249 }250 215 } 251 216 … … 260 225 261 226 base.doUpdate(group); 227 228 List<Guid> relationships = 229 new List<Guid>(); 230 foreach(Resource res in group.Resources) { 231 if (res is ClientInfo) { 232 ClientAdapter.Update(res as ClientInfo); 233 } else if (res is ClientGroup) { 234 Update(res as ClientGroup); 235 } else { 236 ResAdapter.Update(res); 237 } 238 239 relationships.Add(res.Id); 240 } 241 242 BinaryRelationHelper.UpdateRelationships(group.Id, 243 relationships); 262 244 } 263 245 } … … 276 258 277 259 public ICollection<ClientGroup> MemberOf(Resource resource) { 278 ICollection<ClientGroup> clientGroups = 279 new List<ClientGroup>(); 280 281 if (resource != null) { 282 IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows = 283 resourceClientGroupAdapter.GetDataByResourceId(resource.Id); 284 285 foreach (dsHiveServer.ClientGroup_ResourceRow clientGroupRow in 286 clientGroupRows) { 287 ClientGroup clientGroup = 288 GetById(clientGroupRow.ClientGroupId); 289 clientGroups.Add(clientGroup); 290 } 291 } 292 293 return clientGroups; 260 throw new NotImplementedException(); 294 261 } 295 262 296 263 protected override bool doDelete(ClientGroup group) { 297 264 if (group != null) { 265 //delete all relationships 266 BinaryRelationHelper.UpdateRelationships(group.Id, 267 new List<Guid>()); 268 298 269 return base.doDelete(group) && 299 270 ResAdapter.Delete(group);
Note: See TracChangeset
for help on using the changeset viewer.