#region License Information /* HeuristicLab * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess; using HeuristicLab.Hive.Contracts.BusinessObjects; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace HeuristicLab.Hive.Server.ADODataAccess { class JobAdapter : DataAdapterBase, IJobAdapter { private dsHiveServerTableAdapters.JobTableAdapter adapter = new dsHiveServerTableAdapters.JobTableAdapter(); private dsHiveServer.JobDataTable data = new dsHiveServer.JobDataTable(); private IClientAdapter clientAdapter = null; private IClientAdapter ClientAdapter { get { if (clientAdapter == null) clientAdapter = ServiceLocator.GetClientAdapter(); return clientAdapter; } } private IUserAdapter userAdapter = null; private IUserAdapter UserAdapter { get { if (userAdapter == null) { userAdapter = ServiceLocator.GetUserAdapter(); } return userAdapter; } } public JobAdapter() { adapter.Fill(data); } protected override void Update() { this.adapter.Update(this.data); } private Job Convert(dsHiveServer.JobRow row, Job job) { if (row != null && job != null) { job.JobId = row.JobId; if (!row.IsParentJobIdNull()) job.ParentJob = GetJobById(row.ParentJobId); else job.ParentJob = null; if (!row.IsResourceIdNull()) job.Client = ClientAdapter.GetClientById(row.ResourceId); else job.Client = null; if (!row.IsStatusNull()) job.State = (State)Enum.Parse(job.State.GetType(), row.Status); else job.State = State.idle; return job; } else return null; } private dsHiveServer.JobRow Convert(Job job, dsHiveServer.JobRow row) { if (job != null && row != null) { if (job.Client != null) { ClientAdapter.UpdateClient(job.Client); row.ResourceId = job.Client.ResourceId; } else row.SetResourceIdNull(); if (job.ParentJob != null) { UpdateJob(job.ParentJob); row.ParentJobId = job.ParentJob.JobId; } else row.SetParentJobIdNull(); row.Status = job.State.ToString(); } return row; } #region IJobAdapter Members [MethodImpl(MethodImplOptions.Synchronized)] public void UpdateJob(Job job) { if (job != null) { dsHiveServer.JobRow row = data.FindByJobId(job.JobId); if (row == null) { row = data.NewJobRow(); data.AddJobRow(row); //write row to db to get primary key adapter.Update(row); } Convert(job, row); job.JobId = row.JobId; } } public Job GetJobById(long id) { dsHiveServer.JobRow row = data.FindByJobId(id); if (row != null) { Job job = new Job(); Convert(row, job); return job; } return null; } public ICollection GetAllJobs() { IList allJobs = new List(); foreach (dsHiveServer.JobRow row in data) { Job job = new Job(); Convert(row, job); allJobs.Add(job); } return allJobs; } public ICollection GetAllSubjobs(Job job) { IList allJobs = new List(); if (job != null) { IEnumerable clientJobs = from j in data.AsEnumerable() where j.ParentJobId == job.JobId select j; foreach (dsHiveServer.JobRow row in clientJobs) { Job j = new Job(); Convert(row, j); allJobs.Add(j); } } return allJobs; } public JobResult GetResult(Job job) { throw new NotImplementedException(); } public ICollection GetJobsOf(ClientInfo client) { IList allJobs = new List(); if (client != null) { IEnumerable clientJobs = from job in data.AsEnumerable() where job.ResourceId == client.ResourceId select job; foreach (dsHiveServer.JobRow row in clientJobs) { Job job = new Job(); Convert(row, job); allJobs.Add(job); } } return allJobs; } public ICollection GetJobsOf(User user) { IList allJobs = new List(); if (user != null) { IEnumerable userJobs = from job in data.AsEnumerable() where job.PermissionOwnerId == user.PermissionOwnerId select job; foreach (dsHiveServer.JobRow row in userJobs) { Job job = new Job(); Convert(row, job); allJobs.Add(job); } } return allJobs; } [MethodImpl(MethodImplOptions.Synchronized)] public bool DeleteJob(Job job) { if (job != null) { dsHiveServer.JobRow row = data.FindByJobId(job.JobId); if (row != null) { row.Delete(); adapter.Update(row); return true; } } return false; } #endregion } }