source: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/3.2/ClientGroupAdapter.cs @ 1580

Last change on this file since 1580 was 1580, checked in by svonolfe, 12 years ago

Added PluginInfoAdapter (#372)

File size: 5.6 KB
RevLine 
[910]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
[1377]27using HeuristicLab.Hive.Server.DataAccess;
[910]28using HeuristicLab.Hive.Contracts.BusinessObjects;
[965]29using System.Data;
[1377]30using HeuristicLab.DataAccess.ADOHelper;
[1468]31using HeuristicLab.Hive.Server.ADODataAccess.dsHiveServerTableAdapters;
32using System.Data.Common;
33using System.Data.SqlClient;
[1580]34using HeuristicLab.Hive.Server.ADODataAccess.TableAdapterWrapper;
[910]35
36namespace HeuristicLab.Hive.Server.ADODataAccess {
[995]37  class ClientGroupAdapter :
38    DataAdapterBase<dsHiveServerTableAdapters.ClientGroupTableAdapter,
39    ClientGroup,
40    dsHiveServer.ClientGroupRow>,
41    IClientGroupAdapter {
42    #region Fields
[1580]43    private ManyToManyRelationHelper<
[1515]44      dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter,
[1580]45      dsHiveServer.ClientGroup_ResourceRow> manyToManyRelationHelper = null;
[965]46
[1580]47    private ManyToManyRelationHelper<dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter,
48      dsHiveServer.ClientGroup_ResourceRow> ManyToManyRelationHelper {
[1515]49      get {
[1580]50        if (manyToManyRelationHelper == null) {
51          manyToManyRelationHelper =
52            new ManyToManyRelationHelper<dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter,
[1515]53              dsHiveServer.ClientGroup_ResourceRow>(new ClientGroup_ResourceAdapterWrapper());
54        }
55
[1580]56        manyToManyRelationHelper.Session = Session as Session;
[1515]57
[1580]58        return manyToManyRelationHelper;
[1515]59      }
60    }
61
[965]62    private IResourceAdapter resourceAdapter = null;
63
[971]64    private IResourceAdapter ResAdapter {
[965]65      get {
66        if (resourceAdapter == null)
[1468]67          resourceAdapter =
68            this.Session.GetDataAdapter<Resource, IResourceAdapter>();
[965]69
70        return resourceAdapter;
71      }
72    }
73
74    private IClientAdapter clientAdapter = null;
75
76    private IClientAdapter ClientAdapter {
77      get {
78        if (clientAdapter == null)
[1468]79          clientAdapter =
80            this.Session.GetDataAdapter<ClientInfo, IClientAdapter>();
[965]81
82        return clientAdapter;
83      }
84    }
[995]85    #endregion
[965]86
[1468]87    public ClientGroupAdapter():
88      base(new ClientGroupAdapterWrapper()) {
89    }
90
[995]91    #region Overrides
[1131]92    protected override ClientGroup ConvertRow(dsHiveServer.ClientGroupRow row,
[965]93      ClientGroup clientGroup) {
94      if (row != null && clientGroup != null) {
95        /*Parent - Permission Owner*/
[995]96        clientGroup.Id = row.ResourceId;
[1515]97        ResAdapter.GetById(clientGroup.Id);
[965]98
[1515]99        ICollection<Guid> resources =
[1580]100          ManyToManyRelationHelper.GetRelationships(clientGroup.Id);
[965]101
[1515]102       clientGroup.Resources.Clear();
103        foreach(Guid resource in resources) {
104          ClientInfo client =
105            ClientAdapter.GetById(resource);
[965]106
[1515]107          if (client == null) {
108            //client group
109            ClientGroup group =
110              GetById(resource);
[965]111
[1515]112            clientGroup.Resources.Add(group);
113          } else {
114            clientGroup.Resources.Add(client);
115          }         
[965]116        }
117
118        return clientGroup;
119      } else
120        return null;
121    }
122
[1131]123    protected override dsHiveServer.ClientGroupRow ConvertObj(ClientGroup clientGroup,
[965]124      dsHiveServer.ClientGroupRow row) {
125      if (clientGroup != null && row != null) {
[995]126        row.ResourceId = clientGroup.Id;
[965]127      }
128
129      return row;
130    }
[995]131    #endregion
[965]132
[995]133    #region IClientGroupAdapter Members
[1468]134    protected override void doUpdate(ClientGroup group) {
[995]135      if (group != null) {
136        ResAdapter.Update(group);
137
[1468]138        base.doUpdate(group);
[1515]139
140        List<Guid> relationships =
141          new List<Guid>();
142        foreach(Resource res in group.Resources) {
143          if (res is ClientInfo) {
144            ClientAdapter.Update(res as ClientInfo);
145          } else if (res is ClientGroup) {
146            Update(res as ClientGroup);
147          } else {
148            ResAdapter.Update(res);
149          }
150
151          relationships.Add(res.Id);
152        }
153
[1580]154        ManyToManyRelationHelper.UpdateRelationships(group.Id,
[1515]155          relationships);
[965]156      }
[910]157    }
158
[995]159    public ClientGroup GetByName(string name) {
[971]160      ClientGroup group = new ClientGroup();
161      Resource res =
[995]162        ResAdapter.GetByName(name);
[971]163
164      if (res != null) {
[995]165        return GetById(res.Id);
[971]166      }
167
168      return null;
169    }
170
[965]171    public ICollection<ClientGroup> MemberOf(Resource resource) {
[1515]172      throw new NotImplementedException();
[965]173    }
174
[1468]175    protected override bool doDelete(ClientGroup group) {
[965]176      if (group != null) {
[1515]177        //delete all relationships
[1580]178        ManyToManyRelationHelper.UpdateRelationships(group.Id,
[1515]179          new List<Guid>());
180
[1468]181        return base.doDelete(group) &&
[995]182          ResAdapter.Delete(group);
[965]183      }
184
185      return false;
[910]186    }
187
188    #endregion
189  }
190}
Note: See TracBrowser for help on using the repository browser.