Index: /trunk/sources/HeuristicLab 3.3 Services.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3 Services.sln	(revision 4383)
+++ /trunk/sources/HeuristicLab 3.3 Services.sln	(revision 4384)
@@ -6,5 +6,8 @@
 		ConfigMerger.exe = ConfigMerger.exe
 		..\documentation\License\gpl-3.0.txt = ..\documentation\License\gpl-3.0.txt
+		HeuristicLab 3.3 Services.vsmdi = HeuristicLab 3.3 Services.vsmdi
+		Local.testsettings = Local.testsettings
 		PreBuildEvent.cmd = PreBuildEvent.cmd
+		TraceAndTestImpact.testsettings = TraceAndTestImpact.testsettings
 	EndProjectSection
 EndProject
@@ -21,5 +24,10 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB-3.3", "HeuristicLab.Services.OKB\3.3\HeuristicLab.Services.OKB-3.3.csproj", "{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.OKB.DataAccess-3.3.Tests", "HeuristicLab.Services.OKB.DataAccess\3.3\Tests\HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj", "{89234006-FE1B-4A15-AFEC-91CB3526F0A5}"
+EndProject
 Global
+	GlobalSection(TestCaseManagementSettings) = postSolution
+		CategoryFile = HeuristicLab 3.3 Services.vsmdi
+	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -103,4 +111,12 @@
 		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.ActiveCfg = Release|x86
 		{766DA4B7-2A0E-4CDE-8F90-93D8B1AD62CF}.Release|x86.Build.0 = Release|x86
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x64.ActiveCfg = Release|Any CPU
+		{89234006-FE1B-4A15-AFEC-91CB3526F0A5}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab 3.3 Services.vsmdi
===================================================================
--- /trunk/sources/HeuristicLab 3.3 Services.vsmdi	(revision 4384)
+++ /trunk/sources/HeuristicLab 3.3 Services.vsmdi	(revision 4384)
@@ -0,0 +1,6 @@
+﻿<?xml version="1.0" encoding="UTF-8"?>
+<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
+    <RunConfiguration id="2a6da91c-43f0-41c6-bcb4-341a1380c277" name="Local" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  </TestList>
+</TestLists>
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Extensions.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Extensions.cs	(revision 4384)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Extensions.cs	(revision 4384)
@@ -0,0 +1,536 @@
+#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.Data.Linq;
+using System.Linq;
+
+namespace HeuristicLab.Services.OKB.DataAccess {
+  #region Value Management
+  #region Interfaces
+  public interface IParameterValue {
+    Experiment Experiment { get; set; }
+    object Value { get; set; }
+  }
+  public interface IAlgorithmParameterValue : IParameterValue {
+    AlgorithmParameter AlgorithmParameter { get; set; }
+  }
+  public interface IProblemParameterValue : IParameterValue {
+    ProblemParameter ProblemParameter { get; set; }
+  }
+  public interface IResultValue {
+    Result Result { get; set; }
+    Run Run { get; set; }
+    object Value { get; set; }
+  }
+  public interface IProblemCharacteristicValue {
+    Problem Problem { get; set; }
+    ProblemCharacteristic ProblemCharacteristic { get; set; }
+    object Value { get; set; }
+  }
+  #endregion
+
+  #region Algorithm Parameters
+  public partial class AlgorithmParameterBlobValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class AlgorithmParameterBoolValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (bool)value; }
+    }
+  }
+  public partial class AlgorithmParameterFloatValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class AlgorithmParameterIntValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class AlgorithmParameterStringValue : IAlgorithmParameterValue {
+    object IAlgorithmParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  #region Problem Parameters
+  public partial class ProblemParameterBlobValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class ProblemParameterBoolValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (bool)value; }
+    }
+  }
+  public partial class ProblemParameterFloatValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class ProblemParameterIntValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class ProblemParameterStringValue : IProblemParameterValue {
+    object IProblemParameterValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  #region Results
+  public partial class ResultBlobValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (Binary)value; }
+    }
+  }
+  public partial class ResultBoolValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (bool)value; }
+    }
+  }
+  public partial class ResultFloatValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class ResultIntValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class ResultStringValue : IResultValue {
+    object IResultValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  #region Problem Characteristics
+  public partial class ProblemCharacteristicIntValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (int)value; }
+    }
+  }
+  public partial class ProblemCharacteristicFloatValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (double)value; }
+    }
+  }
+  public partial class ProblemCharacteristicStringValue : IProblemCharacteristicValue {
+    object IProblemCharacteristicValue.Value {
+      get { return this.Value; }
+      set { this.Value = (string)value; }
+    }
+  }
+  #endregion
+
+  public partial class Experiment {
+    public IQueryable<IAlgorithmParameterValue> AlgorithmParameterValues {
+      get {
+        return AlgorithmParameterBlobValues
+          .AsQueryable()
+          .Cast<IAlgorithmParameterValue>()
+          .Concat(AlgorithmParameterBoolValues.Cast<IAlgorithmParameterValue>())
+          .Concat(AlgorithmParameterFloatValues.Cast<IAlgorithmParameterValue>())
+          .Concat(AlgorithmParameterIntValues.Cast<IAlgorithmParameterValue>())
+          .Concat(AlgorithmParameterStringValues.Cast<IAlgorithmParameterValue>());
+      }
+      set {
+
+
+        if (value == null) return;
+        foreach (IParameterValue pv in value) {
+          if (pv == null) continue;
+          if (pv is IntParameterValue) {
+            IntParameterValues.Add(new IntParameterValue() { ParameterId = pv.ParameterId, Value = (int)pv.Value });
+          } else if (pv is FloatParameterValue) {
+            FloatParameterValues.Add(new FloatParameterValue() { ParameterId = pv.ParameterId, Value = (double)pv.Value });
+          } else if (pv is CharParameterValue) {
+            CharParameterValues.Add(new CharParameterValue() { ParameterId = pv.ParameterId, Value = (string)pv.Value });
+          } else if (pv is OperatorParameterValue) {
+            OperatorParameterValues.Add(new OperatorParameterValue() {
+              ParameterId = pv.ParameterId,
+              Value = (Binary)pv.Value,
+              DataTypeId = ((OperatorParameterValue)pv).DataTypeId,
+            });
+          } else {
+            throw new ArgumentException("Invalid Parameter type" + pv.GetType());
+          }
+        }
+      }
+    }
+  }
+
+  public partial class Run {
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return IntResultValues
+          .AsQueryable()
+          .Cast<IResultValue>()
+          .Concat(FloatResultValues.Cast<IResultValue>())
+          .Concat(CharResultValues.Cast<IResultValue>())
+          .Concat(BlobResultValues.Cast<IResultValue>());
+      }
+      set {
+        foreach (IResultValue rv in value) {
+          if (rv == null) continue;
+          if (rv is IntResultValue) {
+            IntResultValues.Add(new IntResultValue() { ResultId = rv.ResultId, Value = (int)rv.Value });
+          } else if (rv is FloatResultValue) {
+            FloatResultValues.Add(new FloatResultValue() { ResultId = rv.ResultId, Value = (double)rv.Value });
+          } else if (rv is CharResultValue) {
+            CharResultValues.Add(new CharResultValue() { ResultId = rv.ResultId, Value = (string)rv.Value });
+          } else if (rv is BlobResultValue) {
+            BlobResultValues.Add(new BlobResultValue() { ResultId = rv.ResultId, Value = (Binary)rv.Value });
+          } else {
+            throw new ArgumentException("Invalid result value type " + rv.GetType());
+          }
+        }
+      }
+    }
+  }
+  public partial class Result {
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return IntResultValues
+          .AsQueryable()
+          .Cast<IResultValue>()
+          .Concat(FloatResultValues.Cast<IResultValue>())
+          .Concat(CharResultValues.Cast<IResultValue>())
+          .Concat(BlobResultValues.Cast<IResultValue>());
+      }
+    }
+  }
+
+  public partial class Problem {
+    public IQueryable<IProblemCharacteristicValue> ProblemCharacteristicValues {
+      get {
+        return IntProblemCharacteristicValues
+          .AsQueryable()
+          .Cast<IProblemCharacteristicValue>()
+          .Concat(FloatProblemCharacteristicValues.Cast<IProblemCharacteristicValue>())
+          .Concat(CharProblemCharacteristicValues.Cast<IProblemCharacteristicValue>());
+      }
+    }
+  }
+  public partial class ProblemCharacteristic {
+    public IQueryable<IProblemCharacteristicValue> ProblemCharacteristicValues {
+      get {
+        return IntProblemCharacteristicValues
+          .AsQueryable()
+          .Cast<IProblemCharacteristicValue>()
+          .Concat(FloatProblemCharacteristicValues.Cast<IProblemCharacteristicValue>())
+          .Concat(CharProblemCharacteristicValues.Cast<IProblemCharacteristicValue>());
+      }
+    }
+  }
+  #endregion
+
+  #region Abuse entities to store parameter values for a single (not yet existing experiment)
+  public partial class Parameter {
+    public IParameterValue ParameterValue {
+      get {
+        try {
+          return IntParameterValues
+            .AsQueryable()
+            .Cast<IParameterValue>()
+            .Concat(FloatParameterValues.Cast<IParameterValue>())
+            .Concat(CharParameterValues.Cast<IParameterValue>())
+            .Concat(OperatorParameterValues.Cast<IParameterValue>())
+            .ToList().Single();
+        }
+        catch {
+          return null;
+        }
+      }
+      set {
+        if (value == ParameterValue) // access to ParameterValue ensures that there is a single value
+          return;
+        if (value == null)
+          throw new ArgumentNullException("ParameterValue");
+        IParameterValue oldValue = ParameterValue;
+        Type t = value.GetType();
+        if (oldValue.GetType() != t)
+          throw new ArgumentException("cannot assign value with different type");
+        if (t == typeof(IntParameterValue)) {
+          IntParameterValues.Clear();
+          IntParameterValues.Add((IntParameterValue)value);
+        } else if (t == typeof(FloatParameterValue)) {
+          FloatParameterValues.Clear();
+          FloatParameterValues.Add((FloatParameterValue)value);
+        } else if (t == typeof(CharParameterValue)) {
+          CharParameterValues.Clear();
+          CharParameterValues.Add((CharParameterValue)value);
+        } else if (t == typeof(OperatorParameterValue)) {
+          OperatorParameterValues.Clear();
+          OperatorParameterValues.Add((OperatorParameterValue)value);
+        } else throw new ArgumentException("invalid parameter value type " + t.Name);
+      }
+    }
+  }
+  public partial class Result {
+    public IResultValue ResultValue {
+      get {
+        try {
+          return IntResultValues
+            .AsQueryable()
+            .Cast<IResultValue>()
+            .Concat(FloatResultValues.Cast<IResultValue>())
+            .Concat(CharResultValues.Cast<IResultValue>())
+            .Concat(BlobResultValues.Cast<IResultValue>()).ToList().Single();
+        }
+        catch {
+          return null;
+        }
+      }
+      set {
+        if (value == ResultValue)
+          return;
+        if (value == null)
+          throw new ArgumentNullException("ResultValue");
+        IResultValue oldValue = ResultValue;
+        Type t = value.GetType();
+        if (oldValue.GetType() != t)
+          throw new ArgumentException("cannot assign value with different type");
+        if (t == typeof(IntResultValue)) {
+          IntResultValues.Clear();
+          IntResultValues.Add((IntResultValue)value);
+        } else if (t == typeof(FloatResultValue)) {
+          FloatResultValues.Clear();
+          FloatResultValues.Add((FloatResultValue)value);
+        } else if (t == typeof(CharResultValue)) {
+          CharResultValues.Clear();
+          CharResultValues.Add((CharResultValue)value);
+        } else if (t == typeof(BlobResultValue)) {
+          BlobResultValues.Clear();
+          BlobResultValues.Add((BlobResultValue)value);
+        } else throw new ArgumentException("invalid result value type " + t.Name);
+      }
+    }
+  }
+  public partial class Algorithm {
+    public IQueryable<Parameter> Parameters {
+      get {
+        return Algorithm_Parameters.AsQueryable().Select(ap => ap.Parameter);
+      }
+    }
+    public IQueryable<IntParameterValue> IntParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.IntParameterValues.Count > 0)
+          .Select(p => p.IntParameterValues.Single());
+      }
+    }
+    public IQueryable<FloatParameterValue> FloatParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.FloatParameterValues.Count > 0)
+          .Select(p => p.FloatParameterValues.Single());
+      }
+    }
+    public IQueryable<CharParameterValue> CharParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.CharParameterValues.Count > 0)
+          .Select(p => p.CharParameterValues.Single());
+      }
+    }
+    public IQueryable<OperatorParameterValue> OperatorParameterValues {
+      get {
+        return Parameters.AsQueryable()
+          .Where(p => p.OperatorParameterValues.Count > 0)
+          .Select(p => p.OperatorParameterValues.Single());
+      }
+    }
+    public IQueryable<IParameterValue> ParameterValues {
+      get {
+        return Parameters.AsQueryable().Select(p => p.ParameterValue);
+      }
+    }
+
+    public IQueryable<Result> Results {
+      get {
+        return Algorithm_Results.AsQueryable().Select(ar => ar.Result);
+      }
+    }
+    public IQueryable<IntResultValue> IntResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.IntResultValues.Count > 0)
+          .Select(r => r.IntResultValues.Single());
+      }
+    }
+    public IQueryable<FloatResultValue> FloatResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.FloatResultValues.Count > 0)
+          .Select(r => r.FloatResultValues.Single());
+      }
+    }
+    public IQueryable<CharResultValue> CharResultValues {
+      get {
+
+        return Results.AsQueryable()
+          .Where(r => r.CharResultValues.Count > 0)
+          .Select(r => r.CharResultValues.Single());
+      }
+    }
+    public IQueryable<BlobResultValue> BlobResultValues {
+      get {
+        return Results.AsQueryable()
+          .Where(r => r.BlobResultValues.Count > 0)
+          .Select(r => r.BlobResultValues.Single());
+      }
+    }
+    public IQueryable<IResultValue> ResultValues {
+      get {
+        return Results.AsQueryable().Select(r => r.ResultValue);
+      }
+    }
+  }
+  #endregion
+
+  #region Type access
+  public partial class DataType {
+    public Type Type {
+      get {
+        return Type.GetType(ClrName, false) ?? typeof(object);
+      }
+    }
+  }
+  #endregion
+
+  #region NamedEntities
+  public interface INamedEntity {
+    int Id { get; }
+    string Name { get; }
+    string Description { get; }
+  }
+  public partial class AlgorithmClass : INamedEntity { }
+  public partial class Algorithm : INamedEntity { }
+  public partial class ProblemClass : INamedEntity { }
+  public partial class Problem : INamedEntity { }
+  public partial class SolutionRepresentation : INamedEntity { }
+  public partial class ProblemCharacteristic : INamedEntity { }
+  public partial class Parameter : INamedEntity { }
+  public partial class Result : INamedEntity { }
+  public partial class Project : INamedEntity { }
+  public partial class Platform : INamedValue { }
+  #endregion
+
+  #region DataTypes
+  public interface IIntValue {
+    int Value { get; }
+  }
+  public partial class IntResultValue : IIntValue { }
+  public partial class IntParameterValue : IIntValue { }
+  public partial class IntProblemCharacteristicValue : IIntValue { }
+  public interface IFloatValue {
+    double Value { get; }
+  }
+  public partial class FloatResultValue : IFloatValue { }
+  public partial class FloatParameterValue : IFloatValue { }
+  public partial class FloatProblemCharacteristicValue : IFloatValue { }
+  public interface ICharValue {
+    string Value { get; }
+  }
+  public partial class CharResultValue : ICharValue { }
+  public partial class CharParameterValue : ICharValue { }
+  public partial class CharProblemCharacteristicValue : ICharValue { }
+  #endregion
+
+  #region NamedValues
+  public interface INamedValue {
+    string Name { get; }
+  }
+  public interface IValue<T> : INamedValue {
+    T Value { get; }
+  }
+  public partial class IntResultValue : IValue<int> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class FloatResultValue : IValue<double> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class CharResultValue : IValue<string> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class BlobResultValue : IValue<Binary> {
+    public string Name { get { return Result.Name; } }
+  }
+  public partial class IntParameterValue : IValue<int> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class FloatParameterValue : IValue<double> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class CharParameterValue : IValue<string> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class OperatorParameterValue : IValue<Binary> {
+    public string Name { get { return Parameter.Name; } }
+  }
+  public partial class IntProblemCharacteristicValue : IValue<int> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  public partial class FloatProblemCharacteristicValue : IValue<double> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  public partial class CharProblemCharacteristicValue : IValue<string> {
+    public string Name { get { return ProblemCharacteristic.Name; } }
+  }
+  #endregion
+
+  #region DynamicTypeInformation
+  public interface IDynamicParent : INamedEntity {
+    DataType DataType { get; }
+  }
+  public partial class ProblemCharacteristic : IDynamicParent { }
+  public partial class Parameter : IDynamicParent { }
+  public partial class Result : IDynamicParent { }
+  #endregion
+}
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj	(revision 4383)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj	(revision 4384)
@@ -126,4 +126,7 @@
       <DependentUpon>OKB.dbml</DependentUpon>
     </None>
+    <Compile Include="Extensions.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="OKB.generated.cs">
       <DependentUpon>OKB.tt</DependentUpon>
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs	(revision 4383)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs	(revision 4384)
@@ -3,5 +3,5 @@
 // <auto-generated>
 //     This code was generated by LINQ to SQL template for T4 C#
-//     Generated at 09/12/2010 03:47:59
+//     Generated at 09/13/2010 13:15:17
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj	(revision 4384)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/HeuristicLab.Services.OKB.DataAccess-3.3.Tests.csproj	(revision 4384)
@@ -0,0 +1,66 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>
+    </ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{89234006-FE1B-4A15-AFEC-91CB3526F0A5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.OKB.DataAccess_33.Tests</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.OKB.DataAccess-3.3.Tests</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UnitTest.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Services.OKB.DataAccess-3.3.csproj">
+      <Project>{E36BE58F-F3CE-40BB-9AB3-9F9E30AD5CCF}</Project>
+      <Name>HeuristicLab.Services.OKB.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/Properties/AssemblyInfo.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/Properties/AssemblyInfo.cs	(revision 4384)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/Properties/AssemblyInfo.cs	(revision 4384)
@@ -0,0 +1,56 @@
+﻿#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.OKB.DataAccess-3.3.Tests")]
+[assembly: AssemblyDescription("Unit tests for the HeuristicLab OKB services data access layer.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("50ee0006-ea13-4495-8136-d62565b6f013")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.0")]
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/UnitTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/UnitTest.cs	(revision 4384)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Tests/UnitTest.cs	(revision 4384)
@@ -0,0 +1,104 @@
+﻿#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.Text;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data.Linq;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB.DataAccess_33.Tests {
+  /// <summary>
+  /// Summary description for UnitTest1
+  /// </summary>
+  [TestClass]
+  public class UnitTest {
+    public UnitTest() {
+      //
+      // TODO: Add constructor logic here
+      //
+    }
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    //
+    // You can use the following additional attributes as you write your tests:
+    //
+    // Use ClassInitialize to run code before running the first test in the class
+    // [ClassInitialize()]
+    // public static void MyClassInitialize(TestContext testContext) { }
+    //
+    // Use ClassCleanup to run code after all tests in a class have run
+    // [ClassCleanup()]
+    // public static void MyClassCleanup() { }
+    //
+    // Use TestInitialize to run code before running each test 
+    // [TestInitialize()]
+    // public void MyTestInitialize() { }
+    //
+    // Use TestCleanup to run code after each test has run
+    // [TestCleanup()]
+    // public void MyTestCleanup() { }
+    //
+    #endregion
+
+    [TestMethod]
+    public void TestMethod1() {
+      using (OKBDataContext okb = new OKBDataContext()) {
+        okb.AlgorithmParameterIntValues.DeleteAllOnSubmit(okb.AlgorithmParameterIntValues);
+        okb.AlgorithmParameters.DeleteAllOnSubmit(okb.AlgorithmParameters);
+        okb.Experiments.DeleteAllOnSubmit(okb.Experiments);
+        okb.Algorithms.DeleteAllOnSubmit(okb.Algorithms);
+        okb.Problems.DeleteAllOnSubmit(okb.Problems);
+        okb.SolutionRepresentations.DeleteAllOnSubmit(okb.SolutionRepresentations);
+        okb.ProblemClasses.DeleteAllOnSubmit(okb.ProblemClasses);
+        okb.AlgorithmClasses.DeleteAllOnSubmit(okb.AlgorithmClasses);
+        okb.SubmitChanges();
+        AlgorithmClass ac = new AlgorithmClass() { Name = "AlgorithmClass" };
+        ProblemClass pc = new ProblemClass() { Name = "ProblemClass" };
+        SolutionRepresentation sr = new SolutionRepresentation() { Name = "SolutionRepresentation" };
+        Algorithm a = new Algorithm() { Name = "Alg", AlgorithmClass = ac, PlatformId = 1 };
+        Problem p = new Problem() { Name = "Prb", ProblemClass = pc, SolutionRepresentation = sr, PlatformId = 1 };
+        Experiment e = new Experiment() { Algorithm = a, Problem = p };
+        AlgorithmParameter ap = new AlgorithmParameter() { Name = "Param", Algorithm = a, DataTypeId = 1 };
+        ap.AlgorithmParameterIntValues.Add(new AlgorithmParameterIntValue() { AlgorithmParameterId = 0, Experiment = e, Value = 23 });
+        okb.AlgorithmClasses.InsertOnSubmit(ac);
+        okb.SubmitChanges();
+      }
+    }
+  }
+}
Index: /trunk/sources/Local.testsettings
===================================================================
--- /trunk/sources/Local.testsettings	(revision 4384)
+++ /trunk/sources/Local.testsettings	(revision 4384)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="UTF-8"?>
+<TestSettings name="Local" id="2a6da91c-43f0-41c6-bcb4-341a1380c277" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <Description>These are default test settings for a local test run.</Description>
+  <Deployment enabled="false" />
+  <Execution>
+    <TestTypeSpecific />
+    <AgentRule name="Execution Agents">
+    </AgentRule>
+  </Execution>
+</TestSettings>
Index: /trunk/sources/TraceAndTestImpact.testsettings
===================================================================
--- /trunk/sources/TraceAndTestImpact.testsettings	(revision 4384)
+++ /trunk/sources/TraceAndTestImpact.testsettings	(revision 4384)
@@ -0,0 +1,21 @@
+﻿<?xml version="1.0" encoding="UTF-8"?>
+<TestSettings name="Trace and Test Impact" id="e70df925-c46a-4fee-ab9e-0cd212124b54" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <Description>These are test settings for Trace and Test Impact.</Description>
+  <Execution>
+    <TestTypeSpecific />
+    <AgentRule name="Execution Agents">
+      <DataCollectors>
+        <DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/ActionLog/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.ManualTest.ActionLog.ActionLogPlugin, Microsoft.VisualStudio.TestTools.ManualTest.ActionLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Actions">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
+        </DataCollector>
+      </DataCollectors>
+    </AgentRule>
+  </Execution>
+</TestSettings>
