Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/16/08 17:26:43 (15 years ago)
Author:
svonolfe
Message:

Refactored DAL, Improved Caching (#372)

File:
1 edited

Legend:

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

    r976 r995  
    2929
    3030namespace HeuristicLab.Hive.Server.ADODataAccess {
    31   class ResourceAdapter: DataAdapterBase, IResourceAdapter {
    32     private dsHiveServerTableAdapters.ResourceTableAdapter adapter =
    33         new dsHiveServerTableAdapters.ResourceTableAdapter();
    34 
    35     private dsHiveServer.ResourceDataTable data =
     31  class ResourceAdapter:
     32    CachedDataAdapter<
     33      dsHiveServerTableAdapters.ResourceTableAdapter,
     34      Resource,
     35      dsHiveServer.ResourceRow,
     36      dsHiveServer.ResourceDataTable>, 
     37    IResourceAdapter {
     38    #region Fields
     39    dsHiveServer.ResourceDataTable data =
    3640        new dsHiveServer.ResourceDataTable();
    3741
    38     public ResourceAdapter() {
    39       adapter.Fill(data);
     42    private IClientAdapter clientAdapter = null;
     43
     44    private IClientAdapter ClientAdapter {
     45      get {
     46        if (clientAdapter == null)
     47          clientAdapter = ServiceLocator.GetClientAdapter();
     48       
     49        return clientAdapter;
     50      }
    4051    }
     52    #endregion
    4153
    42     protected override void Update() {
    43       this.adapter.Update(this.data);
    44     }
    45 
    46     private Resource Convert(dsHiveServer.ResourceRow row,
     54    #region Overrides
     55    protected override Resource Convert(dsHiveServer.ResourceRow row,
    4756      Resource resource) {
    4857      if (row != null && resource != null) {
    49         resource.ResourceId = row.ResourceId;
     58        resource.Id = row.ResourceId;
    5059        if (!row.IsNameNull())
    5160          resource.Name = row.Name;
     
    5867    }
    5968
    60     private dsHiveServer.ResourceRow Convert(Resource resource,
     69    protected override dsHiveServer.ResourceRow Convert(Resource resource,
    6170      dsHiveServer.ResourceRow row) {
    6271      if (resource != null && row != null) {
     
    6877    }
    6978
     79    protected override void UpdateRow(dsHiveServer.ResourceRow row) {
     80      adapter.Update(row);
     81    }
     82
     83    protected override dsHiveServer.ResourceRow
     84      InsertNewRow(Resource resource) {
     85      dsHiveServer.ResourceRow row = data.NewResourceRow();
     86      data.AddResourceRow(row);
     87
     88      return row;
     89    }
     90
     91    protected override dsHiveServer.ResourceRow
     92      InsertNewRowInCache(Resource resource) {
     93      dsHiveServer.ResourceRow row = cache.NewResourceRow();
     94      cache.AddResourceRow(row);
     95
     96      return row;
     97    }
     98
     99    protected override void FillCache() {
     100      cache = adapter.GetDataByActive();
     101    }
     102
     103    public override void SyncWithDb() {
     104      adapter.Update(cache);
     105    }
     106
     107    protected override bool PutInCache(Resource obj) {
     108      return (obj is ClientInfo &&
     109        (obj as ClientInfo).State != State.offline);
     110    }
     111
     112    protected override IEnumerable<dsHiveServer.ResourceRow>
     113      FindById(long id) {
     114      return adapter.GetDataById(id);
     115    }
     116
     117    protected override dsHiveServer.ResourceRow
     118      FindCachedById(long id) {
     119      return cache.FindByResourceId(id);
     120    }
     121
     122    protected override IEnumerable<dsHiveServer.ResourceRow>
     123      FindAll() {
     124      return FindMultipleRows(
     125        new Selector(adapter.GetData),
     126        new Selector(cache.AsEnumerable<dsHiveServer.ResourceRow>));
     127    }
     128    #endregion
     129
    70130    #region IResourceAdapter Members
    71     [MethodImpl(MethodImplOptions.Synchronized)]
    72     public void UpdateResource(Resource resource) {
     131    public bool GetById(Resource resource) {
    73132      if (resource != null) {
    74133        dsHiveServer.ResourceRow row =
    75           data.FindByResourceId(resource.ResourceId);
     134          GetRowById(resource.Id);
    76135
    77         if (row == null) {
    78           row = data.NewResourceRow();
    79           data.AddResourceRow(row);
    80 
    81           //write row to db to get primary key
    82           adapter.Update(row);
    83         }
    84 
    85         Convert(resource, row);
    86         resource.ResourceId = row.ResourceId;
    87       }
    88     }
    89 
    90     public bool GetResourceById(Resource resource) {
    91       if (resource != null) {
    92         dsHiveServer.ResourceRow row =
    93           data.FindByResourceId(resource.ResourceId);
    94136        if (row != null) {
    95137          Convert(row, resource);
     
    102144    }
    103145
    104     public Resource GetResourceById(long resourceId) {
    105       Resource resource = new Resource();
    106       resource.ResourceId = resourceId;
    107 
    108       if(GetResourceById(resource))
    109         return resource;
    110       else
    111         return null;
    112     }
    113 
    114     public Resource GetResourceByName(string name) {
    115       dsHiveServer.ResourceRow row = null;
    116 
    117       IEnumerable<dsHiveServer.ResourceRow> permOwners =
    118         from r in
    119           data.AsEnumerable<dsHiveServer.ResourceRow>()
    120         where !r.IsNameNull() && r.Name == name
    121         select r;
    122 
    123       if (permOwners.Count<dsHiveServer.ResourceRow>() == 1)
    124         row = permOwners.First<dsHiveServer.ResourceRow>();
     146    public Resource GetByName(string name) {
     147      dsHiveServer.ResourceRow row =
     148        base.FindSingleRow(
     149          delegate() {
     150            return adapter.GetDataByName(name);
     151          },
     152          delegate() {
     153            return from r in
     154                     cache.AsEnumerable<dsHiveServer.ResourceRow>()
     155                   where !r.IsNameNull() &&
     156                          r.Name == name
     157                   select r;
     158          });
    125159
    126160      if (row != null) {
     
    134168    }
    135169
    136     public ICollection<Resource> GetAllResources() {
    137       IList<Resource> allResources =
    138         new List<Resource>();
    139      
    140       foreach (dsHiveServer.ResourceRow row in data) {
    141         Resource resource = new Resource();
    142         Convert(row, resource);
    143         allResources.Add(resource);
    144       }
    145 
    146       return allResources;
    147     }
    148 
    149     [MethodImpl(MethodImplOptions.Synchronized)]
    150     public bool DeleteResource(Resource resource) {
    151       if(resource != null) {
    152         dsHiveServer.ResourceRow row =
    153           data.FindByResourceId(resource.ResourceId);
    154 
    155         if (row != null) {
    156           row.Delete();
    157           adapter.Update(row);
    158 
    159           return true;
    160         }
    161       }
    162        
    163       return false;
    164     }
    165 
    166170    #endregion
    167171  }
Note: See TracChangeset for help on using the changeset viewer.