Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 18050)
@@ -43,4 +43,6 @@
       set { base.Content = value; }
     }
+
+    protected virtual string GroupBoxText => "Items";
 
     public CheckedItemListView()
@@ -179,5 +181,5 @@
         Invoke((Action)SetNumberOfCheckItems);
       } else {
-        this.itemsGroupBox.Text = String.Format("Items (Checked: {0}/{1})", Content.CheckedItems.Count(), Content.Count);
+        this.itemsGroupBox.Text = String.Format("{0} (Checked: {1}/{2})", GroupBoxText, Content.CheckedItems.Count(), Content.Count);
       }
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 18050)
@@ -29,5 +29,5 @@
     }
 
-    private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItem, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
+    private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItem, IEnumerable<IResultCollectionProcessor> postProcessors) {
       if (optimizer.Runs.Count > 0) 
         File.WriteAllText(file, FetchResults(optimizer, configuredResultItem, postProcessors));
@@ -41,5 +41,5 @@
       ResultFormatter?.Where(x => x.GetType().FullName == fullName).Last();
 
-    private static string FetchResults(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
+    private static string FetchResults(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems, IEnumerable<IResultCollectionProcessor> postProcessors) {
       JArray arr = new JArray();
       IEnumerable<string> configuredResults = configuredResultItems.Select(x => x.Name);
@@ -67,11 +67,9 @@
         }
 
-        IDictionary<string, string> resultDict = new Dictionary<string, string>();
-        foreach (var processor in postProcessors) {
-          processor.Apply(run.Results, resultDict);
-        }
-        foreach(var kvp in resultDict) {
-          obj.Add(kvp.Key, kvp.Value);
-        }
+        foreach (var processor in postProcessors)
+          processor.Apply(run.Results);
+
+        foreach(var result in run.Results)
+          obj.Add(result.Key, result.Value.ToString());
       }
       return SingleLineArrayJsonWriter.Serialize(arr);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 18050)
@@ -177,6 +177,5 @@
       // postProcessorListView
       this.postProcessorListControl = new ResultCollectionPostProcessorControl();
-      this.postProcessorListControl.Content = new CheckedItemList<IResultCollectionPostProcessor>();
-      this.postProcessorListControl.Content.Add(new SymRegPythonPostProcessor());
+      this.postProcessorListControl.Content = new CheckedItemList<IResultCollectionProcessor>();
       this.postProcessorListControl.Location = new System.Drawing.Point(0, 6);
       this.postProcessorListControl.Dock = System.Windows.Forms.DockStyle.Fill;
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 18050)
@@ -22,5 +22,5 @@
     private IOptimizer Optimizer { get; set; }
     private IList<IJsonItemVM> VMs { get; set; }
-    private ICheckedItemList<IResultCollectionPostProcessor> PostProcessors { get; set; }
+    private ICheckedItemList<IResultCollectionProcessor> PostProcessors { get; set; }
     #endregion
 
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ResultCollectionPostProcessorControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ResultCollectionPostProcessorControl.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ResultCollectionPostProcessorControl.cs	(revision 18050)
@@ -11,54 +11,11 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class ResultCollectionPostProcessorControl : Core.Views.CheckedItemListView<IResultCollectionPostProcessor> {
+  public partial class ResultCollectionPostProcessorControl : Core.Views.CheckedItemListView<IResultCollectionProcessor> {
     public ResultCollectionPostProcessorControl() {
       InitializeComponent();
     }
 
-    #region Content Events
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        SetNumberOfCheckItems();
-      }
-    }
+    protected override string GroupBoxText => "Result Collection Processors";
 
-    protected override void Content_CheckedItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<IResultCollectionPostProcessor>> e) {
-      base.Content_CheckedItemsChanged(sender, e);
-      if (InvokeRequired)
-        Invoke(new CollectionItemsChangedEventHandler<IndexedItem<IResultCollectionPostProcessor>>(Content_CheckedItemsChanged), sender, e);
-      else {
-        SetNumberOfCheckItems();
-      }
-    }
-    protected override void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IResultCollectionPostProcessor>> e) {
-      base.Content_CollectionReset(sender, e);
-      SetNumberOfCheckItems();
-    }
-    protected override void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IResultCollectionPostProcessor>> e) {
-      base.Content_ItemsAdded(sender, e);
-      SetNumberOfCheckItems();
-    }
-    protected override void Content_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IResultCollectionPostProcessor>> e) {
-      base.Content_ItemsMoved(sender, e);
-      SetNumberOfCheckItems();
-    }
-    protected override void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IResultCollectionPostProcessor>> e) {
-      base.Content_ItemsRemoved(sender, e);
-      SetNumberOfCheckItems();
-    }
-    protected override void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IResultCollectionPostProcessor>> e) {
-      base.Content_ItemsReplaced(sender, e);
-      SetNumberOfCheckItems();
-    }
-    #endregion
-
-    private void SetNumberOfCheckItems() { // TODO: eigene override für "Post Processors" -> Item Naming
-      if (InvokeRequired) {
-        Invoke((Action)SetNumberOfCheckItems);
-      } else {
-        this.itemsGroupBox.Text = String.Format("Post Processors (Checked: {0}/{1})", Content.CheckedItems.Count(), Content.Count);
-      }
-    }
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs	(revision 18050)
@@ -10,4 +10,5 @@
     internal const string Parameters = "Parameters";
     internal const string Results = "Results";
+    internal const string ResultCollectionProcessorItems = "ResultCollectionProcessors";
 
     internal const string Template = @"{
@@ -17,5 +18,6 @@
       },
       '" + Parameters + @"': [],
-      '" + Results + @"': []
+      '" + Results + @"': [],
+      '" + ResultCollectionProcessorItems + @"': []
     }";
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 18050)
@@ -66,4 +66,5 @@
     <Compile Include="Converters\BatchRunConverter.cs" />
     <Compile Include="Converters\ExperimentConverter.cs" />
+    <Compile Include="Converters\ObervableListConverter.cs" />
     <Compile Include="Converters\RegressionProblemDataConverter.cs" />
     <Compile Include="Converters\ResultConverter.cs" />
@@ -83,5 +84,5 @@
     <Compile Include="Interfaces\IValueJsonItem.cs" />
     <Compile Include="Interfaces\IValueLookupJsonItem.cs" />
-    <Compile Include="Interfaces\IResultCollectionPostProcessor.cs" />
+    <Compile Include="Interfaces\IResultCollectionProcessor.cs" />
     <Compile Include="JsonItems\ArrayJsonItem.cs" />
     <Compile Include="JsonItems\BoolJsonItems.cs" />
@@ -105,5 +106,6 @@
     <Compile Include="JsonItems\ValueJsonItem.cs" />
     <Compile Include="JsonItems\ValueLookupJsonItem.cs" />
-    <Compile Include="ResultCollectionPostProcessors\SymRegPythonPostProcessor.cs" />
+    <Compile Include="ResultCollectionProcessors\FilterResultCollectionProcessor.cs" />
+    <Compile Include="ResultCollectionProcessors\SymRegPythonProcessor.cs" />
     <Compile Include="ResultFormatters\MatlabResultFormatter.cs" />
     <Compile Include="ResultFormatters\PythonResultFormatter.cs" />
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionPostProcessor.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionPostProcessor.cs	(revision 18049)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Collections;
-using HeuristicLab.Core;
-using HeuristicLab.Optimization;
-
-namespace HeuristicLab.JsonInterface {
-  public interface IResultCollectionPostProcessor : IItem {
-    
-    void Apply(IObservableDictionary<string, IItem> /*ResultCollection*/ results, IDictionary<string, string> output); //evtl. doch JToken als Dict?
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionProcessor.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionProcessor.cs	(revision 18050)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionProcessor.cs	(revision 18050)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.JsonInterface {
+  public interface IResultCollectionProcessor : IParameterizedNamedItem {
+    void Apply(IObservableDictionary<string, IItem> results);
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs	(revision 18050)
@@ -19,6 +19,8 @@
     /// <param name="optimizer">the optimizer object to serialize</param>
     /// <param name="rootItem">Root JsonItem for serialization, considers only active JsonItems for serialization</param>
-    public static void GenerateTemplate(string templatePath, IOptimizer optimizer, IJsonItem rootItem, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
+    public static void GenerateTemplate(string templatePath, IOptimizer optimizer, IJsonItem rootItem, IEnumerable<IResultCollectionProcessor> resultCollectionProcessors) {
       // clear all runs
+      if (optimizer.ExecutionState == ExecutionState.Paused)
+        optimizer.Stop();
       optimizer.Runs.Clear();
 
@@ -32,24 +34,11 @@
       JArray parameterItems = new JArray();
       JArray resultItems = new JArray();
-      JArray postProcessorItems = new JArray();
-      // postProcessors.Select(x => new JObject().Add("Name", JToken.Parse(x.GetType().Name))
-      foreach (var proc in postProcessors) {
-        var tmp = new JObject();
-        tmp.Add("Name", proc.GetType().Name);
-        postProcessorItems.Add(tmp);
-      }
-
-      IList<IJsonItem> jsonItems = new List<IJsonItem>();
-     
+      JArray resultCollectionProcessorItems = new JArray();
       string templateName = Path.GetFileName(templatePath);
       string templateDirectory = Path.GetDirectoryName(templatePath);
-
       #endregion
 
-      if(optimizer.ExecutionState == ExecutionState.Paused)
-        optimizer.Stop();
-
-      // recursively filter items with values/ranges/actualNames
-      PopulateJsonItems(rootItem, jsonItems);
+      // filter items with values/ranges/actualNames
+      var jsonItems = rootItem.Where(x => x.Active && !(x is EmptyJsonItem) && !(x is UnsupportedJsonItem));
 
       #region Serialize HL File
@@ -71,4 +60,25 @@
       #endregion
 
+      #region ResultCollectionProcessor Serialization
+      foreach (var proc in resultCollectionProcessors) {
+        JArray rcpParameterItems = new JArray();
+        var guid = StorableTypeAttribute.GetStorableTypeAttribute(proc.GetType()).Guid.ToString();
+        var item = JsonItemConverter.Extract(proc);
+
+        var rcpItems = item
+          .Where(x => !(x is EmptyJsonItem) && !(x is UnsupportedJsonItem))
+          .Select(x => x.GenerateJObject());
+
+        foreach (var i in rcpItems)
+          rcpParameterItems.Add(i);
+
+        JObject processorObj = new JObject();
+        processorObj.Add(nameof(IJsonItem.Name), item.Name);
+        processorObj.Add("GUID", guid);
+        processorObj.Add(Constants.Parameters, rcpParameterItems);
+        resultCollectionProcessorItems.Add(processorObj);
+      }
+      #endregion
+
       #region Set Template Data
       template[Constants.Metadata][Constants.TemplateName] = templateName;
@@ -76,5 +86,5 @@
       template[Constants.Parameters] = parameterItems;
       template[Constants.Results] = resultItems;
-      template["PostProcessors"] = postProcessorItems;
+      template[Constants.ResultCollectionProcessorItems] = resultCollectionProcessorItems;
       #endregion
 
@@ -83,14 +93,4 @@
       #endregion
     }
-
-    #region Helper    
-    private static void PopulateJsonItems(IJsonItem item, IList<IJsonItem> jsonItems) {
-      foreach(var x in item) { // TODO: dieses konstrukt notwendig?
-        if (x.Active && !(x is EmptyJsonItem) && !(x is UnsupportedJsonItem)) {
-          jsonItems.Add(x);
-        }
-      }
-    }
-    #endregion
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 18049)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 18050)
@@ -14,8 +14,8 @@
       Optimizer = optimizer;
       ConfiguredResultItems = configuredResultItems;
-      PostProcessors = Enumerable.Empty<IResultCollectionPostProcessor>();
+      PostProcessors = Enumerable.Empty<IResultCollectionProcessor>();
     }
 
-    public InstantiatorResult(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
+    public InstantiatorResult(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems, IEnumerable<IResultCollectionProcessor> postProcessors) {
       Optimizer = optimizer;
       ConfiguredResultItems = configuredResultItems;
@@ -25,5 +25,5 @@
     public IOptimizer Optimizer { get; }
     public IEnumerable<IResultJsonItem> ConfiguredResultItems { get; }
-    public IEnumerable<IResultCollectionPostProcessor> PostProcessors { get; }
+    public IEnumerable<IResultCollectionProcessor> PostProcessors { get; }
   }
 
@@ -65,4 +65,5 @@
       #endregion
 
+      #region Deserialize HL File
       // extract metadata information
       string relativePath = Template[Constants.Metadata][Constants.HLFileLocation].ToString().Trim(); // get relative path
@@ -72,5 +73,4 @@
 
       string hLFileLocation = Path.Combine(Path.GetDirectoryName(templateFileFullPath), relativePath);
-      #region Deserialize HL File
       ProtoBufSerializer serializer = new ProtoBufSerializer();
       IOptimizer optimizer = (IOptimizer)serializer.Deserialize(hLFileLocation);
@@ -94,15 +94,30 @@
       JsonItemConverter.Inject(optimizer, rootItem);
 
-      IList<IResultCollectionPostProcessor> postProcessorList = new List<IResultCollectionPostProcessor>();
-      var postProcessors = ApplicationManager.Manager.GetInstances<IResultCollectionPostProcessor>();
-      foreach (JObject obj in Template["PostProcessors"]) {
-        //string name = obj.Property("Name").Value.ToString();
-        foreach(var proc in postProcessors) {
-          if (proc.GetType().Name == obj["Name"].ToString())
-            postProcessorList.Add(proc);
+      return new InstantiatorResult(optimizer, CollectResults(), CollectResultCollectionProcessors());
+    }
+
+    /// <summary>
+    /// Instantiates all defined (in template) ResultCollectionProcessors and injects the configured parameters.
+    /// </summary>
+    private IEnumerable<IResultCollectionProcessor> CollectResultCollectionProcessors() {
+      IList<IResultCollectionProcessor> postProcessorList = new List<IResultCollectionProcessor>();
+      foreach (JObject obj in Template[Constants.ResultCollectionProcessorItems]) {
+        var guid = obj["GUID"].ToString();
+        var parameters = obj[Constants.Parameters];
+        var type = Mapper.StaticCache.GetType(new Guid(guid));
+        var rcp = (IResultCollectionProcessor)Activator.CreateInstance(type);
+        var rcpItem = JsonItemConverter.Extract(rcp);
+
+        foreach (JObject param in parameters) {
+          var path = param[nameof(IJsonItem.Path)].ToString();
+          foreach (var item in rcpItem)
+            if (item.Path == path)
+              item.SetJObject(param);
         }
+
+        JsonItemConverter.Inject(rcp, rcpItem);
+        postProcessorList.Add(rcp);
       }
-
-      return new InstantiatorResult(optimizer, CollectResults(), postProcessorList);
+      return postProcessorList;
     }
 
@@ -110,9 +125,7 @@
       IList<IResultJsonItem> res = new List<IResultJsonItem>();
       foreach(JObject obj in Template[Constants.Results]) {
-        //string name = obj.Property("Name").Value.ToString();
         var resultItem = new ResultJsonItem();
         resultItem.SetJObject(obj);
         res.Add(resultItem);
-        //res.Add(new ResultJsonItem() { Name = name });
       }
       return res;
@@ -124,5 +137,5 @@
 
       foreach (JObject obj in Template[Constants.Parameters]) {
-        string path = obj.Property("Path").Value.ToString();
+        string path = obj.Property(nameof(IJsonItem.Path)).Value.ToString();
         foreach(var tmp in root) {
           if(tmp.Path == path) {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionProcessors/FilterResultCollectionProcessor.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionProcessors/FilterResultCollectionProcessor.cs	(revision 18050)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionProcessors/FilterResultCollectionProcessor.cs	(revision 18050)
@@ -0,0 +1,49 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.JsonInterface {
+  [StorableType("4AF9EF94-2EF3-4F54-8B8D-942454CF8DDF")]
+  public class FilterResultCollectionProcessor : ParameterizedNamedItem, IResultCollectionProcessor {
+
+    #region Constants
+    private const string FilterStringParameterName = "Filters";
+    #endregion
+
+    #region Parameter Properties
+    public IFixedValueParameter<StringValue> FilterStringParameter =>
+      (IFixedValueParameter<StringValue>)Parameters[FilterStringParameterName];
+    #endregion
+
+    #region Constructors & Cloning
+    [StorableConstructor]
+    protected FilterResultCollectionProcessor(StorableConstructorFlag _) : base(_) { }
+    public FilterResultCollectionProcessor() {
+      Parameters.Add(new FixedValueParameter<StringValue>(FilterStringParameterName, "", new StringValue()));
+    }
+    public FilterResultCollectionProcessor(FilterResultCollectionProcessor original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new FilterResultCollectionProcessor(this, cloner);
+    }
+    #endregion
+
+    public void Apply(IObservableDictionary<string, IItem> results) {
+      var filters = FilterStringParameter.Value.Value.Split(';');
+      
+      
+      /*
+      foreach (var filter in FilterStringParameter.Value) {
+        if (results.ContainsKey(filter.Value))
+          results.Remove(filter.Value);
+      }*/
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionProcessors/SymRegPythonProcessor.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionProcessors/SymRegPythonProcessor.cs	(revision 18050)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionProcessors/SymRegPythonProcessor.cs	(revision 18050)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.DataAnalysis.Symbolic;
+using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
+using HEAL.Attic;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.JsonInterface {
+  [StorableType("844F2887-B7A0-4BD4-89B8-F9155C65D214")]
+  public class SymRegPythonProcessor : ParameterizedNamedItem, IResultCollectionProcessor {
+
+    #region Constructors & Cloning
+    [StorableConstructor]
+    protected SymRegPythonProcessor(StorableConstructorFlag _) : base(_) { }
+    public SymRegPythonProcessor() { }
+    public SymRegPythonProcessor(SymRegPythonProcessor original, Cloner cloner) : base(original, cloner) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymRegPythonProcessor(this, cloner);
+    }
+    #endregion
+
+    public void Apply(IObservableDictionary<string, IItem> results) {
+      var formatter = new SymbolicDataAnalysisExpressionPythonFormatter();
+      var resultCopy = new ObservableDictionary<string, IItem>(results);
+      foreach (var kvp in resultCopy) {
+        if (kvp.Value is ISymbolicRegressionSolution sol) {
+          results.Add($"{kvp.Key} - Python" , new StringValue(formatter.Format(sol.Model.SymbolicExpressionTree)));
+        }
+      }
+    }
+  }
+}
