Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/11/08 15:38:45 (15 years ago)
Author:
svonolfe
Message:

Implemented ClientGroupAdapter (#372)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs

    r910 r965  
    2727using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
    2828using HeuristicLab.Hive.Contracts.BusinessObjects;
     29using System.Runtime.CompilerServices;
     30using System.Data;
    2931
    3032namespace 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
    32216    #region IClientGroupAdapter Members
    33 
     217    [MethodImpl(MethodImplOptions.Synchronized)]
    34218    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      }
    36233    }
    37234
    38235    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      }
    40248    }
    41249
    42250    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)]
    46287    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;
    48316    }
    49317
Note: See TracChangeset for help on using the changeset viewer.