Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/01/08 14:43:10 (16 years ago)
Author:
gkronber
Message:

worked on #211 (Full operator-graphs are stored multiple times in the database even though most of it is static anyway)

  • created a new type of operator library that is connected to the CEDMA db and a view for it
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs

    r416 r417  
    44using System.Text;
    55using HeuristicLab.Core;
     6using HeuristicLab.CEDMA.DB.Interfaces;
    67
    78namespace HeuristicLab.CEDMA.Core {
     
    1314    }
    1415
    15     private string dbUri;
    16 
    17     public DatabaseOperatorLibrary(string dbUri)
    18       : base() {
    19       this.dbUri = dbUri;
    20       group = new OperatorGroup();
     16    private IDatabase database;
     17    public IDatabase Database {
     18      get { return database; }
     19      set { this.database = value; }
    2120    }
    2221
     22    private Dictionary<IOperator, long> knownOperators;
     23
     24    public DatabaseOperatorLibrary()
     25      : base() {
     26      group = new OperatorGroup();
     27      knownOperators = new Dictionary<IOperator, long>();
     28    }
     29
     30    public void Save() {
     31      Dictionary<IOperator, long> newKnownOperators = new Dictionary<IOperator,long>();
     32      foreach(IOperator op in group.Operators) {
     33        if(knownOperators.ContainsKey(op)) {
     34          // update
     35          long id =knownOperators[op];
     36          Database.UpdateOperator(id, op.Name, PersistenceManager.SaveToGZip(op));
     37          knownOperators.Remove(op);
     38          newKnownOperators.Add(op, id);
     39        } else {
     40          // create new
     41          long id = Database.InsertOperator(op.Name, PersistenceManager.SaveToGZip(op));
     42          newKnownOperators.Add(op, id);
     43        }
     44      }
     45      // delete operators from the table that are not present in the group anymore (remaining entries)
     46      foreach(long id in knownOperators.Values) {
     47        Database.DeleteOperator(id);
     48      }
     49     
     50      knownOperators = newKnownOperators;
     51    }
     52
     53    public void Restore() {
     54      foreach(IOperator op in knownOperators.Keys) {
     55        group.RemoveOperator(op);
     56      }
     57      knownOperators.Clear();
     58      if(database == null) return;
     59      foreach(OperatorEntry e in Database.GetOperators()) {
     60        IOperator op = (IOperator)PersistenceManager.RestoreFromGZip(e.RawData);
     61        knownOperators.Add(op, e.Id);
     62        group.AddOperator(op);
     63      }
     64    }
    2365
    2466    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
     
    3577
    3678    public override IView CreateView() {
    37       // return new DatabaseOperatorLibraryView(this);
    38       return null;
     79      Restore();
     80      return new DatabaseOperatorLibraryView(this);
    3981    }
    4082  }
Note: See TracChangeset for help on using the changeset viewer.