Index: /trunk/sources/HeuristicLab.Common/3.3/Content/Content.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/Content/Content.cs	(revision 3405)
+++ /trunk/sources/HeuristicLab.Common/3.3/Content/Content.cs	(revision 3405)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Common {
+  public class Content : DeepCloneable, IContent {
+    public Content() {
+      this.readOnlyView = false;
+    }
+    public Content(bool readOnlyView)
+      : this() {
+      this.ReadOnlyView = readOnlyView;
+    }
+
+    private bool readOnlyView;
+    public virtual bool ReadOnlyView {
+      get { return readOnlyView; }
+      set {
+        if (readOnlyView != value) {
+          readOnlyView = value;
+          OnReadOnlyViewChanged();
+        }
+      }
+    }
+    public event EventHandler ReadOnlyViewChanged;
+    protected virtual void OnReadOnlyViewChanged() {
+      EventHandler handler = ReadOnlyViewChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.3/Content/ContentManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/Content/ContentManager.cs	(revision 3405)
+++ /trunk/sources/HeuristicLab.Common/3.3/Content/ContentManager.cs	(revision 3405)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Common {
+  public class ContentManager {
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.3/Content/IContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/Content/IContent.cs	(revision 3405)
+++ /trunk/sources/HeuristicLab.Common/3.3/Content/IContent.cs	(revision 3405)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Common {
+  public interface IContent :IDeepCloneable{
+    bool ReadOnlyView { get; set; }
+
+    event EventHandler ReadOnlyViewChanged;
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.3/Content/IStorableContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/Content/IStorableContent.cs	(revision 3405)
+++ /trunk/sources/HeuristicLab.Common/3.3/Content/IStorableContent.cs	(revision 3405)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Common {
+  public interface IStorableContent : IContent {
+    string Filename { get; set; }
+    bool SaveEnabled { get; set; }
+
+    void Save();
+    void Save(string filename);
+    void SaveAsynchronous();
+    void SaveAsynchronous(string filename);
+
+    event EventHandler FilenameChanged;
+    event EventHandler SaveEnabledChanged;
+    event EventHandler SaveOperationStarted;
+    event EventHandler<EventArgs<Exception>> SaveOperationFinished;
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.3/Content/StorableContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/Content/StorableContent.cs	(revision 3405)
+++ /trunk/sources/HeuristicLab.Common/3.3/Content/StorableContent.cs	(revision 3405)
@@ -0,0 +1,119 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Common {
+  public abstract class StorableContent : Content, IStorableContent {
+    public StorableContent()
+      : base() {
+      this.filename = string.Empty;
+      this.saveEnabled = true;
+    }
+    public StorableContent(bool saveEnabled)
+      : this() {
+      this.saveEnabled = saveEnabled;
+      //NOTE: important do not call propagate changes, because derived objects are not constructed
+    }
+    public StorableContent(bool saveEnabled, string filename)
+      : this(saveEnabled) {
+      this.Filename = filename;
+    }
+
+    private string filename;
+    public string Filename {
+      get { return this.filename; }
+      set {
+        if (this.filename != value) {
+          this.filename = value;
+          this.OnFilenameChanged();
+        }
+      }
+    }
+
+    private bool saveEnabled;
+    public virtual bool SaveEnabled {
+      get { return this.saveEnabled; }
+      set {
+        if (this.saveEnabled != value) {
+          this.saveEnabled = value;
+          this.PropagateSaveEnabledChanges();
+          this.OnSaveEnabledChanged();
+        }
+      }
+    }
+
+    protected void PropagateSaveEnabledChanges() {
+      //TODO implement propagation of changes
+    }
+
+    protected abstract void Save();
+    void IStorableContent.Save() {
+      if (this.SaveEnabled) {
+        this.OnSaveOperationStarted();
+        this.Save();
+        this.OnSaveOperationFinished(null);
+      }
+    }
+    public void Save(string filename) {
+      this.Filename = filename;
+      ((IStorableContent)this).Save();
+    }
+
+    protected virtual void SaveAsnychronous() {
+      //TODO implement async call to save method
+    }
+    void IStorableContent.SaveAsynchronous() {
+      this.OnSaveOperationStarted();
+      this.SaveAsnychronous();
+      this.OnSaveOperationFinished(null);
+    }
+    public void SaveAsynchronous(string filename) {
+      this.Filename = filename;
+      ((IStorableContent)this).SaveAsynchronous();
+    }
+
+    public event EventHandler FilenameChanged;
+    protected virtual void OnFilenameChanged() {
+      EventHandler handler = FilenameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler SaveEnabledChanged;
+    protected virtual void OnSaveEnabledChanged() {
+      EventHandler handler = SaveEnabledChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler SaveOperationStarted;
+    protected virtual void OnSaveOperationStarted() {
+      EventHandler handler = SaveOperationStarted;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<EventArgs<Exception>> SaveOperationFinished;
+    protected virtual void OnSaveOperationFinished(Exception ex) {
+      EventHandler<EventArgs<Exception>> handler = SaveOperationFinished;
+      if (handler != null) handler(this, new EventArgs<Exception>(ex));
+    }
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 3404)
+++ /trunk/sources/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 3405)
@@ -89,6 +89,10 @@
     <None Include="HeuristicLabCommonPlugin.cs.frame" />
     <Compile Include="Cloner.cs" />
+    <Compile Include="Content\Content.cs" />
+    <Compile Include="Content\ContentManager.cs" />
+    <Compile Include="Content\IStorableContent.cs" />
+    <Compile Include="Content\StorableContent.cs" />
     <Compile Include="DeepCloneable.cs" />
-    <Compile Include="IContent.cs" />
+    <Compile Include="Content\IContent.cs" />
     <Compile Include="IDeepCloneable.cs" />
     <Compile Include="ReferenceEqualityComparer.cs" />
Index: unk/sources/HeuristicLab.Common/3.3/IContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.3/IContent.cs	(revision 3404)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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 <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace HeuristicLab.Common {
-  public interface IContent {
-    bool ReadOnlyView { get; set; }
-
-    event EventHandler ReadOnlyViewChanged;
-  }
-}
