Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 394 was 394, checked in by gkronber, 16 years ago
  • implemented operator to store a whole scope as an result item into the cedma-db.
  • worked on AgentListView to display results as sub-nodes of agents.

(ticket #191)

File size: 3.6 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          result.Database = Database;
86          result.Id = entry.Id;
87          result.Summary = entry.Summary;
88          result.Description = entry.Description;
89          results.Add(result);
90        }
91        return results;
92      }
93    }
94
95    #region persistence
96    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
97      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
98      node.AppendChild(PersistenceManager.Persist("OperatorGraph", operatorGraph, document, persistedObjects));
99      return node;
100    }
101
102    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
103      base.Populate(node, restoredObjects);
104      operatorGraph = (OperatorGraph)PersistenceManager.Restore(node.SelectSingleNode("OperatorGraph"), restoredObjects);
105    }
106    #endregion
107
108    public override IView CreateView() {
109      return new AgentView(this);
110    }
111  }
112}
Note: See TracBrowser for help on using the repository browser.