Free cookie consent management tool by TermsFeed Policy Generator

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

Refactored DAL, Improved Caching (#372)

File:
1 edited

Legend:

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

    r991 r995  
    3030
    3131namespace HeuristicLab.Hive.Server.ADODataAccess {
    32   class JobAdapter : DataAdapterBase, IJobAdapter {
    33     private dsHiveServerTableAdapters.JobTableAdapter adapter =
    34         new dsHiveServerTableAdapters.JobTableAdapter();
    35 
    36     private dsHiveServer.JobDataTable data =
    37       new dsHiveServer.JobDataTable();
     32  class JobAdapter :
     33    CachedDataAdapter<dsHiveServerTableAdapters.JobTableAdapter,
     34                      Job,
     35                      dsHiveServer.JobRow,
     36                      dsHiveServer.JobDataTable>,
     37    IJobAdapter {
     38    #region Fields
     39    dsHiveServer.JobDataTable data =
     40        new dsHiveServer.JobDataTable();
    3841
    3942    private IClientAdapter clientAdapter = null;
     
    5962      }
    6063    }
    61 
    62     public JobAdapter() {
    63       adapter.Fill(data);
    64     }
    65 
    66     protected override void Update() {
    67       this.adapter.Update(this.data);
    68     }
    69 
    70     private Job Convert(dsHiveServer.JobRow row,
     64    #endregion
     65
     66    #region Overrides
     67    protected override Job Convert(dsHiveServer.JobRow row,
    7168      Job job) {
    7269      if (row != null && job != null) {
    73         job.JobId = row.JobId;
     70        job.Id = row.JobId;
    7471
    7572        if (!row.IsParentJobIdNull())
    76           job.ParentJob = GetJobById(row.ParentJobId);
     73          job.ParentJob = GetById(row.ParentJobId);
    7774        else
    7875          job.ParentJob = null;
    7976
    8077        if (!row.IsResourceIdNull())
    81           job.Client = ClientAdapter.GetClientById(row.ResourceId);
     78          job.Client = ClientAdapter.GetById(row.ResourceId);
    8279        else
    8380          job.Client = null;
     
    8683          job.State = (State)Enum.Parse(job.State.GetType(), row.Status);
    8784        else
    88           job.State = State.idle;
     85          job.State = State.nullState;
    8986
    9087        return job;
     
    9390    }
    9491
    95     private dsHiveServer.JobRow Convert(Job job,
     92    protected override dsHiveServer.JobRow Convert(Job job,
    9693      dsHiveServer.JobRow row) {
    9794      if (job != null && row != null) {
    9895        if (job.Client != null) {
    99           ClientAdapter.UpdateClient(job.Client);
    100           row.ResourceId = job.Client.ResourceId;
     96          ClientAdapter.Update(job.Client);
     97          row.ResourceId = job.Client.Id;
    10198        } else
    10299          row.SetResourceIdNull();
    103100
    104101        if (job.ParentJob != null) {
    105           UpdateJob(job.ParentJob);
    106           row.ParentJobId = job.ParentJob.JobId;
     102          Update(job.ParentJob);
     103          row.ParentJobId = job.ParentJob.Id;
    107104        } else
    108105          row.SetParentJobIdNull();
    109106
    110         row.Status = job.State.ToString();
     107        if (job.State != State.nullState)
     108          row.Status = job.State.ToString();
     109        else
     110          row.SetStatusNull();
    111111      }
    112112
     
    114114    }
    115115
     116    protected override void UpdateRow(dsHiveServer.JobRow row) {
     117      adapter.Update(row);
     118    }
     119
     120    protected override dsHiveServer.JobRow
     121      InsertNewRow(Job job) {     
     122      dsHiveServer.JobRow row = data.NewJobRow();
     123      data.AddJobRow(row);
     124
     125      return row;
     126    }
     127
     128    protected override dsHiveServer.JobRow
     129      InsertNewRowInCache(Job job) {
     130      dsHiveServer.JobRow row = cache.NewJobRow();
     131      cache.AddJobRow(row);
     132
     133      return row;
     134    }
     135
     136    protected override void FillCache() {
     137      adapter.FillByActive(cache);
     138    }
     139
     140    public override void SyncWithDb() {
     141      this.adapter.Update(this.cache);
     142    }
     143
     144    protected override bool PutInCache(Job job) {
     145      return job != null
     146        && job.State != State.offline
     147        && job.State != State.nullState;
     148    }
     149
     150    protected override IEnumerable<dsHiveServer.JobRow>
     151      FindById(long id) {
     152      return adapter.GetDataById(id);
     153    }
     154
     155    protected override dsHiveServer.JobRow
     156      FindCachedById(long id) {
     157      return cache.FindByJobId(id);
     158    }
     159
     160    protected override IEnumerable<dsHiveServer.JobRow>
     161      FindAll() {
     162      return FindMultipleRows(
     163        new Selector(adapter.GetData),
     164        new Selector(cache.AsEnumerable<dsHiveServer.JobRow>));
     165    }
     166
     167    #endregion
     168
    116169    #region IJobAdapter Members
    117     [MethodImpl(MethodImplOptions.Synchronized)]
    118     public void UpdateJob(Job job) {
     170    public ICollection<Job> GetAllSubjobs(Job job) {
    119171      if (job != null) {
    120         dsHiveServer.JobRow row =
    121           data.FindByJobId(job.JobId);
    122 
    123         if (row == null) {
    124           row = data.NewJobRow();
    125           data.AddJobRow(row);
    126 
    127           //write row to db to get primary key
    128           adapter.Update(row);
    129         }
    130 
    131         Convert(job, row);
    132         job.JobId = row.JobId;
    133       }
    134     }
    135 
    136     public Job GetJobById(long id) {
    137       dsHiveServer.JobRow row =
    138         data.FindByJobId(id);
    139 
    140       if (row != null) {
    141         Job job = new Job();
    142        
    143         Convert(row, job);
    144 
    145         return job;
     172        return
     173          base.FindMultiple(
     174            delegate() {
     175              return adapter.GetDataBySubjobs(job.Id);
     176            },
     177            delegate() {
     178              return from j in
     179                   cache.AsEnumerable<dsHiveServer.JobRow>()
     180                 where  !j.IsParentJobIdNull() &&
     181                        j.ParentJobId == job.Id
     182                 select j;
     183            });
    146184      }
    147185
    148186      return null;
    149     }
    150 
    151     public ICollection<Job> GetAllJobs() {
    152       IList<Job> allJobs =
    153         new List<Job>();
    154 
    155       foreach (dsHiveServer.JobRow row in data) {
    156         Job job = new Job();
    157         Convert(row, job);
    158         allJobs.Add(job);
    159       }
    160 
    161       return allJobs;
    162     }
    163 
    164     public ICollection<Job> GetAllSubjobs(Job job) {
    165       IList<Job> allJobs =
    166         new List<Job>();
    167 
    168       if (job != null) {
    169         IEnumerable<dsHiveServer.JobRow> clientJobs =
    170          from j in
    171            data.AsEnumerable<dsHiveServer.JobRow>()
    172          where j.ParentJobId == job.JobId
    173          select j;
    174 
    175         foreach (dsHiveServer.JobRow row in
    176           clientJobs) {
    177           Job j = new Job();
    178           Convert(row, j);
    179           allJobs.Add(j);
    180         }
    181       }
    182 
    183       return allJobs;
    184187    }
    185188
     
    189192
    190193    public ICollection<Job> GetJobsOf(ClientInfo client) {
    191       IList<Job> allJobs =
    192         new List<Job>();
    193 
    194194      if (client != null) {
    195         IEnumerable<dsHiveServer.JobRow> clientJobs =
    196          from job in
    197            data.AsEnumerable<dsHiveServer.JobRow>()
    198          where !job.IsResourceIdNull() &&
    199           job.ResourceId == client.ResourceId
    200          select job;
    201 
    202         foreach (dsHiveServer.JobRow row in
    203           clientJobs) {
    204           Job job = new Job();
    205           Convert(row, job);
    206           allJobs.Add(job);
    207         }
    208       }
    209 
    210       return allJobs;
     195        return
     196          base.FindMultiple(
     197            delegate() {
     198              return adapter.GetDataByClient(client.Id);
     199            },
     200            delegate() {
     201              return from job in
     202                 cache.AsEnumerable<dsHiveServer.JobRow>()
     203               where !job.IsResourceIdNull() &&
     204                      job.ResourceId == client.Id
     205               select job;
     206            });
     207      }
     208
     209      return null;
    211210    }
    212211
    213212    public ICollection<Job> GetJobsOf(User user) {
    214       IList<Job> allJobs =
    215         new List<Job>();
    216 
    217213      if (user != null) {
    218         IEnumerable<dsHiveServer.JobRow> userJobs =
    219         from job in
    220           data.AsEnumerable<dsHiveServer.JobRow>()
    221         where
    222           !job.IsPermissionOwnerIdNull() &&
    223           job.PermissionOwnerId == user.PermissionOwnerId
    224         select job;
    225 
    226         foreach (dsHiveServer.JobRow row in
    227           userJobs) {
    228           Job job = new Job();
    229           Convert(row, job);
    230           allJobs.Add(job);
    231         }
    232       }
    233 
    234       return allJobs;
    235     }
    236 
    237     [MethodImpl(MethodImplOptions.Synchronized)]
    238     public bool DeleteJob(Job job) {
    239       if (job != null) {
    240         dsHiveServer.JobRow row =
    241           data.FindByJobId(job.JobId);
    242 
    243         if (row != null) {
    244           row.Delete();
    245           adapter.Update(row);
    246 
    247           return true;
    248         }
    249       }
    250 
    251       return false;
    252     }
    253 
     214        return
     215          base.FindMultiple(
     216            delegate() {
     217              return adapter.GetDataByUser(user.Id);
     218            },
     219            delegate() {
     220              return from job in
     221                cache.AsEnumerable<dsHiveServer.JobRow>()
     222              where !job.IsPermissionOwnerIdNull() &&
     223                job.PermissionOwnerId == user.Id
     224              select job;
     225            });
     226      }
     227
     228      return null;
     229    }
    254230    #endregion
    255231  }
Note: See TracChangeset for help on using the changeset viewer.