Free cookie consent management tool by TermsFeed Policy Generator

Changeset 2504


Ignore:
Timestamp:
11/18/09 18:33:30 (15 years ago)
Author:
gkronber
Message:

Worked on core of plugin infrastructure.

  • Collected all classes into a single assembly (HL.PluginInfrastructure)
  • Moved SplashScreen and MainForm from HeuristicLab.exe project into the plugin infrastructure.
  • Introduced namespaces
  • Added strict access modifiers (internal)
  • Fixed most FxCop warnings in plugin infrastructure core.
  • Fixed issues with plugin load/unload events
  • Deleted empty interface IControl

#799

Location:
branches/PluginInfrastructure Refactoring
Files:
1 added
1 deleted
33 edited
13 moved

Legend:

Unmodified
Added
Removed
  • branches/PluginInfrastructure Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs

    r2486 r2504  
    9393    /// is neither a view nor an editor.</exception>
    9494    /// <param name="control">The control to display.</param>
    95     public void ShowControl(IControl control) {
    96       if (InvokeRequired) Invoke((Action<IControl>)ShowControl, control);
     95    public void ShowControl(object control) {
     96      if (InvokeRequired) Invoke((Action<object>)ShowControl, control);
    9797      else {
    9898        DockContent content;
  • branches/PluginInfrastructure Refactoring/HeuristicLab.Core/3.2/Interfaces/IView.cs

    r776 r2504  
    2929  /// An interface for all kinds visual representations of items (objects, operators...).
    3030  /// </summary>
    31   public interface IView : IControl {
     31  public interface IView {
    3232    /// <summary>
    3333    /// Gets the current item instance.
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationAttribute.cs

    r2488 r2504  
    2727  /// <summary>
    2828  /// This attribute can be used to specify meta data for applications.
    29   /// For example to specify name, version and description of applications.
     29  /// For example to specify name and description of applications.
    3030  /// </summary>
    3131  [AttributeUsage(AttributeTargets.Class)]
    32   public class ApplicationAttribute : System.Attribute {
     32  public sealed class ApplicationAttribute : System.Attribute {
    3333    private string name;
    3434    /// <summary>
    35     /// Gets or sets the name of the application.
     35    /// Gets the name of the application.
    3636    /// </summary>
    3737    public string Name {
    3838      get { return name; }
    39       set { name = value; }
    4039    }
    41 
    42     //private string version;
    43     ///// <summary>
    44     ///// Gets or sets the version of the application.
    45     ///// </summary>
    46     //public string Version {
    47     //  get { return version; }
    48     //  set { version = value; }
    49     //}
    5040
    5141    private string description;
    5242    /// <summary>
    53     /// Gets or sets the description of the application.
     43    /// Gets the description of the application.
    5444    /// </summary>
    5545    public string Description {
    5646      get { return description; }
    57       set { description = value; }
    5847    }
    5948
    6049    private bool restartOnErrors;
    6150    /// <summary>
    62     /// Gets or sets the boolean flag whether the plugin should be automatically restarted when it is closed because of an exception (for services).
     51    /// Gets whether the plugin should be automatically restarted when it is closed because of an exception (for services).
    6352    /// </summary>
    6453    public bool RestartOnErrors {
    6554      get { return restartOnErrors; }
    66       set { restartOnErrors = value; }
    6755    }
    6856
     
    7260    /// </summary>
    7361    public ApplicationAttribute(string name)
    74       : this(name, "") {
     62      : this(name, String.Empty) {
    7563    }
    7664
     
    8472    }
    8573
    86     ///// <summary>
    87     ///// Initializes a new instance of <see cref="ApplicationAttribute"/>.
    88     ///// <param name="name">Name of the application</param>
    89     ///// <param name="description">Description of the application</param>
    90     ///// <param name="version">Version string of the application</param>
    91     ///// </summary>
    92     //public ApplicationAttribute(string name, string description, string version)
    93     //  : this(name, description, version, false) {
    94     //}
    95 
    9674    /// <summary>
    9775    /// Initializes a new instance of <see cref="ApplicationAttribute"/>.
     
    10280    /// </summary>
    10381    public ApplicationAttribute(string name, string description, bool restartOnErrors) {
     82      if (name == null) throw new ArgumentNullException("name", "Application name is null.");
     83      if (description == null) throw new ArgumentNullException("description", "Application description is null.");
    10484      this.name = name;
    10585      this.description = description;
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs

    r2475 r2504  
    3030  /// </summary>
    3131  [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
    32   public class AssemblyBuildDateAttribute : Attribute {
     32  public sealed class AssemblyBuildDateAttribute : Attribute {
    3333    private DateTime buildDate;
    3434    /// <summary>
    35     /// Gets or sets the build date.
     35    /// Gets the build date.
    3636    /// </summary>
    3737    public DateTime BuildDate {
    3838      get { return buildDate; }
    39       set { buildDate = value; }
    4039    }
     40
    4141    /// <summary>
    4242    /// Initializes a new instance of <see cref="AssemblyBuildDateAttribute"/> with the given
     
    4444    /// </summary>
    4545    /// <exception cref="FormatException">Thrown when the time stamp could not be parsed as build date.</exception>
    46     /// <param name="timeStamp">The build date of the assembly.</param>
    47     public AssemblyBuildDateAttribute(string timeStamp)
     46    /// <param name="buildDate">The build date of the assembly.</param>
     47    public AssemblyBuildDateAttribute(string buildDate)
    4848      : base() {
    49 
    50       if(!DateTime.TryParse(timeStamp, out buildDate)) {
    51         throw new FormatException("Can't parse AssemblyBuildDate " + timeStamp);
     49      if (!DateTime.TryParse(buildDate, out this.buildDate)) {
     50        throw new FormatException("Can't parse AssemblyBuildDate " + buildDate);
    5251      }
    5352    }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginAttribute.cs

    r2488 r2504  
    2727  /// <summary>
    2828  /// This attribute can be used to specify meta data for plugins.
    29   /// For example to specify name, version and description of plugins.
     29  /// For example to specify name and description of plugins.
    3030  /// </summary>
    3131  [AttributeUsage(AttributeTargets.Class)]
    32   public class PluginAttribute : System.Attribute {
     32  public sealed class PluginAttribute : System.Attribute {
    3333    private string name;
    3434    /// <summary>
    35     /// Gets or sets the name of the plugin.
     35    /// Gets the name of the plugin.
    3636    /// </summary>
    3737    public string Name {
    3838      get { return name; }
    39       // set { name = value; }
    4039    }
    41 
    42     //private string version;
    43     ///// <summary>
    44     ///// Gets or sets the version of the plugin.
    45     ///// </summary>
    46     //public string Version {
    47     //  get { return version; }
    48     //  set { version = value; }
    49     //}
    5040
    5141    private string description;
    5242    /// <summary>
    53     /// Gets or sets the description of the plugin.
     43    /// Gets the description of the plugin.
    5444    /// </summary>
    5545    public string Description {
    5646      get { return description; }
    57       // set { description = value; }
    5847    }
    5948
     
    7564      this.description = description;
    7665    }
    77 
    78     ///// <summary>
    79     ///// Initializes a new instance of <see cref="PluginDescriptionAttribute"/>.
    80     ///// <param name="name">Name of the plugin</param>
    81     ///// <param name="description">Description of the plugin</param>
    82     ///// <param name="version">Version string of the plugin</param>
    83     ///// </summary>
    84     //public PluginDescriptionAttribute(string name, string description, string version) {
    85     //  this.name = name;
    86     //  this.version = version;
    87     //  this.description = description;
    88     //}
    8966  }
    9067}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs

    r2481 r2504  
    3333
    3434    /// <summary>
    35     /// Gets or sets the name of the plugin that is needed to load a plugin.
     35    /// Gets the name of the plugin that is needed to load a plugin.
    3636    /// </summary>
    3737    public string Dependency {
    3838      get { return dependency; }
    39       // set { dependency = value; }
    4039    }
    4140
     
    4544    /// </summary>
    4645    public PluginDependencyAttribute(string dependency) {
     46      if (string.IsNullOrEmpty(dependency)) throw new ArgumentException("Dependency is null or empty.", "dependency");
    4747      this.dependency = dependency;
    4848    }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs

    r2496 r2504  
    2323using System.Collections.Generic;
    2424using System.Text;
     25using System.IO;
    2526
    2627namespace HeuristicLab.PluginInfrastructure {
     
    4041  /// </summary>
    4142  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
    42   public class PluginFileAttribute : System.Attribute {
    43     private string filename;
     43  public sealed class PluginFileAttribute : System.Attribute {
     44    private string fileName;
    4445
    4546    /// <summary>
    46     /// Gets or sets the filename of the plugin.
     47    /// Gets the file name of the plugin.
    4748    /// </summary>
    48     public string Filename {
    49       get { return filename; }
    50       //set { filename = value; }
     49    public string FileName {
     50      get { return fileName; }
    5151    }
    5252
    53     private PluginFileType filetype = PluginFileType.Data;
     53    private PluginFileType fileType = PluginFileType.Data;
    5454
    5555    /// <summary>
    56     /// Gets or sets the filetype of the plugin file.
     56    /// Gets the file type of the plugin file.
    5757    /// </summary>
    58     public PluginFileType Filetype {
    59       get { return filetype; }
    60       //set { filetype = value; }
     58    public PluginFileType FileType {
     59      get { return fileType; }
    6160    }
    6261
    6362    /// <summary>
    6463    /// Initializes a new instance of <see cref="PluginFileAttribute"/>.
    65     /// <param name="filename">Name of the file</param>
    66     /// <param name="type">Type of the file (Assembly, Executable, Data, License)</param>
     64    /// <param name="fileName">Name of the file</param>
     65    /// <param name="fileType">Type of the file (Assembly, NativeDll, Data, License)</param>
    6766    /// </summary>
    68     public PluginFileAttribute(string filename, PluginFileType type) {
    69       this.filename = filename;
    70       this.filetype = type;
     67    public PluginFileAttribute(string fileName, PluginFileType fileType) {
     68      if (string.IsNullOrEmpty(fileName)) throw new ArgumentException("File name is empty.", "fileName");
     69      // NB: doesn't check if the file actually exists
     70      this.fileName = fileName;
     71      this.fileType = fileType;
    7172    }
    7273  }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs

    r2488 r2504  
    2727namespace HeuristicLab.PluginInfrastructure {
    2828  /// <summary>
    29   /// Default implementation for the IApplication interface.
     29  /// Abstract base implementation for the IApplication interface.
    3030  /// </summary>
    3131  public abstract class ApplicationBase : IApplication {
     
    3333    /// Initializes a new instance of <see cref="ApplicationBase"/>.
    3434    /// </summary>
    35     public ApplicationBase() { }
     35    protected ApplicationBase() { }
    3636
    3737    private ApplicationAttribute ApplicationAttribute {
     
    4040
    4141        // exactly one attribute of the type ClassInfoAttribute must be given
    42         if (appAttributes.Length != 1) {
     42        if (appAttributes.Length == 0) {
     43          throw new InvalidPluginException("ApplicationAttribute on type " + this.GetType() + " is missing.");
     44        } else if (appAttributes.Length > 1) {
    4345          throw new InvalidPluginException("Found multiple ApplicationAttributes on type " + this.GetType());
    4446        }
     
    5860
    5961    /// <summary>
    60     /// Gets the version of the application.
    61     /// </summary>
    62     public Version Version {
    63       get {
    64         return this.GetType().Assembly.GetName().Version;
    65       }
    66     }
    67 
    68     /// <summary>
    6962    /// Gets the description of the application.
    7063    /// </summary>
    7164    public string Description {
    7265      get {
    73         var appDescAttribute = ApplicationAttribute;
    74         // if the description is not explicitly set in the attribute then the name of the application is used as default
    75         if (string.IsNullOrEmpty(appDescAttribute.Description)) {
    76           return appDescAttribute.Name;
    77         } else {
    78           return appDescAttribute.Description;
    79         }
    80       }
    81     }
    82 
    83     /// <summary>
    84     /// Gets the boolean flag whether the application should by restarted after exceptions.
    85     /// </summary>
    86     public bool RestartOnErrors {
    87       get {
    88         return ApplicationAttribute.RestartOnErrors;
     66        return ApplicationAttribute.Description;
    8967      }
    9068    }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs

    r2503 r2504  
    2929namespace HeuristicLab.PluginInfrastructure {
    3030  /// <summary>
    31   /// Default implementation of the IPlugin interface.
     31  /// Abstract base implementation of the IPlugin interface.
    3232  /// </summary>
    3333  public abstract class PluginBase : IPlugin {
     
    3535    /// Initializes a new instance of <see cref="PluginBase"/>.
    3636    /// </summary>
    37     public PluginBase() { }
     37    protected PluginBase() { }
    3838
    3939    private PluginAttribute PluginAttribute {
     
    4141        object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(PluginAttribute), false);
    4242        // exactly one attribute of the type PluginDescriptionAttribute must be given
    43         if (pluginAttributes.Length != 1) {
     43        if (pluginAttributes.Length == 0) {
     44          throw new InvalidPluginException("PluginAttribute on type " + this.GetType() + " is missing.");
     45        } else if (pluginAttributes.Length > 1) {
    4446          throw new InvalidPluginException("Found multiple PluginAttributes on type " + this.GetType());
    4547        }
     
    5658    }
    5759
    58 
    59     /// <inheritdoc/>
    60     public IEnumerable<string> FileNames {
    61       get {
    62         // get all attributes of type PluginFileAttribute, multiple usage is possible
    63         return from x in this.GetType().GetCustomAttributes(typeof(PluginFileAttribute), false)
    64                let pluginFileAttr = (PluginFileAttribute)x
    65                select pluginFileAttr.Filename;
    66       }
    67     }
    68 
    6960    /// <inhertitdoc>
    7061    public virtual void OnLoad() { }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ControlManager.cs

    r2488 r2504  
    3030namespace HeuristicLab.PluginInfrastructure {
    3131
    32   public class ControlManager {
     32  public static class ControlManager {
    3333    // singleton: only one control manager allowed in each application (i.e. AppDomain)
    3434    private static IControlManager controlManager;
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj

    r2503 r2504  
    8686  </ItemGroup>
    8787  <ItemGroup>
    88     <Compile Include="ApplicationDescription.cs" />
    8988    <Compile Include="Attributes\ApplicationAttribute.cs" />
    9089    <Compile Include="Attributes\AssemblyBuildDateAttribute.cs" />
     
    9493    <Compile Include="BaseClasses\ApplicationBase.cs" />
    9594    <Compile Include="BaseClasses\PluginBase.cs" />
    96     <Compile Include="DefaultApplicationManager.cs" />
    9795    <Compile Include="Interfaces\IApplicationManager.cs" />
    9896    <Compile Include="Interfaces\IApplicationDescription.cs" />
    9997    <Compile Include="Interfaces\IApplication.cs" />
    100     <Compile Include="Interfaces\IControl.cs" />
    10198    <Compile Include="Interfaces\IControlManager.cs" />
    10299    <Compile Include="Interfaces\IPlugin.cs" />
     
    104101    <Compile Include="Interfaces\IPluginDescription.cs" />
    105102    <Compile Include="InvalidPluginException.cs" />
    106     <Compile Include="PluginDescription.cs" />
     103    <Compile Include="Manager\ApplicationDescription.cs" />
     104    <Compile Include="Manager\DefaultApplicationManager.cs" />
     105    <Compile Include="Manager\PluginDescription.cs" />
     106    <Compile Include="Manager\PluginInfrastructureEventArgs.cs" />
     107    <Compile Include="Manager\PluginManager.cs" />
     108    <Compile Include="Manager\PluginValidator.cs" />
    107109    <Compile Include="PluginDescriptionIterator.cs" />
    108110    <Compile Include="ApplicationManager.cs" />
    109     <Compile Include="PluginInfrastructureEventArgs.cs" />
    110     <Compile Include="PluginManager.cs" />
    111111    <Compile Include="PluginState.cs" />
    112     <Compile Include="PluginValidator.cs" />
    113112    <Compile Include="Properties\AssemblyInfo.cs" />
    114113    <EmbeddedResource Include="Properties\Resources.resx">
     
    116115      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    117116      <SubType>Designer</SubType>
     117    </EmbeddedResource>
     118    <EmbeddedResource Include="Starter\MainForm.resx">
     119      <DependentUpon>MainForm.cs</DependentUpon>
     120    </EmbeddedResource>
     121    <EmbeddedResource Include="Starter\SplashScreen.resx">
     122      <DependentUpon>SplashScreen.cs</DependentUpon>
    118123    </EmbeddedResource>
    119124    <Compile Include="Properties\Resources.Designer.cs">
     
    134139      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    135140    </Compile>
     141    <Compile Include="Starter\MainForm.cs">
     142      <SubType>Form</SubType>
     143    </Compile>
     144    <Compile Include="Starter\MainForm.Designer.cs">
     145      <DependentUpon>MainForm.cs</DependentUpon>
     146    </Compile>
     147    <Compile Include="Starter\SplashScreen.cs">
     148      <SubType>Form</SubType>
     149    </Compile>
     150    <Compile Include="Starter\SplashScreen.Designer.cs">
     151      <DependentUpon>SplashScreen.cs</DependentUpon>
     152    </Compile>
    136153  </ItemGroup>
    137154  <ItemGroup>
    138     <Folder Include="Manager\" />
     155    <Content Include="Resources\Details.gif" />
     156    <Content Include="Resources\HeuristicLab.ico" />
     157    <Content Include="Resources\LargeIcons.gif" />
     158    <Content Include="Resources\List.gif" />
     159    <Content Include="Resources\Logo_white.gif" />
    139160  </ItemGroup>
    140161  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs

    r2481 r2504  
    2727  public interface IApplication {
    2828    string Name { get; }
    29     Version Version { get; }
    3029    string Description { get; }
    31     bool RestartOnErrors { get; }
    3230    void Run();
    3331  }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationDescription.cs

    r2488 r2504  
    2424
    2525namespace HeuristicLab.PluginInfrastructure {
     26  /// <summary>
     27  /// Represents meta-data of an application.
     28  /// </summary>
    2629  public interface IApplicationDescription {
     30    /// <summary>
     31    /// Gets the name of the application.
     32    /// </summary>
    2733    string Name { get; }
    28     Version Version { get; }
    29     string DeclaringAssemblyName { get; }
    30     string DeclaringTypeName { get; }
     34    /// <summary>
     35    /// Gets the description of the application.
     36    /// </summary>
     37    string Description { get; }
    3138  }
    3239}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationManager.cs

    r2489 r2504  
    3131  /// </summary>
    3232  public interface IApplicationManager {
     33    /// <summary>
     34    /// Gets all discovered plugins.
     35    /// </summary>
    3336    IEnumerable<IPluginDescription> Plugins { get; }
     37    /// <summary>
     38    /// Gets all discovered applications.
     39    /// </summary>
    3440    IEnumerable<IApplicationDescription> Applications { get; }
    3541
     42    /// <summary>
     43    /// Dynamically loads assemblies given in binary form.
     44    /// </summary>
     45    /// <param name="assemblies">Assemblies that should be loaded in binary form.</param>
    3646    void LoadAssemblies(IEnumerable<byte[]> assemblies);
    3747
     48    /// <summary>
     49    /// Discovers and creates instances of <typeparamref name="T"/> and all types implementing or inheriting <typeparamref name="T"/> (directly and indirectly) declared in any assembly of <paramref name="plugin"/>.
     50    /// </summary>
     51    /// <typeparam name="T">The type or super-type to discover.</typeparam>
     52    /// <param name="plugin">The declaring plugin.</param>
     53    /// <returns>An enumerable of instances of the discovered types.</returns>
    3854    IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class;
     55    /// <summary>
     56    /// Discovers and creates instances of <typeparamref name="T"/> and all types implementing or inheriting <typeparamref name="T"/> (directly and indirectly).
     57    /// </summary>
     58    /// <typeparam name="T">The type or super-type to discover.</typeparam>
     59    /// <returns>An enumerable of instances of the discovered types.</returns>
    3960    IEnumerable<T> GetInstances<T>() where T : class;
    4061
     62    /// <summary>
     63    /// Discovers all types implementing or inheriting <paramref name="type"/> (directly and indirectly).
     64    /// </summary>
     65    /// <param name="type">The type to discover.</param>
     66    /// <returns>An enumerable of discovered types.</returns>
    4167    IEnumerable<Type> GetTypes(Type type);
    42     IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription);
     68    /// <summary>
     69    /// Discovers all types implementing or inheriting <paramref name="type"/> (directly and indirectly) that are declaed in any assembly of <paramref name="plugin"/>.
     70    /// </summary>
     71    /// <param name="type">The type to discover.</param>
     72    /// <param name="plugin">The declaring plugin.</param>
     73    /// <returns>An enumerable of discovered types.</returns>
     74    IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin);
    4375  }
    4476}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs

    r1189 r2504  
    3434    /// </summary>
    3535    /// <param name="control">The control to display.</param>
    36     void ShowControl(IControl control);
     36    void ShowControl(object control);
    3737  }
    3838}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs

    r2503 r2504  
    2828  /// Represents a plugin.
    2929  /// Plugin developers have to include exactly one class that implements this interface in one of the
    30   /// assemblies of the plugin. Plugin developers can use the properties of this interface to store
    31   /// plugin data (name, version, files, update location ...).
    32   /// The method OnLoad() is called by the framework when the plugin is loaded (application start).
     30  /// assemblies of the plugin.
     31  /// OnLoad() and OnUnLoad() are called by the framework when the plugin is loaded/unloaded.
    3332  /// </summary>
    3433  public interface IPlugin {
     
    3736    /// </summary>
    3837    string Name { get; }
    39     ///// <summary>
    40     ///// Gets the version of the plugin.
    41     ///// </summary>
    42     //Version Version { get; }
    43     /// <summary>
    44     /// Gets all file names that are bundled with this plugin including all assembly files (*.dll)
    45     /// </summary>
    46     IEnumerable<string> FileNames { get; }
    4738
    4839    /// <summary>
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs

    r2488 r2504  
    2424
    2525namespace HeuristicLab.PluginInfrastructure {
     26  /// <summary>
     27  /// Represents meta-data of a plugin.
     28  /// </summary>
    2629  public interface IPluginDescription {
     30    /// <summary>
     31    /// Gets the name of the plugin.
     32    /// </summary>
    2733    string Name { get; }
    28     Version Version { get; }
    29     DateTime BuildDate { get; }
    30     PluginState PluginState { get; }
    31     IEnumerable<string> Files { get; }
    32     IEnumerable<IPluginDescription> Dependencies { get; }
    33     IEnumerable<string> Assemblies { get; }
    34     void Enable();
    35     void Disable();
    36     void Load();
    37     void Unload();
    3834  }
    3935}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs

    r2481 r2504  
    2323using System.Collections.Generic;
    2424using System.Text;
     25using System.Runtime.Serialization;
    2526
    2627namespace HeuristicLab.PluginInfrastructure {
     
    2829  /// Exception class for invalid plugins.
    2930  /// </summary>
    30   public class InvalidPluginException : Exception {
     31  [Serializable]
     32  public sealed class InvalidPluginException : Exception {
     33    public InvalidPluginException() : base() { }
    3134    public InvalidPluginException(string message) : base(message) { }
     35    public InvalidPluginException(string message, Exception exception) : base(message, exception) { }
     36    private InvalidPluginException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
    3237  }
    3338}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs

    r2503 r2504  
    2929  /// </summary>
    3030  [Serializable]
    31   public class ApplicationDescription : IApplicationDescription {
     31  internal sealed class ApplicationDescription : IApplicationDescription {
    3232    private string name;
    3333
     
    4444    /// Gets or sets the version of the application.
    4545    /// </summary>
    46     public Version Version {
     46    internal Version Version {
    4747      get { return version; }
    4848      set { version = value; }
     
    6262    /// Gets or sets the boolean flag if the application should be automatically restarted.
    6363    /// </summary>
    64     public bool AutoRestart {
     64    internal bool AutoRestart {
    6565      get { return autoRestart; }
    6666      set { autoRestart = value; }
     
    7171    /// Gets or sets the name of the assembly that contains the IApplication type.
    7272    /// </summary>
    73     public string DeclaringAssemblyName {
     73    internal string DeclaringAssemblyName {
    7474      get { return declaringAssemblyName; }
    7575      set { declaringAssemblyName = value; }
     
    8080    /// Gets or sets the name of the type that implements the interface IApplication.
    8181    /// </summary>
    82     public string DeclaringTypeName {
     82    internal string DeclaringTypeName {
    8383      get { return declaringTypeName; }
    8484      set { declaringTypeName = value; }
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs

    r2503 r2504  
    3232namespace HeuristicLab.PluginInfrastructure.Manager {
    3333
    34   public sealed class DefaultApplicationManager : MarshalByRefObject, IApplicationManager {
     34  internal sealed class DefaultApplicationManager : MarshalByRefObject, IApplicationManager {
    3535    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
    3636    internal event EventHandler<PluginInfrastructureEventArgs> PluginUnloaded;
     
    4242    private List<IPlugin> loadedPlugins;
    4343
    44     private List<IPluginDescription> plugins;
     44    private List<PluginDescription> plugins;
    4545    /// <summary>
    4646    /// Gets all plugins.
    4747    /// </summary>
    4848    public IEnumerable<IPluginDescription> Plugins {
    49       get { return plugins; }
    50       internal set { plugins = new List<IPluginDescription>(value); }
    51     }
    52 
    53     private List<IApplicationDescription> applications;
     49      get { return plugins.Cast<IPluginDescription>(); }
     50    }
     51
     52    private List<ApplicationDescription> applications;
    5453    /// <summary>
    5554    /// Gets all installed applications.
    5655    /// </summary>
    5756    public IEnumerable<IApplicationDescription> Applications {
    58       get { return applications; }
     57      get { return applications.Cast<IApplicationDescription>(); }
    5958    }
    6059
     
    7271    }
    7372
    74     internal void PrepareApplicationDomain(IEnumerable<IApplicationDescription> apps, IEnumerable<IPluginDescription> plugins) {
    75       this.plugins = new List<IPluginDescription>(plugins);
    76       this.applications = new List<IApplicationDescription>(apps);
     73    internal void PrepareApplicationDomain(IEnumerable<ApplicationDescription> apps, IEnumerable<PluginDescription> plugins) {
     74      this.plugins = new List<PluginDescription>(plugins);
     75      this.applications = new List<ApplicationDescription>(apps);
    7776      PluginInfrastructure.ApplicationManager.RegisterApplicationManager(this);
    7877      LoadPlugins(plugins);
    7978    }
    8079
    81     private void LoadPlugins(IEnumerable<IPluginDescription> plugins) {
     80    private void LoadPlugins(IEnumerable<PluginDescription> plugins) {
    8281      // load all loadable plugins (all dependencies available) into the execution context
    8382      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
     
    9695    }
    9796
    98     internal void Run(IApplicationDescription appInfo) {
     97    internal void Run(ApplicationDescription appInfo) {
    9998      IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.DeclaringAssemblyName, appInfo.DeclaringTypeName).Unwrap();
    10099      try {
    101100        runnablePlugin.Run();
    102       }
    103       catch (Exception e) {
    104         throw new Exception(String.Format(
    105           "Unexpected exception caught: \"{0}\"\r\n" +
    106           "Type: {1}\r\n" +
    107           "Plugin {2}:\r\n{3}",
    108           e.Message,
    109           e.GetType().FullName,
    110           appInfo.Name,
    111           e.ToString()));
    112101      }
    113102      finally {
     
    156145    /// <param name="asm">Declaring assembly.</param>
    157146    /// <returns>Enumerable of the created instances.</returns>
    158     public IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
     147    private static IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
    159148      return from t in GetTypes(typeof(T), asm)
    160149             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
     
    201190    /// <returns>Enumerable of the discovered types.</returns>
    202191    public IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription) {
     192      PluginDescription pluginDesc = (PluginDescription)pluginDescription;
    203193      return from asm in AppDomain.CurrentDomain.GetAssemblies()
    204              where pluginDescription.Assemblies.Any(asmPath => Path.GetFullPath(asmPath) == Path.GetFullPath(asm.Location))
     194             where pluginDesc.Assemblies.Any(asmPath => Path.GetFullPath(asmPath) == Path.GetFullPath(asm.Location))
    205195             from t in GetTypes(type, asm)
    206196             select t;
     
    213203    /// <param name="assembly">Assembly that should be searched for types.</param>
    214204    /// <returns>Enumerable of the discovered types.</returns>
    215     private IEnumerable<Type> GetTypes(Type type, Assembly assembly) {
     205    private static IEnumerable<Type> GetTypes(Type type, Assembly assembly) {
    216206      return from t in assembly.GetTypes()
    217207             where type.IsAssignableFrom(t)
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs

    r2503 r2504  
    3030  /// </summary>
    3131  [Serializable]
    32   public class PluginDescription : IPluginDescription {
     32  internal sealed class PluginDescription : IPluginDescription {
     33    private int nTimesLoaded;
     34
    3335    private string name;
    3436    /// <summary>
     
    3739    public string Name {
    3840      get { return name; }
    39       set { name = value; }
     41      internal set { name = value; }
    4042    }
    4143    private Version version;
     
    4345    /// Gets or sets the version of the plugin.
    4446    /// </summary>
    45     public Version Version {
     47    internal Version Version {
    4648      get { return version; }
    4749      set { version = value; }
     
    5153    /// Gets or sets the build date of the plugin.
    5254    /// </summary>
    53     public DateTime BuildDate {
     55    internal DateTime BuildDate {
    5456      get { return buildDate; }
    5557      set { buildDate = value; }
     
    6466    }
    6567
    66     private int nTimesLoaded;
    67     public void Disable() {
    68       if (pluginState != PluginState.Undefined)
    69         throw new InvalidOperationException("Can't disabled a plugin in state " + pluginState);
    70       pluginState = PluginState.Disabled;
    71     }
    72 
    73     public void Enable() {
    74       if (pluginState != PluginState.Undefined)
    75         throw new InvalidOperationException("Can't enabled a plugin in state " + pluginState);
    76       pluginState = PluginState.Enabled;
    77     }
    78 
    79     public void Load() {
    80       if (!(pluginState == PluginState.Enabled || pluginState == PluginState.Loaded))
    81         throw new InvalidOperationException("Can't loaded a plugin in state " + pluginState);
    82       pluginState = PluginState.Loaded;
    83       nTimesLoaded++;
    84     }
    85 
    86     public void Unload() {
    87       if (pluginState != PluginState.Loaded)
    88         throw new InvalidOperationException("Can't unload a plugin in state " + pluginState);
    89       nTimesLoaded--;
    90       if (nTimesLoaded == 0) pluginState = PluginState.Enabled;
    91     }
    9268
    9369    private List<string> files = new List<string>();
     
    9672    /// These files are deleted when the plugin is removed or updated.
    9773    /// </summary>
    98     public IEnumerable<string> Files {
     74    internal IEnumerable<string> Files {
    9975      get { return files; }
    10076    }
     
    10480    }
    10581
    106     private List<IPluginDescription> dependencies = new List<IPluginDescription>();
     82    private List<PluginDescription> dependencies = new List<PluginDescription>();
    10783    /// <summary>
    10884    /// Gets all dependencies of the plugin.
    10985    /// </summary>
    110     public IEnumerable<IPluginDescription> Dependencies {
     86    internal IEnumerable<PluginDescription> Dependencies {
    11187      get { return dependencies; }
    11288    }
    11389
    114     public void AddDependency(PluginDescription dependency) {
     90    internal void AddDependency(PluginDescription dependency) {
    11591      dependencies.Add(dependency);
    11692    }
     
    12197    /// Gets the names of the assemblies that belong to this plugin.
    12298    /// </summary>
    123     public IEnumerable<string> Assemblies {
     99    internal IEnumerable<string> Assemblies {
    124100      get { return assemblies; }
    125101      // set { assemblies = value; }
     
    130106    }
    131107
    132     public PluginDescription() {
    133       nTimesLoaded = 0;
     108    internal PluginDescription() {
    134109      pluginState = PluginState.Undefined;
    135110    }
     111
     112    internal void Disable() {
     113      if (pluginState != PluginState.Undefined)
     114        throw new InvalidOperationException("Can't disabled a plugin in state " + pluginState);
     115      pluginState = PluginState.Disabled;
     116    }
     117
     118    internal void Enable() {
     119      if (pluginState != PluginState.Undefined)
     120        throw new InvalidOperationException("Can't enabled a plugin in state " + pluginState);
     121      pluginState = PluginState.Enabled;
     122    }
     123
     124    internal void Load() {
     125      if (!(pluginState == PluginState.Enabled || pluginState == PluginState.Loaded))
     126        throw new InvalidOperationException("Can't loaded a plugin in state " + pluginState);
     127      pluginState = PluginState.Loaded;
     128      nTimesLoaded++;
     129    }
     130
     131    internal void Unload() {
     132      if (pluginState != PluginState.Loaded)
     133        throw new InvalidOperationException("Can't unload a plugin in state " + pluginState);
     134      nTimesLoaded--;
     135      if (nTimesLoaded == 0) pluginState = PluginState.Enabled;
     136    }
     137
    136138
    137139    /// <summary>
     
    151153    /// <returns><c>true</c> if it is equal, <c>false</c> otherwise.</returns>
    152154    public override bool Equals(object obj) {
    153       if (!(obj is PluginDescription))
    154         return false;
    155       PluginDescription other = (PluginDescription)obj;
     155      PluginDescription other = obj as PluginDescription;
     156      if (other == null) return false;
    156157
    157158      return other.Name == this.Name && other.Version == this.Version;
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs

    r2503 r2504  
    2727  // to be replaced by GenericEventArgs
    2828  [Serializable]
    29   public class PluginInfrastructureEventArgs : EventArgs {
    30     public string Action { get; private set; }
    31     public object Entity { get; private set; }
    32     public PluginInfrastructureEventArgs(string action, object entity) {
     29  internal sealed class PluginInfrastructureEventArgs : EventArgs {
     30    internal string Action { get; private set; }
     31    internal object Entity { get; private set; }
     32    internal PluginInfrastructureEventArgs(string action, object entity) {
    3333      this.Action = action;
    3434      this.Entity = entity;
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginManager.cs

    r2503 r2504  
    3535  /// Class to manage different plugins.
    3636  /// </summary>
    37   public sealed class PluginManager : MarshalByRefObject {
     37  internal sealed class PluginManager : MarshalByRefObject {
    3838    /// <summary>
    3939    /// Event handler for actions in the plugin manager.
    4040    /// </summary>
    41     public event EventHandler<PluginInfrastructureEventArgs> Action;
     41    internal event EventHandler<PluginInfrastructureEventArgs> Action;
    4242
    4343    private string pluginDir;
     
    4949    /// Gets all installed applications.
    5050    /// </summary>
    51     public IEnumerable<ApplicationDescription> Applications {
     51    internal IEnumerable<ApplicationDescription> Applications {
    5252      get { return applications; }
    5353    }
     
    5656    private bool initialized;
    5757
    58     public PluginManager(string pluginDir) {
     58    internal PluginManager(string pluginDir) {
    5959      this.pluginDir = pluginDir;
    6060      plugins = new List<PluginDescription>();
     
    6363    }
    6464
    65     public void Reset() {
     65    internal void Reset() {
    6666      initialized = false;
    6767      if (plugins != null && plugins.Any(x => x.PluginState == PluginState.Loaded)) throw new InvalidOperationException("Reset() is not allowed while applications are active.");
     
    7373    /// Determines installed plugins and checks if all plugins are loadable.
    7474    /// </summary>
    75     public void DiscoverAndCheckPlugins() {
     75    internal void DiscoverAndCheckPlugins() {
    7676      OnAction(new PluginInfrastructureEventArgs("Initializing", "PluginInfrastructure"));
    7777      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
     
    8080      try {
    8181        pluginDomain = AppDomain.CreateDomain("plugin domain", null, setup);
    82         PluginValidator remoteValidator = (PluginValidator)pluginDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfraStructure.Manager", "HeuristicLab.PluginInfrastructure.Manager.Loader");
     82        Type pluginValidatorType = typeof(PluginValidator);
     83        PluginValidator remoteValidator = (PluginValidator)pluginDomain.CreateInstanceAndUnwrap(pluginValidatorType.Assembly.FullName, pluginValidatorType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null, null);
    8384        remoteValidator.PluginDir = pluginDir;
    8485        // forward all events from the remoteValidator to listeners
     
    109110    /// </summary>
    110111    /// <param name="appInfo">application to run</param>
    111     public void Run(ApplicationDescription appInfo) {
     112    internal void Run(ApplicationDescription appInfo) {
    112113      if (!initialized) throw new InvalidOperationException("PluginManager is not initialized. DiscoverAndCheckPlugins() must be called before Run()");
    113114      // create a separate AppDomain for the application
     
    121122        setup.PrivateBinPath = pluginDir;
    122123        applicationDomain = AppDomain.CreateDomain(appInfo.Name, null, setup);
     124        Type applicationManagerType = typeof(DefaultApplicationManager);
    123125        DefaultApplicationManager applicationManager =
    124           (DefaultApplicationManager)applicationDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfraStructure.Manager", "HeuristicLab.PluginInfrastructure.Manager.DefaultApplicationManager");
     126          (DefaultApplicationManager)applicationDomain.CreateInstanceAndUnwrap(applicationManagerType.Assembly.FullName, applicationManagerType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null, null);
    125127        applicationManager.PluginLoaded += applicationManager_PluginLoaded;
    126128        applicationManager.PluginUnloaded += applicationManager_PluginUnloaded;
    127         applicationManager.PrepareApplicationDomain(
    128           new List<IApplicationDescription>(applications.Cast<IApplicationDescription>()),
    129           new List<IPluginDescription>(plugins.Cast<IPluginDescription>()));
     129        applicationManager.PrepareApplicationDomain(applications, plugins);
    130130        OnAction(new PluginInfrastructureEventArgs("Started application", appInfo));
    131131        applicationManager.Run(appInfo);
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs

    r2503 r2504  
    5757    }
    5858
    59     public string PluginDir { get; set; }
    60 
    61     public PluginValidator() {
     59    internal string PluginDir { get; set; }
     60
     61    internal PluginValidator() {
    6262      this.pluginDependencies = new Dictionary<PluginDescription, List<string>>();
    6363
     
    114114
    115115      foreach (IApplication application in GetApplications()) {
     116        Type appType = application.GetType();
     117        ApplicationAttribute attr = (from x in appType.GetCustomAttributes(typeof(ApplicationAttribute), false)
     118                                     select (ApplicationAttribute)x).Single();
    116119        ApplicationDescription info = new ApplicationDescription();
    117120        info.Name = application.Name;
    118         info.Version = application.Version;
     121        info.Version = appType.Assembly.GetName().Version;
    119122        info.Description = application.Description;
    120         info.AutoRestart = application.RestartOnErrors;
    121         info.DeclaringAssemblyName = application.GetType().Assembly.GetName().Name;
    122         info.DeclaringTypeName = application.GetType().Namespace + "." + application.GetType().Name;
     123        info.AutoRestart = attr.RestartOnErrors;
     124        info.DeclaringAssemblyName = appType.Assembly.GetName().Name;
     125        info.DeclaringTypeName = appType.Namespace + "." + application.GetType().Name;
    123126
    124127        applications.Add(info);
     
    126129    }
    127130
    128     private IEnumerable<IApplication> GetApplications() {
     131    private static IEnumerable<IApplication> GetApplications() {
    129132      return from asm in AppDomain.CurrentDomain.GetAssemblies()
    130133             from t in asm.GetTypes()
     
    206209      }
    207210
     211      var buildDates = from attr in CustomAttributeData.GetCustomAttributes(pluginType.Assembly)
     212                       where IsAttributeDataForType(attr, typeof(AssemblyBuildDateAttribute))
     213                       select (string)attr.ConstructorArguments[0].Value;
     214
    208215      // minimal sanity check of the attribute values
    209216      if (!string.IsNullOrEmpty(pluginName) &&
    210217          pluginFiles.Count > 0 &&
    211           pluginAssemblies.Count > 0) {
     218          pluginAssemblies.Count > 0 &&
     219          buildDates.Count() == 1) {
    212220        // create a temporary PluginDescription that contains the attribute values
    213221        PluginDescription info = new PluginDescription();
    214222        info.Name = pluginName;
    215223        info.Version = pluginType.Assembly.GetName().Version;
     224        info.BuildDate = DateTime.Parse(buildDates.Single(), System.Globalization.CultureInfo.InvariantCulture);
    216225        info.AddAssemblies(pluginAssemblies);
    217226        info.AddFiles(pluginFiles);
     
    224233    }
    225234
    226     private bool IsAttributeDataForType(CustomAttributeData attributeData, Type attributeType) {
     235    private static bool IsAttributeDataForType(CustomAttributeData attributeData, Type attributeType) {
    227236      return attributeData.Constructor.DeclaringType.AssemblyQualifiedName == attributeType.AssemblyQualifiedName;
    228237    }
     
    266275      // load all loadable plugins (all dependencies available) into the execution context
    267276      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(pluginDescriptions
    268                                                                                 .Cast<IPluginDescription>()
    269277                                                                                .Where(x => x.PluginState != PluginState.Disabled))) {
    270278        List<Type> types = new List<Type>();
     
    290298
    291299    // checks if all declared plugin files are actually available and disables plugins with missing files
    292     private void CheckPluginFiles(IEnumerable<PluginDescription> pluginDescriptions) {
     300    private static void CheckPluginFiles(IEnumerable<PluginDescription> pluginDescriptions) {
    293301      foreach (PluginDescription desc in pluginDescriptions) {
    294302        if (!CheckPluginFiles(desc)) {
     
    298306    }
    299307
    300     private bool CheckPluginFiles(PluginDescription PluginDescription) {
    301       foreach (string filename in PluginDescription.Files) {
     308    private static bool CheckPluginFiles(PluginDescription pluginDescription) {
     309      foreach (string filename in pluginDescription.Files) {
    302310        if (!File.Exists(filename)) {
    303311          return false;
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs

    r2488 r2504  
    2424using System.Text;
    2525
    26 namespace HeuristicLab.PluginInfrastructure {
    27   public static class PluginDescriptionIterator {
    28     public static IEnumerable<IPluginDescription> IterateInDependencyOrder(IEnumerable<IPluginDescription> pluginDescriptions) {
     26namespace HeuristicLab.PluginInfrastructure.Manager {
     27  internal static class PluginDescriptionIterator {
     28    internal static IEnumerable<PluginDescription> IterateInDependencyOrder(IEnumerable<PluginDescription> pluginDescriptions) {
    2929      // list to make sure we yield each description only once
    30       List<IPluginDescription> yieldedDescriptions = new List<IPluginDescription>();
     30      List<PluginDescription> yieldedDescriptions = new List<PluginDescription>();
    3131      foreach (var desc in pluginDescriptions) {
    3232        foreach (var dependency in IterateInDependencyOrder(desc.Dependencies)) {
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame

    r886 r2504  
    2525using HeuristicLab.PluginInfrastructure;
    2626using System.Security;
     27using System;
    2728
    2829// General Information about an assembly is controlled through the following
     
    3738[assembly: AssemblyTrademark("")]
    3839[assembly: AssemblyCulture("")]
    39 [assembly: AllowPartiallyTrustedCallers]
     40[assembly: System.Resources.NeutralResourcesLanguage("en")]
     41[assembly: CLSCompliant(true)]
    4042
    4143// Setting ComVisible to false makes the types in this assembly not visible
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs

    r2 r2504  
    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 
    22 //------------------------------------------------------------------------------
     1//------------------------------------------------------------------------------
    232// <auto-generated>
    243//     This code was generated by a tool.
    25 //     Runtime Version:2.0.50727.1433
     4//     Runtime Version:2.0.50727.4200
    265//
    276//     Changes to this file may cause incorrect behavior and will be lost if
     
    8160            }
    8261        }
     62       
     63        internal static System.Drawing.Bitmap Details {
     64            get {
     65                object obj = ResourceManager.GetObject("Details", resourceCulture);
     66                return ((System.Drawing.Bitmap)(obj));
     67            }
     68        }
     69       
     70        internal static System.Drawing.Icon HeuristicLab {
     71            get {
     72                object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
     73                return ((System.Drawing.Icon)(obj));
     74            }
     75        }
     76       
     77        internal static System.Drawing.Bitmap LargeIcons {
     78            get {
     79                object obj = ResourceManager.GetObject("LargeIcons", resourceCulture);
     80                return ((System.Drawing.Bitmap)(obj));
     81            }
     82        }
     83       
     84        internal static System.Drawing.Bitmap List {
     85            get {
     86                object obj = ResourceManager.GetObject("List", resourceCulture);
     87                return ((System.Drawing.Bitmap)(obj));
     88            }
     89        }
     90       
     91        internal static System.Drawing.Bitmap Logo_white {
     92            get {
     93                object obj = ResourceManager.GetObject("Logo_white", resourceCulture);
     94                return ((System.Drawing.Bitmap)(obj));
     95            }
     96        }
    8397    }
    8498}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.resx

    r2 r2504  
    118118    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    119119  </resheader>
     120  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     121  <data name="Details" type="System.Resources.ResXFileRef, System.Windows.Forms">
     122    <value>..\Resources\Details.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     123  </data>
     124  <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
     125    <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     126  </data>
     127  <data name="LargeIcons" type="System.Resources.ResXFileRef, System.Windows.Forms">
     128    <value>..\Resources\LargeIcons.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     129  </data>
     130  <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
     131    <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     132  </data>
     133  <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
     134    <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     135  </data>
    120136</root>
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs

    r854 r2504  
    22// <auto-generated>
    33//     This code was generated by a tool.
    4 //     Runtime Version:2.0.50727.3053
     4//     Runtime Version:2.0.50727.4200
    55//
    66//     Changes to this file may cause incorrect behavior and will be lost if
     
    3232            }
    3333        }
     34       
     35        [global::System.Configuration.ApplicationScopedSettingAttribute()]
     36        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     37        [global::System.Configuration.DefaultSettingValueAttribute("")]
     38        public string User {
     39            get {
     40                return ((string)(this["User"]));
     41            }
     42        }
     43       
     44        [global::System.Configuration.ApplicationScopedSettingAttribute()]
     45        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     46        [global::System.Configuration.DefaultSettingValueAttribute("")]
     47        public string Organization {
     48            get {
     49                return ((string)(this["Organization"]));
     50            }
     51        }
    3452    }
    3553}
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.settings

    r854 r2504  
    66      <Value Profile="(Default)">plugins</Value>
    77    </Setting>
     8    <Setting Name="User" Type="System.String" Scope="Application">
     9      <Value Profile="(Default)" />
     10    </Setting>
     11    <Setting Name="Organization" Type="System.String" Scope="Application">
     12      <Value Profile="(Default)" />
     13    </Setting>
    814  </Settings>
    915</SettingsFile>
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.Designer.cs

    r2485 r2504  
    2020#endregion
    2121
    22 namespace HeuristicLab {
     22namespace HeuristicLab.PluginInfrastructure {
    2323  partial class MainForm {
    2424    /// <summary>
     
    3232    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    3333    protected override void Dispose(bool disposing) {
    34       if(disposing && (components != null)) {
     34      if (disposing && (components != null)) {
    3535        components.Dispose();
    3636      }
     
    131131      this.detailsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
    132132      this.detailsButton.AutoSize = true;
    133       this.detailsButton.Image = global::HeuristicLab.Properties.Resources.Details;
     133      this.detailsButton.Image = HeuristicLab.PluginInfrastructure.Properties.Resources.Details;
    134134      this.detailsButton.Location = new System.Drawing.Point(68, 511);
    135135      this.detailsButton.Name = "detailsButton";
     
    144144      this.listButton.AutoSize = true;
    145145      this.listButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    146       this.listButton.Image = global::HeuristicLab.Properties.Resources.List;
     146      this.listButton.Image = HeuristicLab.PluginInfrastructure.Properties.Resources.List;
    147147      this.listButton.Location = new System.Drawing.Point(40, 511);
    148148      this.listButton.Name = "listButton";
     
    157157      this.largeIconsButton.AutoSize = true;
    158158      this.largeIconsButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    159       this.largeIconsButton.Image = global::HeuristicLab.Properties.Resources.LargeIcons;
     159      this.largeIconsButton.Image = HeuristicLab.PluginInfrastructure.Properties.Resources.LargeIcons;
    160160      this.largeIconsButton.Location = new System.Drawing.Point(12, 511);
    161161      this.largeIconsButton.Name = "largeIconsButton";
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.cs

    r2497 r2504  
    3333using System.IO;
    3434
    35 namespace HeuristicLab {
     35namespace HeuristicLab.PluginInfrastructure {
    3636  public partial class MainForm : Form {
    3737
     
    4444      InitializeComponent();
    4545
    46       abortRequested = false;
    4746      string pluginPath = Path.GetFullPath(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir);
    4847      pluginManager = new PluginManager(pluginPath);
     
    142141    }
    143142
    144     public void ShowErrorMessageBox(Exception ex) {
    145       MessageBox.Show(BuildErrorMessage(ex),
    146                       "Error - " + ex.GetType().Name,
    147                       MessageBoxButtons.OK,
    148                       MessageBoxIcon.Error);
     143    private void ShowErrorMessageBox(Exception ex) {
     144      MessageBoxOptions options = RightToLeft == RightToLeft.Yes ? MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading : MessageBoxOptions.DefaultDesktopOnly;
     145      MessageBox.Show(this,
     146         BuildErrorMessage(ex),
     147         "Error - " + ex.GetType().Name,
     148         MessageBoxButtons.OK,
     149         MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, options);
    149150    }
    150     private string BuildErrorMessage(Exception ex) {
     151    private static string BuildErrorMessage(Exception ex) {
    151152      StringBuilder sb = new StringBuilder();
    152153      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.Designer.cs

    r2485 r2504  
    2121
    2222using HeuristicLab.PluginInfrastructure;
    23 namespace HeuristicLab {
     23namespace HeuristicLab.PluginInfrastructure {
    2424  partial class SplashScreen {
    2525    /// <summary>
     
    3939      base.Dispose(disposing);
    4040    }
    41    
     41
    4242
    4343    #region Windows Form Designer generated code
     
    191191      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    192192                  | System.Windows.Forms.AnchorStyles.Left)));
    193       this.pictureBox.Image = global::HeuristicLab.Properties.Resources.Logo_white;
     193      this.pictureBox.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.Logo_white;
    194194      this.pictureBox.Location = new System.Drawing.Point(-1, -1);
    195195      this.pictureBox.Name = "pictureBox";
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.cs

    r2497 r2504  
    2929using HeuristicLab.PluginInfrastructure.Manager;
    3030
    31 namespace HeuristicLab {
    32   public partial class SplashScreen : Form {
     31namespace HeuristicLab.PluginInfrastructure {
     32  internal partial class SplashScreen : Form {
    3333    private const int FADE_INTERVAL = 50;
    3434    private System.Timers.Timer fadeTimer;
    3535    private int initialInterval;
    3636    private object bigLock = new object();
    37     private bool closing = false;
     37    private bool closing;
    3838    private PluginManager manager;
    3939
    40     public SplashScreen() {
     40    internal SplashScreen() {
    4141      InitializeComponent();
    4242    }
    4343
    44     public SplashScreen(PluginManager manager, int initialInterval, string initialText)
     44    internal SplashScreen(PluginManager manager, int initialInterval, string initialText)
    4545      : this() {
    4646      this.initialInterval = initialInterval;
     
    5757
    5858      foreach (object obj in attributes) {
    59         if (obj is AssemblyCopyrightAttribute) {
    60           copyrightLabel.Text = "Copyright " + ((AssemblyCopyrightAttribute)obj).Copyright;
     59        var attr = obj as AssemblyCopyrightAttribute;
     60        if (attr != null) {
     61          copyrightLabel.Text = "Copyright " + attr.Copyright;
    6162        }
    6263      }
    6364
    64       try {
    65         user = HeuristicLab.Properties.Settings.Default.User;
    66         company = HeuristicLab.Properties.Settings.Default.Organization;
     65      user = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.User;
     66      company = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.Organization;
    6767
    68         if ((user == null) || (user.Equals(""))) {
    69           userNameLabel.Text = "-";
    70         } else {
    71           userNameLabel.Text = user;
    72         }
     68      if (string.IsNullOrEmpty(user)) {
     69        userNameLabel.Text = "-";
     70      } else {
     71        userNameLabel.Text = user;
     72      }
    7373
    74         if ((company == null) || (company.Equals(""))) {
    75           companyLabel.Text = "-";
    76         } else {
    77           companyLabel.Text = company;
    78         }
    79       }
    80       catch (Exception) {
    81         userNameLabel.Text = "-";
     74      if (string.IsNullOrEmpty(company)) {
    8275        companyLabel.Text = "-";
     76      } else {
     77        companyLabel.Text = company;
    8378      }
    8479    }
     
    8883    }
    8984
    90     public void managerActionEventHandler(object sender, PluginInfrastructureEventArgs e) {
     85    private void managerActionEventHandler(object sender, PluginInfrastructureEventArgs e) {
    9186      string info = e.Action + ": " + e.Entity;
    9287      //if (e.Action == PluginManagerAction.Initializing) info = "Initializing ...";
  • branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config

    r854 r2504  
    1111                <value>plugins</value>
    1212            </setting>
     13            <setting name="User" serializeAs="String">
     14                <value />
     15            </setting>
     16            <setting name="Organization" serializeAs="String">
     17                <value />
     18            </setting>
    1319        </HeuristicLab.PluginInfrastructure.Properties.Settings>
    1420    </applicationSettings>
  • branches/PluginInfrastructure Refactoring/HeuristicLab/HeuristicLab.csproj

    r2503 r2504  
    8383  </ItemGroup>
    8484  <ItemGroup>
    85     <Compile Include="MainForm.cs">
    86       <SubType>Form</SubType>
    87     </Compile>
    88     <Compile Include="MainForm.Designer.cs">
    89       <DependentUpon>MainForm.cs</DependentUpon>
    90     </Compile>
    9185    <Compile Include="Program.cs" />
    9286    <Compile Include="Properties\AssemblyInfo.cs" />
    93     <EmbeddedResource Include="MainForm.resx">
    94       <DependentUpon>MainForm.cs</DependentUpon>
    95       <SubType>Designer</SubType>
    96     </EmbeddedResource>
    9787    <EmbeddedResource Include="Properties\Resources.resx">
    9888      <Generator>ResXFileCodeGenerator</Generator>
    9989      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    100       <SubType>Designer</SubType>
    101     </EmbeddedResource>
    102     <EmbeddedResource Include="SplashScreen.resx">
    103       <DependentUpon>SplashScreen.cs</DependentUpon>
    10490      <SubType>Designer</SubType>
    10591    </EmbeddedResource>
     
    118104      <DependentUpon>Settings.settings</DependentUpon>
    119105      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    120     </Compile>
    121     <Compile Include="SplashScreen.cs">
    122       <SubType>Form</SubType>
    123     </Compile>
    124     <Compile Include="SplashScreen.Designer.cs">
    125       <DependentUpon>SplashScreen.cs</DependentUpon>
    126106    </Compile>
    127107  </ItemGroup>
  • branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs

    r2488 r2504  
    6363    }
    6464
    65     public static void ShowErrorMessageBox(Exception ex) {
    66       MessageBox.Show(BuildErrorMessage(ex),
    67                       "Error - " + ex.GetType().Name,
    68                       MessageBoxButtons.OK,
    69                       MessageBoxIcon.Error);
     65    private static void ShowErrorMessageBox(Exception ex) {
     66      MessageBox.Show(null,
     67        BuildErrorMessage(ex),
     68        "Error - " + ex.GetType().Name,
     69        MessageBoxButtons.OK,
     70        MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
    7071    }
    7172
  • branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/AssemblyInfo.frame

    r581 r2504  
    3636[assembly: AssemblyTrademark("")]
    3737[assembly: AssemblyCulture("")]
     38[assembly: System.Resources.NeutralResourcesLanguage("en")]
    3839
    3940// Setting ComVisible to false makes the types in this assembly not visible
  • branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.Designer.cs

    r2 r2504  
    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 
    22 //------------------------------------------------------------------------------
     1//------------------------------------------------------------------------------
    232// <auto-generated>
    243//     This code was generated by a tool.
    25 //     Runtime Version:2.0.50727.1433
     4//     Runtime Version:2.0.50727.4200
    265//
    276//     Changes to this file may cause incorrect behavior and will be lost if
     
    8160            }
    8261        }
    83        
    84         internal static System.Drawing.Bitmap Details {
    85             get {
    86                 object obj = ResourceManager.GetObject("Details", resourceCulture);
    87                 return ((System.Drawing.Bitmap)(obj));
    88             }
    89         }
    90        
    91         internal static System.Drawing.Icon HeuristicLab {
    92             get {
    93                 object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
    94                 return ((System.Drawing.Icon)(obj));
    95             }
    96         }
    97        
    98         internal static System.Drawing.Bitmap LargeIcons {
    99             get {
    100                 object obj = ResourceManager.GetObject("LargeIcons", resourceCulture);
    101                 return ((System.Drawing.Bitmap)(obj));
    102             }
    103         }
    104        
    105         internal static System.Drawing.Bitmap List {
    106             get {
    107                 object obj = ResourceManager.GetObject("List", resourceCulture);
    108                 return ((System.Drawing.Bitmap)(obj));
    109             }
    110         }
    111        
    112         internal static System.Drawing.Bitmap Logo_white {
    113             get {
    114                 object obj = ResourceManager.GetObject("Logo_white", resourceCulture);
    115                 return ((System.Drawing.Bitmap)(obj));
    116             }
    117         }
    11862    }
    11963}
  • branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.resx

    r2 r2504  
    118118    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    119119  </resheader>
    120   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    121   <data name="Details" type="System.Resources.ResXFileRef, System.Windows.Forms">
    122     <value>..\Resources\Details.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    123   </data>
    124   <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
    125     <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    126   </data>
    127   <data name="LargeIcons" type="System.Resources.ResXFileRef, System.Windows.Forms">
    128     <value>..\Resources\LargeIcons.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    129   </data>
    130   <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
    131     <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    132   </data>
    133   <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
    134     <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
    135   </data>
    136120</root>
  • branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.Designer.cs

    r854 r2504  
    22// <auto-generated>
    33//     This code was generated by a tool.
    4 //     Runtime Version:2.0.50727.3053
     4//     Runtime Version:2.0.50727.4200
    55//
    66//     Changes to this file may cause incorrect behavior and will be lost if
     
    2323            }
    2424        }
    25        
    26         [global::System.Configuration.ApplicationScopedSettingAttribute()]
    27         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    28         [global::System.Configuration.DefaultSettingValueAttribute("unknown")]
    29         public string User {
    30             get {
    31                 return ((string)(this["User"]));
    32             }
    33         }
    34        
    35         [global::System.Configuration.ApplicationScopedSettingAttribute()]
    36         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    37         [global::System.Configuration.DefaultSettingValueAttribute("unknown")]
    38         public string Organization {
    39             get {
    40                 return ((string)(this["Organization"]));
    41             }
    42         }
    4325    }
    4426}
  • branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.settings

    r854 r2504  
    11<?xml version='1.0' encoding='utf-8'?>
    2 <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Properties" GeneratedClassName="Settings">
     2<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
    33  <Profiles />
    4   <Settings>
    5     <Setting Name="User" Type="System.String" Scope="Application">
    6       <Value Profile="(Default)">unknown</Value>
    7     </Setting>
    8     <Setting Name="Organization" Type="System.String" Scope="Application">
    9       <Value Profile="(Default)">unknown</Value>
    10     </Setting>
    11   </Settings>
     4  <Settings />
    125</SettingsFile>
  • branches/PluginInfrastructure Refactoring/HeuristicLab/app.config

    r2472 r2504  
    22<configuration>
    33    <configSections>
    4         <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    5             <section name="HeuristicLab.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    6         </sectionGroup>
    74    </configSections>
    85  <connectionStrings>
    96  </connectionStrings>
    10   <system.serviceModel>
    11   </system.serviceModel>
    127  <runtime>
    138    <gcServer enabled="true" />
     
    1712      <remove invariant="System.Data.SQLite"/>
    1813      <add name="SQLite Data Provider" invariant="System.Data.SQLite"
    19            description=".Net Framework Data Provider for SQLite"           
     14           description=".Net Framework Data Provider for SQLite"
    2015           type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    2116      <remove invariant="System.Data.SqlServerCe.3.5" />
    22       <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" 
    23            description=".NET Framework Data Provider for Microsoft SQL Server Compact" 
     17      <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5"
     18           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
    2419           type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    2520    </DbProviderFactories>
    2621  </system.data>
    27   <applicationSettings>
    28     <HeuristicLab.Properties.Settings>
    29       <setting name="User" serializeAs="String">
    30         <value>unknown</value>
    31       </setting>
    32       <setting name="Organization" serializeAs="String">
    33         <value>unknown</value>
    34       </setting>
    35     </HeuristicLab.Properties.Settings>
    36   </applicationSettings>
    3722</configuration>
Note: See TracChangeset for help on using the changeset viewer.