Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/AccessClient.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/AccessClient.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/AccessClient.cs	(revision 7536)
@@ -48,5 +48,5 @@
     public void Refresh() {
       usersAndGroups = new ItemList<UserGroupBase>();
-      usersAndGroups.AddRange(CallRunCreationService<ItemList<UserGroupBase>>(s => new ItemList<UserGroupBase>(s.GetAllLeightweightUsersAndGroups())));
+      usersAndGroups.AddRange(CallAccessService<ItemList<UserGroupBase>>(s => new ItemList<UserGroupBase>(s.GetAllLeightweightUsersAndGroups())));
     }
     public void RefreshAsync(Action<Exception> exceptionCallback) {
@@ -108,5 +108,5 @@
 
     #region Helpers
-    public static void CallRunCreationService(Action<IAccessService> call) {
+    public static void CallAccessService(Action<IAccessService> call) {
       AccessServiceClient client = ClientFactory.CreateClient<AccessServiceClient, IAccessService>();
       try {
@@ -122,5 +122,5 @@
       }
     }
-    public static T CallRunCreationService<T>(Func<IAccessService, T> call) {
+    public static T CallAccessService<T>(Func<IAccessService, T> call) {
       AccessServiceClient client = ClientFactory.CreateClient<AccessServiceClient, IAccessService>();
       try {
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformation.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformation.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformation.cs	(revision 7536)
@@ -61,5 +61,5 @@
 
       try {
-        AccessClient.CallRunCreationService(x => clientInfo = x.GetClient(clientId));
+        AccessClient.CallAccessService(x => clientInfo = x.GetClient(clientId));
         if (clientInfo != null)
           clientExists = true;
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformationUtils.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformationUtils.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformationUtils.cs	(revision 7536)
@@ -21,5 +21,7 @@
 
 using System;
+using System.Diagnostics;
 using System.Management;
+using System.Reflection;
 using HeuristicLab.Algorithms.Benchmarks;
 using HeuristicLab.Data;
@@ -28,4 +30,36 @@
 namespace HeuristicLab.Clients.Access {
   public static class ClientInformationUtils {
+
+    public static Client CollectClientInformation() {
+      Client client = new Client();
+      OperatingSystem os = new OperatingSystem();
+      ClientType cType = new ClientType();
+      cType.Name = "HLClient";
+
+      client.Id = GetUniqueMachineId();
+      client.HeuristicLabVersion = GetHLVersion();
+      client.Name = GetMachineName();
+      client.MemorySize = GetPhysicalMemory().GetValueOrDefault();
+      client.NumberOfCores = GetNumberOfCores();
+      os.Name = GetOperatingSystem();
+      client.OperatingSystem = os;
+      client.ProcessorType = GetCpuInfo();
+      client.ClientType = cType;
+      //client.ClientConfiguration = GetClientConfiguration();
+      client.Timestamp = DateTime.Now;
+      client.PerformanceValue = RunBenchmark();
+
+      return client;
+    }
+
+    public static string GetClientConfiguration() {
+      //TODO: does it make sense to send the client configuration to the server? for what do we need this?
+      return string.Empty;
+    }
+
+    public static string GetHLVersion() {
+      FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
+      return versionInfo.FileVersion;
+    }
 
     public static int GetNumberOfCores() {
@@ -67,6 +101,8 @@
     /// returns CPU frequence of the machine in Mhz
     /// </summary>
-    public static int? GetCpuSpeed() {
-      return (int)GetWMIValue("Win32_Processor", "MaxClockSpeed");
+    public static string GetCpuInfo() {
+      string name = GetWMIString("Win32_Processor", "Name");
+      string manufacturer = GetWMIString("Win32_Processor", "Manufacturer");
+      return manufacturer + " " + name;
     }
 
@@ -153,4 +189,23 @@
     }
 
+    private static string GetWMIString(string clazz, string property) {
+      ManagementClass mgtClass = new ManagementClass(clazz);
+      ManagementObjectCollection mgtCol = mgtClass.GetInstances();
+
+      foreach (ManagementObject mgtObj in mgtCol) {
+        foreach (var prop in mgtObj.Properties) {
+          if (prop.Value != null && prop.Name == property) {
+            try {
+              return prop.Value.ToString();
+            }
+            catch {
+              return string.Empty;
+            }
+          }
+        }
+      }
+      return string.Empty;
+    }
+
     public static double RunBenchmark() {
       Linpack linpack = new Linpack();
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/AdminClientView.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/AdminClientView.Designer.cs	(revision 7536)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/AdminClientView.Designer.cs	(revision 7536)
@@ -0,0 +1,140 @@
+﻿namespace HeuristicLab.Clients.Access {
+  partial class AdminClientView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.label12 = new System.Windows.Forms.Label();
+      this.txtCountry = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // txtName
+      // 
+      this.txtName.Size = new System.Drawing.Size(411, 20);
+      // 
+      // txtDescription
+      // 
+      this.txtDescription.Size = new System.Drawing.Size(410, 20);
+      // 
+      // txtVersion
+      // 
+      this.txtVersion.Size = new System.Drawing.Size(410, 20);
+      // 
+      // txtTimestamp
+      // 
+      this.txtTimestamp.Size = new System.Drawing.Size(411, 20);
+      // 
+      // txtMemory
+      // 
+      this.txtMemory.Size = new System.Drawing.Size(411, 20);
+      // 
+      // txtNumberOfCores
+      // 
+      this.txtNumberOfCores.Size = new System.Drawing.Size(411, 20);
+      // 
+      // txtClientType
+      // 
+      this.txtClientType.Size = new System.Drawing.Size(410, 20);
+      // 
+      // txtClientConfiguration
+      // 
+      this.txtClientConfiguration.Size = new System.Drawing.Size(411, 20);
+      // 
+      // txtProcessor
+      // 
+      this.txtProcessor.Size = new System.Drawing.Size(410, 20);
+      // 
+      // txtOS
+      // 
+      this.txtOS.Size = new System.Drawing.Size(410, 20);
+      // 
+      // txtPerformanceValue
+      // 
+      this.txtPerformanceValue.Size = new System.Drawing.Size(411, 20);
+      // 
+      // txtId
+      // 
+      this.txtId.Size = new System.Drawing.Size(410, 20);
+      // 
+      // label12
+      // 
+      this.label12.AutoSize = true;
+      this.label12.Location = new System.Drawing.Point(3, 318);
+      this.label12.Name = "label12";
+      this.label12.Size = new System.Drawing.Size(46, 13);
+      this.label12.TabIndex = 11;
+      this.label12.Text = "Country:";
+      // 
+      // txtCountry
+      // 
+      this.txtCountry.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtCountry.Location = new System.Drawing.Point(111, 315);
+      this.txtCountry.Name = "txtCountry";
+      this.txtCountry.Size = new System.Drawing.Size(410, 20);
+      this.txtCountry.TabIndex = 22;
+      // 
+      // AdminClientView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.txtCountry);
+      this.Controls.Add(this.label12);
+      this.Name = "AdminClientView";
+      this.Size = new System.Drawing.Size(524, 341);
+      this.Controls.SetChildIndex(this.label1, 0);
+      this.Controls.SetChildIndex(this.label2, 0);
+      this.Controls.SetChildIndex(this.label3, 0);
+      this.Controls.SetChildIndex(this.label4, 0);
+      this.Controls.SetChildIndex(this.label5, 0);
+      this.Controls.SetChildIndex(this.label6, 0);
+      this.Controls.SetChildIndex(this.label7, 0);
+      this.Controls.SetChildIndex(this.label8, 0);
+      this.Controls.SetChildIndex(this.label9, 0);
+      this.Controls.SetChildIndex(this.label10, 0);
+      this.Controls.SetChildIndex(this.label11, 0);
+      this.Controls.SetChildIndex(this.txtName, 0);
+      this.Controls.SetChildIndex(this.txtDescription, 0);
+      this.Controls.SetChildIndex(this.txtVersion, 0);
+      this.Controls.SetChildIndex(this.txtTimestamp, 0);
+      this.Controls.SetChildIndex(this.txtMemory, 0);
+      this.Controls.SetChildIndex(this.txtNumberOfCores, 0);
+      this.Controls.SetChildIndex(this.txtClientType, 0);
+      this.Controls.SetChildIndex(this.txtClientConfiguration, 0);
+      this.Controls.SetChildIndex(this.txtProcessor, 0);
+      this.Controls.SetChildIndex(this.txtOS, 0);
+      this.Controls.SetChildIndex(this.txtPerformanceValue, 0);
+      this.Controls.SetChildIndex(this.label13, 0);
+      this.Controls.SetChildIndex(this.txtId, 0);
+      this.Controls.SetChildIndex(this.label12, 0);
+      this.Controls.SetChildIndex(this.txtCountry, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label12;
+    private System.Windows.Forms.TextBox txtCountry;
+  }
+}
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/AdminClientView.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/AdminClientView.cs	(revision 7536)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/AdminClientView.cs	(revision 7536)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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 HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.Access {
+  [View("Extended Client View")]
+  [Content(typeof(Client), false)]
+  public partial class AdminClientView : ClientView {
+    public new Client Content {
+      get { return (Client)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public AdminClientView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      if (Content == null) {
+        txtCountry.Text = string.Empty;
+      } else {
+        if (Content.Country != null) {
+          txtCountry.Text = Content.Country.Name;
+        }
+      }
+    }
+  }
+}
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientInformationDialog.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientInformationDialog.Designer.cs	(revision 7536)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientInformationDialog.Designer.cs	(revision 7536)
@@ -0,0 +1,63 @@
+﻿namespace HeuristicLab.Clients.Access {
+  partial class ClientInformationDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.clientView = new HeuristicLab.Clients.Access.ClientView();
+      this.SuspendLayout();
+      // 
+      // clientView
+      // 
+      this.clientView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.clientView.Caption = "Client View";
+      this.clientView.Content = null;
+      this.clientView.Location = new System.Drawing.Point(12, 12);
+      this.clientView.Name = "clientView";
+      this.clientView.ReadOnly = false;
+      this.clientView.Size = new System.Drawing.Size(528, 452);
+      this.clientView.TabIndex = 0;
+      // 
+      // ClientInformationDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(552, 345);
+      this.Controls.Add(this.clientView);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "ClientInformationDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Client Information";
+      this.TopMost = true;
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private ClientView clientView;
+  }
+}
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientInformationDialog.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientInformationDialog.cs	(revision 7536)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientInformationDialog.cs	(revision 7536)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Windows.Forms;
+
+namespace HeuristicLab.Clients.Access {
+  public partial class ClientInformationDialog : Form {
+    public ClientInformationDialog() {
+      InitializeComponent();
+    }
+
+    protected override void OnLoad(System.EventArgs e) {
+      base.OnLoad(e);
+
+      clientView.Content = ClientInformation.Instance.ClientInfo;
+    }
+  }
+}
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientRegistrationDialog.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientRegistrationDialog.Designer.cs	(revision 7536)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientRegistrationDialog.Designer.cs	(revision 7536)
@@ -0,0 +1,130 @@
+﻿namespace HeuristicLab.Clients.Access {
+  partial class ClientRegistrationDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.btnCollectInformation = new System.Windows.Forms.Button();
+      this.richTextBox1 = new System.Windows.Forms.RichTextBox();
+      this.clientView = new HeuristicLab.Clients.Access.ClientView();
+      this.progressBar = new System.Windows.Forms.ProgressBar();
+      this.btnRegisterClient = new System.Windows.Forms.Button();
+      this.btnCancel = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // btnCollectInformation
+      // 
+      this.btnCollectInformation.Location = new System.Drawing.Point(12, 114);
+      this.btnCollectInformation.Name = "btnCollectInformation";
+      this.btnCollectInformation.Size = new System.Drawing.Size(111, 23);
+      this.btnCollectInformation.TabIndex = 1;
+      this.btnCollectInformation.Text = "Collect information";
+      this.btnCollectInformation.UseVisualStyleBackColor = true;
+      this.btnCollectInformation.Click += new System.EventHandler(this.btnCollectInformation_Click);
+      // 
+      // richTextBox1
+      // 
+      this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.richTextBox1.Location = new System.Drawing.Point(12, 12);
+      this.richTextBox1.Name = "richTextBox1";
+      this.richTextBox1.Size = new System.Drawing.Size(638, 96);
+      this.richTextBox1.TabIndex = 2;
+      this.richTextBox1.Text = "";
+      // 
+      // clientView
+      // 
+      this.clientView.Caption = "Client View";
+      this.clientView.Content = null;
+      this.clientView.Location = new System.Drawing.Point(12, 143);
+      this.clientView.Name = "clientView";
+      this.clientView.ReadOnly = false;
+      this.clientView.Size = new System.Drawing.Size(638, 340);
+      this.clientView.TabIndex = 3;
+      // 
+      // progressBar
+      // 
+      this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.progressBar.Location = new System.Drawing.Point(130, 114);
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(520, 23);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+      this.progressBar.TabIndex = 4;
+      this.progressBar.Visible = false;
+      // 
+      // btnRegisterClient
+      // 
+      this.btnRegisterClient.Enabled = false;
+      this.btnRegisterClient.Location = new System.Drawing.Point(12, 516);
+      this.btnRegisterClient.Name = "btnRegisterClient";
+      this.btnRegisterClient.Size = new System.Drawing.Size(88, 23);
+      this.btnRegisterClient.TabIndex = 5;
+      this.btnRegisterClient.Text = "Register client";
+      this.btnRegisterClient.UseVisualStyleBackColor = true;
+      this.btnRegisterClient.Click += new System.EventHandler(this.btnRegisterClient_Click);
+      // 
+      // btnCancel
+      // 
+      this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnCancel.Location = new System.Drawing.Point(574, 516);
+      this.btnCancel.Name = "btnCancel";
+      this.btnCancel.Size = new System.Drawing.Size(75, 23);
+      this.btnCancel.TabIndex = 6;
+      this.btnCancel.Text = "Close";
+      this.btnCancel.UseVisualStyleBackColor = true;
+      // 
+      // ClientRegistrationDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.btnCancel;
+      this.ClientSize = new System.Drawing.Size(662, 552);
+      this.Controls.Add(this.btnCancel);
+      this.Controls.Add(this.btnRegisterClient);
+      this.Controls.Add(this.progressBar);
+      this.Controls.Add(this.clientView);
+      this.Controls.Add(this.richTextBox1);
+      this.Controls.Add(this.btnCollectInformation);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "ClientRegistrationDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Client Registration";
+      this.TopMost = true;
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnCollectInformation;
+    private System.Windows.Forms.RichTextBox richTextBox1;
+    private ClientView clientView;
+    private System.Windows.Forms.ProgressBar progressBar;
+    private System.Windows.Forms.Button btnRegisterClient;
+    private System.Windows.Forms.Button btnCancel;
+
+  }
+}
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientRegistrationDialog.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientRegistrationDialog.cs	(revision 7536)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientRegistrationDialog.cs	(revision 7536)
@@ -0,0 +1,102 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Clients.Access {
+  public partial class ClientRegistrationDialog : Form {
+    public ClientRegistrationDialog() {
+      InitializeComponent();
+    }
+
+    private void btnCollectInformation_Click(object sender, EventArgs e) {
+      progressBar.Visible = true;
+      progressBar.Style = ProgressBarStyle.Marquee;
+      btnCollectInformation.Enabled = false;
+      btnRegisterClient.Enabled = false;
+
+      Task<Client> task = Task.Factory.StartNew<Client>(ClientInformationUtils.CollectClientInformation);
+      task.ContinueWith(c => DisplayContent(c.Result));
+    }
+
+    private void DisplayContent(Client client) {
+      if (!this.Disposing) {
+        if (this.InvokeRequired) {
+          Invoke(new Action<Client>(DisplayContent), client);
+        } else {
+          clientView.Content = client;
+          progressBar.Visible = false;
+          btnCollectInformation.Enabled = true;
+          btnRegisterClient.Enabled = true;
+        }
+      }
+    }
+
+    private void AddClient() {
+      AccessClient.CallAccessService(x => x.AddClient(clientView.Content));
+    }
+
+    private void RefreshClientInformation(Task task) {
+      ClientInformation.Instance.Refresh();
+    }
+
+    private void btnRegisterClient_Click(object sender, EventArgs e) {
+      progressBar.Visible = true;
+      btnRegisterClient.Enabled = false;
+      btnCollectInformation.Enabled = false;
+      btnCancel.Enabled = false;
+
+      Task task = Task.Factory.StartNew(AddClient);
+      task.ContinueWith(RefreshClientInformation, TaskContinuationOptions.NotOnFaulted);
+      task.ContinueWith(FinishRegistration, TaskContinuationOptions.NotOnFaulted);
+      task.ContinueWith(HandleRegistrationError, TaskContinuationOptions.OnlyOnFaulted);
+    }
+
+    private void FinishRegistration(Task task) {
+      if (!this.Disposing) {
+        if (this.InvokeRequired) {
+          Invoke(new Action<Task>(FinishRegistration), task);
+        } else {
+          progressBar.Visible = false;
+          btnCollectInformation.Enabled = true;
+          btnCancel.Enabled = true;
+          MessageBox.Show("Your HeuristicLab client has been registered successfully.", "HeuristicLab Registration", MessageBoxButtons.OK, MessageBoxIcon.Information);
+        }
+      }
+    }
+
+    private void HandleRegistrationError(Task task) {
+      if (!this.Disposing) {
+        if (this.InvokeRequired) {
+          Invoke(new Action<Task>(HandleRegistrationError), task);
+        } else {
+          progressBar.Visible = false;
+          btnRegisterClient.Enabled = true;
+          btnCollectInformation.Enabled = true;
+          btnCancel.Enabled = true;
+          PluginInfrastructure.ErrorHandling.ShowErrorDialog(task.Exception);
+        }
+      }
+    }
+  }
+}
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientView.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientView.Designer.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientView.Designer.cs	(revision 7536)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.Clients.Access.ClientViews {
+﻿namespace HeuristicLab.Clients.Access {
   partial class ClientView {
     /// <summary> 
@@ -24,9 +24,308 @@
     /// </summary>
     private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
+      this.label1 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label3 = new System.Windows.Forms.Label();
+      this.label4 = new System.Windows.Forms.Label();
+      this.label5 = new System.Windows.Forms.Label();
+      this.label6 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
+      this.label8 = new System.Windows.Forms.Label();
+      this.label9 = new System.Windows.Forms.Label();
+      this.label10 = new System.Windows.Forms.Label();
+      this.label11 = new System.Windows.Forms.Label();
+      this.txtName = new System.Windows.Forms.TextBox();
+      this.txtDescription = new System.Windows.Forms.TextBox();
+      this.txtVersion = new System.Windows.Forms.TextBox();
+      this.txtTimestamp = new System.Windows.Forms.TextBox();
+      this.txtMemory = new System.Windows.Forms.TextBox();
+      this.txtNumberOfCores = new System.Windows.Forms.TextBox();
+      this.txtClientType = new System.Windows.Forms.TextBox();
+      this.txtClientConfiguration = new System.Windows.Forms.TextBox();
+      this.txtProcessor = new System.Windows.Forms.TextBox();
+      this.txtOS = new System.Windows.Forms.TextBox();
+      this.txtPerformanceValue = new System.Windows.Forms.TextBox();
+      this.label13 = new System.Windows.Forms.Label();
+      this.txtId = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 6);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(38, 13);
+      this.label1.TabIndex = 0;
+      this.label1.Text = "Name:";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(3, 32);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(63, 13);
+      this.label2.TabIndex = 1;
+      this.label2.Text = "Description:";
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(3, 58);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(62, 13);
+      this.label3.TabIndex = 2;
+      this.label3.Text = "HL Version:";
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(3, 84);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(47, 13);
+      this.label4.TabIndex = 3;
+      this.label4.Text = "Memory:";
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(3, 110);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(61, 13);
+      this.label5.TabIndex = 4;
+      this.label5.Text = "Timestamp:";
+      // 
+      // label6
+      // 
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(3, 136);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(62, 13);
+      this.label6.TabIndex = 5;
+      this.label6.Text = "CPU Cores:";
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(3, 162);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(57, 13);
+      this.label7.TabIndex = 6;
+      this.label7.Text = "Processor:";
+      // 
+      // label8
+      // 
+      this.label8.AutoSize = true;
+      this.label8.Location = new System.Drawing.Point(3, 188);
+      this.label8.Name = "label8";
+      this.label8.Size = new System.Drawing.Size(36, 13);
+      this.label8.TabIndex = 7;
+      this.label8.Text = "Client:";
+      // 
+      // label9
+      // 
+      this.label9.AutoSize = true;
+      this.label9.Location = new System.Drawing.Point(3, 214);
+      this.label9.Name = "label9";
+      this.label9.Size = new System.Drawing.Size(63, 13);
+      this.label9.TabIndex = 8;
+      this.label9.Text = "OS Version:";
+      // 
+      // label10
+      // 
+      this.label10.AutoSize = true;
+      this.label10.Location = new System.Drawing.Point(3, 240);
+      this.label10.Name = "label10";
+      this.label10.Size = new System.Drawing.Size(101, 13);
+      this.label10.TabIndex = 9;
+      this.label10.Text = "Client Configuration:";
+      // 
+      // label11
+      // 
+      this.label11.AutoSize = true;
+      this.label11.Location = new System.Drawing.Point(3, 266);
+      this.label11.Name = "label11";
+      this.label11.Size = new System.Drawing.Size(100, 13);
+      this.label11.TabIndex = 10;
+      this.label11.Text = "Performance Value:";
+      // 
+      // txtName
+      // 
+      this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtName.Location = new System.Drawing.Point(110, 3);
+      this.txtName.Name = "txtName";
+      this.txtName.Size = new System.Drawing.Size(265, 20);
+      this.txtName.TabIndex = 12;
+      // 
+      // txtDescription
+      // 
+      this.txtDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtDescription.Location = new System.Drawing.Point(111, 29);
+      this.txtDescription.Name = "txtDescription";
+      this.txtDescription.Size = new System.Drawing.Size(264, 20);
+      this.txtDescription.TabIndex = 13;
+      // 
+      // txtVersion
+      // 
+      this.txtVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtVersion.Location = new System.Drawing.Point(111, 55);
+      this.txtVersion.Name = "txtVersion";
+      this.txtVersion.Size = new System.Drawing.Size(264, 20);
+      this.txtVersion.TabIndex = 14;
+      // 
+      // txtTimestamp
+      // 
+      this.txtTimestamp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtTimestamp.Location = new System.Drawing.Point(110, 107);
+      this.txtTimestamp.Name = "txtTimestamp";
+      this.txtTimestamp.Size = new System.Drawing.Size(265, 20);
+      this.txtTimestamp.TabIndex = 15;
+      // 
+      // txtMemory
+      // 
+      this.txtMemory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtMemory.Location = new System.Drawing.Point(110, 81);
+      this.txtMemory.Name = "txtMemory";
+      this.txtMemory.Size = new System.Drawing.Size(265, 20);
+      this.txtMemory.TabIndex = 16;
+      // 
+      // txtNumberOfCores
+      // 
+      this.txtNumberOfCores.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtNumberOfCores.Location = new System.Drawing.Point(110, 133);
+      this.txtNumberOfCores.Name = "txtNumberOfCores";
+      this.txtNumberOfCores.Size = new System.Drawing.Size(265, 20);
+      this.txtNumberOfCores.TabIndex = 17;
+      // 
+      // txtClientType
+      // 
+      this.txtClientType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtClientType.Location = new System.Drawing.Point(111, 185);
+      this.txtClientType.Name = "txtClientType";
+      this.txtClientType.Size = new System.Drawing.Size(264, 20);
+      this.txtClientType.TabIndex = 18;
+      // 
+      // txtClientConfiguration
+      // 
+      this.txtClientConfiguration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtClientConfiguration.Location = new System.Drawing.Point(110, 237);
+      this.txtClientConfiguration.Name = "txtClientConfiguration";
+      this.txtClientConfiguration.Size = new System.Drawing.Size(265, 20);
+      this.txtClientConfiguration.TabIndex = 19;
+      // 
+      // txtProcessor
+      // 
+      this.txtProcessor.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtProcessor.Location = new System.Drawing.Point(111, 159);
+      this.txtProcessor.Name = "txtProcessor";
+      this.txtProcessor.Size = new System.Drawing.Size(264, 20);
+      this.txtProcessor.TabIndex = 20;
+      // 
+      // txtOS
+      // 
+      this.txtOS.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtOS.Location = new System.Drawing.Point(111, 211);
+      this.txtOS.Name = "txtOS";
+      this.txtOS.Size = new System.Drawing.Size(264, 20);
+      this.txtOS.TabIndex = 21;
+      // 
+      // txtPerformanceValue
+      // 
+      this.txtPerformanceValue.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtPerformanceValue.Location = new System.Drawing.Point(110, 263);
+      this.txtPerformanceValue.Name = "txtPerformanceValue";
+      this.txtPerformanceValue.Size = new System.Drawing.Size(265, 20);
+      this.txtPerformanceValue.TabIndex = 23;
+      // 
+      // label13
+      // 
+      this.label13.AutoSize = true;
+      this.label13.Location = new System.Drawing.Point(3, 292);
+      this.label13.Name = "label13";
+      this.label13.Size = new System.Drawing.Size(48, 13);
+      this.label13.TabIndex = 24;
+      this.label13.Text = "Client Id:";
+      // 
+      // txtId
+      // 
+      this.txtId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.txtId.Location = new System.Drawing.Point(111, 289);
+      this.txtId.Name = "txtId";
+      this.txtId.Size = new System.Drawing.Size(264, 20);
+      this.txtId.TabIndex = 25;
+      // 
+      // ClientView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.txtId);
+      this.Controls.Add(this.label13);
+      this.Controls.Add(this.txtPerformanceValue);
+      this.Controls.Add(this.txtOS);
+      this.Controls.Add(this.txtProcessor);
+      this.Controls.Add(this.txtClientConfiguration);
+      this.Controls.Add(this.txtClientType);
+      this.Controls.Add(this.txtNumberOfCores);
+      this.Controls.Add(this.txtMemory);
+      this.Controls.Add(this.txtTimestamp);
+      this.Controls.Add(this.txtVersion);
+      this.Controls.Add(this.txtDescription);
+      this.Controls.Add(this.txtName);
+      this.Controls.Add(this.label11);
+      this.Controls.Add(this.label10);
+      this.Controls.Add(this.label9);
+      this.Controls.Add(this.label8);
+      this.Controls.Add(this.label7);
+      this.Controls.Add(this.label6);
+      this.Controls.Add(this.label5);
+      this.Controls.Add(this.label4);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.label1);
+      this.Name = "ClientView";
+      this.Size = new System.Drawing.Size(378, 315);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
     }
 
     #endregion
+
+    protected System.Windows.Forms.Label label1;
+    protected System.Windows.Forms.Label label2;
+    protected System.Windows.Forms.Label label3;
+    protected System.Windows.Forms.Label label4;
+    protected System.Windows.Forms.Label label5;
+    protected System.Windows.Forms.Label label6;
+    protected System.Windows.Forms.Label label7;
+    protected System.Windows.Forms.Label label8;
+    protected System.Windows.Forms.Label label9;
+    protected System.Windows.Forms.Label label10;
+    protected System.Windows.Forms.Label label11;
+    protected System.Windows.Forms.TextBox txtName;
+    protected System.Windows.Forms.TextBox txtDescription;
+    protected System.Windows.Forms.TextBox txtVersion;
+    protected System.Windows.Forms.TextBox txtTimestamp;
+    protected System.Windows.Forms.TextBox txtMemory;
+    protected System.Windows.Forms.TextBox txtNumberOfCores;
+    protected System.Windows.Forms.TextBox txtClientType;
+    protected System.Windows.Forms.TextBox txtClientConfiguration;
+    protected System.Windows.Forms.TextBox txtProcessor;
+    protected System.Windows.Forms.TextBox txtOS;
+    protected System.Windows.Forms.TextBox txtPerformanceValue;
+    protected System.Windows.Forms.Label label13;
+    protected System.Windows.Forms.TextBox txtId;
+
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientView.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientView.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientViews/ClientView.cs	(revision 7536)
@@ -23,11 +23,54 @@
 using HeuristicLab.MainForm;
 
-namespace HeuristicLab.Clients.Access.ClientViews {
+namespace HeuristicLab.Clients.Access {
   [View("Client View")]
   [Content(typeof(Client), true)]
   public partial class ClientView : ItemView {
+    public new Client Content {
+      get { return (Client)base.Content; }
+      set { base.Content = value; }
+    }
+
     public ClientView() {
       InitializeComponent();
     }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      if (Content == null) {
+        txtClientConfiguration.Text = string.Empty;
+        txtClientType.Text = string.Empty;
+        txtDescription.Text = string.Empty;
+        txtMemory.Text = string.Empty;
+        txtName.Text = string.Empty;
+        txtNumberOfCores.Text = string.Empty;
+        txtPerformanceValue.Text = string.Empty;
+        txtProcessor.Text = string.Empty;
+        txtTimestamp.Text = string.Empty;
+        txtVersion.Text = string.Empty;
+        txtId.Text = string.Empty;
+        txtOS.Text = string.Empty;
+      } else {
+        if (Content.ClientConfiguration != null) {
+          txtClientConfiguration.Text = Content.ClientConfiguration.Description; //??
+        }
+        if (Content.ClientType != null) {
+          txtClientType.Text = Content.ClientType.Name;
+        }
+        if (Content.OperatingSystem != null) {
+          txtOS.Text = Content.OperatingSystem.Name;
+        }
+        txtDescription.Text = Content.Description;
+        txtMemory.Text = Content.MemorySize.ToString();
+        txtName.Text = Content.Name;
+        txtNumberOfCores.Text = Content.NumberOfCores.ToString();
+        txtPerformanceValue.Text = Content.PerformanceValue.ToString();
+        txtProcessor.Text = Content.ProcessorType;
+        txtTimestamp.Text = Content.Timestamp.ToShortDateString();
+        txtVersion.Text = Content.HeuristicLabVersion;
+        txtId.Text = Content.Id.ToString();
+      }
+    }
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj	(revision 7536)
@@ -102,4 +102,16 @@
     <Compile Include="ClientInformation.cs" />
     <Compile Include="ClientInformationUtils.cs" />
+    <Compile Include="ClientViews\ClientInformationDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ClientViews\ClientInformationDialog.Designer.cs">
+      <DependentUpon>ClientInformationDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ClientViews\ClientRegistrationDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ClientViews\ClientRegistrationDialog.Designer.cs">
+      <DependentUpon>ClientRegistrationDialog.cs</DependentUpon>
+    </Compile>
     <Compile Include="ClientViews\ClientView.cs">
       <SubType>UserControl</SubType>
@@ -107,4 +119,10 @@
     <Compile Include="ClientViews\ClientView.Designer.cs">
       <DependentUpon>ClientView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ClientViews\AdminClientView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ClientViews\AdminClientView.Designer.cs">
+      <DependentUpon>AdminClientView.cs</DependentUpon>
     </Compile>
     <Compile Include="MenuItems\ClientInfoMenuItem.cs" />
@@ -162,5 +180,4 @@
     <None Include="UpdateLocalInstallation.cmd" />
   </ItemGroup>
-  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/MenuItems/ClientInfoMenuItem.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/MenuItems/ClientInfoMenuItem.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/MenuItems/ClientInfoMenuItem.cs	(revision 7536)
@@ -32,5 +32,13 @@
     }
     public override void Execute() {
-      //    MainFormManager.MainForm.ShowContent(HiveClient.Instance);
+      if (ClientInformation.Instance.ClientExists) {
+        using (ClientInformationDialog dialog = new ClientInformationDialog()) {
+          dialog.ShowDialog();
+        }
+      } else {
+        using (ClientRegistrationDialog regDialog = new ClientRegistrationDialog()) {
+          regDialog.ShowDialog();
+        }
+      }
     }
     public override int Position {
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 7536)
@@ -1084,5 +1084,5 @@
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/AddClient", ReplyAction = "http://tempuri.org/IAccessService/AddClientResponse")]
-    System.Guid AddClient(HeuristicLab.Clients.Access.Client client);
+    void AddClient(HeuristicLab.Clients.Access.Client client);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/UpdateClient", ReplyAction = "http://tempuri.org/IAccessService/UpdateClientResponse")]
@@ -1297,6 +1297,6 @@
     }
 
-    public System.Guid AddClient(HeuristicLab.Clients.Access.Client client) {
-      return base.Channel.AddClient(client);
+    public void AddClient(HeuristicLab.Clients.Access.Client client) {
+      base.Channel.AddClient(client);
     }
 
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/UserInformation.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/UserInformation.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/UserInformation.cs	(revision 7536)
@@ -83,7 +83,7 @@
 
       try {
-        AccessClient.CallRunCreationService(x => user = x.Login());
-        AccessClient.CallRunCreationService(x => groups = x.GetGroupsOfCurrentUser());
-        AccessClient.CallRunCreationService(x => roles = x.GetRolesOfCurrentUser());
+        AccessClient.CallAccessService(x => user = x.Login());
+        AccessClient.CallAccessService(x => groups = x.GetGroupsOfCurrentUser());
+        AccessClient.CallAccessService(x => roles = x.GetRolesOfCurrentUser());
         errorOccured = false;
         userExists = true;
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access-3.3.Tests/UnitTest.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access-3.3.Tests/UnitTest.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access-3.3.Tests/UnitTest.cs	(revision 7536)
@@ -57,4 +57,5 @@
       DT.ClientType clientType = new DT.ClientType() { Name = "Client" };
       DT.OperatingSystem os = new DT.OperatingSystem() { Name = "Windows 7" };
+      Guid id = Guid.NewGuid();
 
       DT.Client client = new DT.Client() {
@@ -69,8 +70,9 @@
         OperatingSystem = os,
         ProcessorType = "Intel i7",
-        Timestamp = DateTime.Now
+        Timestamp = DateTime.Now,
+        Id = id
       };
 
-      Guid id = service.AddClient(client);
+      service.AddClient(client);
       Assert.IsTrue(service.ClientExists(id));
       Assert.AreEqual(1, service.GetAllClients().Count());
@@ -118,4 +120,5 @@
       ClearDB();
       AccessService service = new AccessService();
+      Guid id = Guid.NewGuid();
 
       DT.Client client = new DT.Client() {
@@ -126,8 +129,9 @@
         Name = "testClient",
         ProcessorType = "Intel i7",
-        Timestamp = DateTime.Now
+        Timestamp = DateTime.Now,
+        Id = id
       };
 
-      client.Id = service.AddClient(client);
+      service.AddClient(client);
       Assert.IsTrue(service.ClientExists(client.Id));
 
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml	(revision 7536)
@@ -3,5 +3,5 @@
   <Table Name="dbo.Resource" Member="Resources">
     <Type Name="Resource" InheritanceCode="Resource" IsInheritanceDefault="true">
-      <Column Name="Id" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Id" AutoSync="OnInsert" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
       <Column Name="Name" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
       <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="false" />
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout	(revision 7536)
@@ -47,5 +47,5 @@
       </nodes>
     </inheritanceConnector>
-    <inheritanceConnector edgePoints="[(5.625 : 2.07859537760417); (5.625 : 2.26); (5.79166666666667 : 2.26 : JumpStart); (5.98958333333333 : 2.26 : JumpEnd); (7 : 2.26); (7 : 2.5)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+    <inheritanceConnector edgePoints="[(5.625 : 2.07859537760417); (5.625 : 2.26); (5.79166666666667 : 2.26 : JumpStart); (5.95833333333333 : 2.26 : JumpEnd); (7 : 2.26); (7 : 2.5)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
       <nodes>
         <classShapeMoniker Id="20c6e07e-aa12-43dc-87d6-dae5bf173da4" />
@@ -59,5 +59,5 @@
       </nestedChildShapes>
     </classShape>
-    <associationConnector edgePoints="[(5.875 : 2.07859537760417); (5.875 : 2.34875); (8.125 : 2.34875)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(5.875 : 2.07859537760417); (5.875 : 2.34875); (8.125 : 2.34875)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/Resource/Resource_ClientLog" />
       <nodes>
@@ -121,5 +121,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(5.90625 : 2.07859537760417); (5.90625 : 6.22199625651042); (5.625 : 6.22199625651042)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(5.90625 : 2.07859537760417); (5.90625 : 6.22199625651042); (5.625 : 6.22199625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/Resource/Resource_ResourcePlugin" />
       <nodes>
@@ -172,5 +172,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(2.5 : 1.69399251302083); (2.875 : 2.06899251302083); (2.875 : 4.12102376302084); (3.75 : 4.12102376302084)]" fixedFrom="NotFixed" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(2.5 : 1.69399251302083); (2.875 : 2.06899251302083); (2.875 : 4.12102376302084); (3.75 : 4.12102376302084)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/ClientType/ClientType_Client" />
       <nodes>
@@ -179,5 +179,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(2.5 : 2.72199625651042); (2.79166666666667 : 2.72199625651042 : JumpStart); (2.95833333333333 : 2.72199625651042 : JumpEnd); (3.75 : 2.72199625651042)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(2.5 : 2.72199625651042); (3.75 : 2.72199625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/OperatingSystem/OperatingSystem_Client" />
       <nodes>
@@ -186,5 +186,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(2.5 : 3.49801188151042); (2.79166666666667 : 3.49801188151042 : JumpStart); (2.95833333333333 : 3.49801188151042 : JumpEnd); (3.75 : 3.49801188151042)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(2.5 : 3.49801188151042); (3.75 : 3.49801188151042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/Country/Country_Client" />
       <nodes>
@@ -193,5 +193,5 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(2.5 : 4.74120198567708); (3.75 : 4.74120198567708)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(2.5 : 4.74120198567708); (3.75 : 4.74120198567708)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/ClientConfiguration/ClientConfiguration_Client" />
       <nodes>
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs	(revision 7536)
@@ -244,5 +244,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
 		public System.Guid Id
 		{
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 7536)
@@ -64,6 +64,9 @@
                     where c.Id == id
                     select c;
-
-        return Convert.ToDto(query.FirstOrDefault());
+        if (query.Count() > 0) {
+          return Convert.ToDto(query.FirstOrDefault());
+        } else {
+          return null;
+        }
       }
     }
@@ -86,5 +89,5 @@
     }
 
-    public Guid AddClient(DT.Client client) {
+    public void AddClient(DT.Client client) {
       string country = string.Empty;
 
@@ -105,5 +108,4 @@
                       where c.Name == country
                       select c;
-
           if (query.Count() > 0) {
             entity.CountryId = query.First().Id;
@@ -111,7 +113,26 @@
         }
 
+        if (entity.OperatingSystem != null) {
+          string osversion = entity.OperatingSystem.Name;
+          var query = from os in context.GetTable<DA.OperatingSystem>()
+                      where os.Name == osversion
+                      select os;
+          if (query.Count() > 0) {
+            entity.OperatingSystem = query.First();
+          }
+        }
+
+        if (entity.ClientType != null) {
+          string cType = entity.ClientType.Name;
+          var query = from t in context.GetTable<DA.ClientType>()
+                      where t.Name == cType
+                      select t;
+          if (query.Count() > 0) {
+            entity.ClientType = query.First();
+          }
+        }
+
         context.Resources.InsertOnSubmit(entity);
         context.SubmitChanges();
-        return entity.Id;
       }
     }
@@ -162,4 +183,7 @@
     public Guid AddClientGroup(DT.ClientGroup group) {
       using (DA.ClientManagementDataContext context = new DA.ClientManagementDataContext()) {
+        if (group.Id == Guid.Empty)
+          group.Id = Guid.NewGuid();
+
         var entity = Convert.ToEntity(group);
         context.Resources.InsertOnSubmit(entity);
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 7535)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 7536)
@@ -44,5 +44,5 @@
 
     [OperationContract]
-    Guid AddClient(Client client);
+    void AddClient(Client client);
 
     [OperationContract]
