Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/10/11 17:58:59 (13 years ago)
Author:
cneumuel
Message:

#1233

  • added semaphores to ensure an appdomain is never unloaded when the start method has not finished
  • HiveEngine uploading and downloading of jobs works and is displayed in the view
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/HiveJob.cs

    r6168 r6178  
    2222using System;
    2323using System.Collections.Generic;
     24using System.ComponentModel;
    2425using System.Drawing;
    2526using System.Linq;
     
    5556    }
    5657
     58    [Storable]
    5759    protected Job job;
    5860    public Job Job {
     
    6062      set {
    6163        if (job != value) {
     64          DeregisterJobEvents();
    6265          job = value;
     66          RegisterJobEvents();
     67          itemJobDownloaded = false;
    6368          OnJobChanged();
    6469          OnToStringChanged();
    6570          OnItemImageChanged();
    6671        }
     72       
    6773      }
    6874    }
    6975
    7076    [Storable]
    71     protected ItemJob jobItem;
    72     public ItemJob JobItem {
    73       get { return jobItem; }
     77    protected ItemJob itemJob;
     78    public ItemJob ItemJob {
     79      get { return itemJob; }
    7480      internal set {
    75         if (jobItem != null && syncJobsWithOptimizers) {
     81        if (itemJob != null && syncJobsWithOptimizers) {
    7682          this.childHiveJobs.Clear();
    7783        }
    78         if (jobItem != value) {
    79           DergisterJobItemsEvents();
    80           jobItem = value;
    81           RegisterJobItemEvents();
     84        if (itemJob != value) {
     85          DergisterItemJobEvents();
     86          itemJob = value;
     87          RegisterItemJobEvents();
    8288          OnJobItemChanged();
    83         }
    84       }
     89          itemJobDownloaded = true;
     90        }
     91      }
     92    }
     93
     94    // job downloaded since last status change
     95    [Storable]
     96    private bool itemJobDownloaded = false;
     97    public bool ItemJobDownloaded {
     98      get { return itemJobDownloaded; }
    8599    }
    86100
     
    106120    }
    107121
    108     public HiveJob(ItemJob jobItem, bool autoCreateChildHiveJobs)
     122    public HiveJob(ItemJob itemJob, bool autoCreateChildHiveJobs)
    109123      : this() {
    110124      this.syncJobsWithOptimizers = autoCreateChildHiveJobs;
    111       this.JobItem = jobItem;
     125      this.ItemJob = itemJob;
    112126      this.syncJobsWithOptimizers = true;
    113127    }
     
    117131      this.Job = job;
    118132      try {
    119         this.JobItem = PersistenceUtil.Deserialize<ItemJob>(jobData.Data);
     133        this.ItemJob = PersistenceUtil.Deserialize<ItemJob>(jobData.Data);
    120134      }
    121135      catch {
    122         this.JobItem = null;
     136        this.ItemJob = null;
    123137      }
    124138      this.childHiveJobs = new ItemList<HiveJob>();
     
    130144      : base(original, cloner) {
    131145      this.Job = cloner.Clone(original.job);
    132       this.JobItem = cloner.Clone(original.JobItem);
     146      this.ItemJob = cloner.Clone(original.ItemJob);
    133147      this.childHiveJobs = cloner.Clone(original.childHiveJobs);
    134148      this.syncJobsWithOptimizers = original.syncJobsWithOptimizers;
     149      this.itemJobDownloaded = original.itemJobDownloaded;
    135150    }
    136151    public override IDeepCloneable Clone(Cloner cloner) {
     
    141156    protected virtual void UpdateChildHiveJobs() { }
    142157
    143     protected virtual void RegisterJobItemEvents() {
    144       if (JobItem != null) {
    145         JobItem.ComputeInParallelChanged += new EventHandler(JobItem_ComputeInParallelChanged);
    146         JobItem.ToStringChanged += new EventHandler(JobItem_ToStringChanged);
    147       }
    148     }
    149     protected virtual void DergisterJobItemsEvents() {
    150       if (JobItem != null) {
    151         JobItem.ComputeInParallelChanged -= new EventHandler(JobItem_ComputeInParallelChanged);
    152         JobItem.ToStringChanged -= new EventHandler(JobItem_ToStringChanged);
     158    protected virtual void RegisterItemJobEvents() {
     159      if (ItemJob != null) {
     160        ItemJob.ComputeInParallelChanged += new EventHandler(JobItem_ComputeInParallelChanged);
     161        ItemJob.ToStringChanged += new EventHandler(JobItem_ToStringChanged);
     162      }
     163    }
     164    protected virtual void DergisterItemJobEvents() {
     165      if (ItemJob != null) {
     166        ItemJob.ComputeInParallelChanged -= new EventHandler(JobItem_ComputeInParallelChanged);
     167        ItemJob.ToStringChanged -= new EventHandler(JobItem_ToStringChanged);
    153168      }
    154169    }
     
    168183      this.OnToStringChanged();
    169184    }
    170    
     185
    171186    protected virtual void JobItem_ComputeInParallelChanged(object sender, EventArgs e) {
    172       if (JobItem != null && syncJobsWithOptimizers) {
     187      if (ItemJob != null && syncJobsWithOptimizers) {
    173188        this.UpdateChildHiveJobs();
    174189      }
     
    180195
    181196    public override string ToString() {
    182       if (jobItem != null) {
    183         return jobItem.ToString();
     197      if (itemJob != null) {
     198        return itemJob.ToString();
    184199      } else {
    185200        return base.ToString();
     
    196211        job.Command = lightweightJob.Command;
    197212        job.LastJobDataUpdate = lightweightJob.LastJobDataUpdate;
    198        
     213
    199214        OnJobStateChanged();
    200215        OnToStringChanged();
     
    210225    /// </param>
    211226    public virtual JobData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
    212       plugins = null;
    213       return null;
     227      plugins = new List<IPluginDescription>();
     228      if (this.itemJob == null)
     229        return null;
     230
     231      IEnumerable<Type> usedTypes;
     232      byte[] jobByteArray = PersistenceUtil.Serialize(this.ItemJob, out usedTypes);
     233
     234      JobData jobData = new JobData() {
     235        JobId = job.Id,
     236        Data = jobByteArray
     237      };
     238
     239      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
     240
     241      return jobData;
    214242    }
    215243
     
    239267      if (handler != null) handler(this, EventArgs.Empty);
    240268    }
     269
     270    private void RegisterJobEvents() {
     271      if (job != null)
     272        job.PropertyChanged += new PropertyChangedEventHandler(job_PropertyChanged);
     273    }
     274
     275    private void DeregisterJobEvents() {
     276      if (job != null)
     277        job.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(job_PropertyChanged);
     278    }
     279
     280    private void job_PropertyChanged(object sender, PropertyChangedEventArgs e) {
     281      if (e.PropertyName == "State") {
     282        itemJobDownloaded = false;
     283      }
     284    }
    241285    #endregion
    242    
     286
    243287    /// <summary>
    244288    /// Returns a list of HiveJobs including this and all its child-jobs recursively
     
    326370      } else {
    327371        ServiceLocator.Instance.CallHiveService(s => s.PauseJob(this.job.Id));
    328       }     
     372      }
    329373    }
    330374
     
    343387        JobData jobData = new JobData();
    344388        jobData.JobId = this.job.Id;
    345         jobData.Data = PersistenceUtil.Serialize(this.jobItem);
     389        jobData.Data = PersistenceUtil.Serialize(this.itemJob);
    346390        service.UpdateJobData(this.Job, jobData);
    347391        service.RestartJob(this.job.Id);
     
    350394      });
    351395    }
    352    
     396
    353397    public ICollection<IItemTreeNodeAction<HiveJob>> Actions {
    354398      get {
     
    364408  public class HiveJob<T> : HiveJob where T : ItemJob {
    365409
    366     public new T JobItem {
    367       get { return (T)base.JobItem; }
    368       internal set { base.JobItem = value; }
     410    public new T ItemJob {
     411      get { return (T)base.ItemJob; }
     412      internal set { base.ItemJob = value; }
    369413    }
    370414
    371415    #region Constructors and Cloning
    372416    public HiveJob() : base() { }
     417    public HiveJob(T itemJob) : base(itemJob, true) { }
    373418    protected HiveJob(HiveJob original, Cloner cloner)
    374419      : base(original, cloner) {
Note: See TracChangeset for help on using the changeset viewer.