Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.CEDMA.Core/Agent.cs @ 393

Last change on this file since 393 was 393, checked in by gkronber, 16 years ago

worked on very basic control to view the tree of agents/runs (ticket #188)

File size: 3.4 KB
Line 
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;
26using HeuristicLab.Core;
27using System.Xml;
28using HeuristicLab.CEDMA.DB.Interfaces;
29
30namespace HeuristicLab.CEDMA.Core {
31  public class Agent : ItemBase, IAgent {
32    public IDatabase Database { get; set; }
33    public long Id { get; set; }
34    public string Name { get; set; }
35    public ProcessStatus Status { get; set; }
36    public bool Terminated { get; set; }
37    private OperatorGraph operatorGraph;
38
39    public IOperatorGraph OperatorGraph {
40      get { return operatorGraph; }
41    }
42
43    public Agent()
44      : base() {
45      operatorGraph = new OperatorGraph();
46    }
47
48    public Agent(IDatabase database, long id)
49      : this() {
50      Database = database;
51      Id = id;
52    }
53
54    public void Save() {
55      Database.UpdateAgent(Id, Name);
56      Database.UpdateAgent(Id, Status);
57      Database.UpdateAgent(Id, DbPersistenceManager.Save(this));
58    }
59
60    public void Start() {
61      Status = ProcessStatus.Waiting;
62      Save();
63    }
64
65    public ICollection<IAgent> SubAgents {
66      get {
67        List<IAgent> agents = new List<IAgent>();
68        foreach(AgentEntry entry in Database.GetSubAgents(Id)) {
69          Agent newAgent = (Agent)DbPersistenceManager.Restore(entry.RawData);
70          newAgent.Database = Database;
71          newAgent.Id = entry.Id;
72          newAgent.Name = entry.Name;
73          newAgent.Status = entry.Status;
74          agents.Add(newAgent);
75        }
76        return agents;
77      }
78    }
79
80    public ICollection<IResult> Results {
81      get {
82        List<IResult> results = new List<IResult>();
83        foreach(ResultEntry entry in Database.GetResults(Id)) {
84          Result result = (Result)DbPersistenceManager.Restore(entry.RawData);
85        }
86        return results;
87      }
88    }
89
90    #region persistence
91    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
92      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
93      node.AppendChild(PersistenceManager.Persist("OperatorGraph", operatorGraph, document, persistedObjects));
94      return node;
95    }
96
97    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
98      base.Populate(node, restoredObjects);
99      operatorGraph = (OperatorGraph)PersistenceManager.Restore(node.SelectSingleNode("OperatorGraph"), restoredObjects);
100    }
101    #endregion
102
103    public override IView CreateView() {
104      return new AgentView(this);
105    }
106  }
107}
Note: See TracBrowser for help on using the repository browser.