Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.CEDMA.Server/ServerForm.cs @ 539

Last change on this file since 539 was 539, checked in by gkronber, 16 years ago

added a method that creates a number of default items and statements (we could call it ontology) this is necessary so that we have a list of fixed items that will later allow selection of specific items based on statements.
#261 (Items are stored multiple times in the result entries in the CEDMA DB).

File size: 5.9 KB
Line 
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
22using System;
23using System.Collections.Generic;
24using System.ComponentModel;
25using System.Data;
26using System.Drawing;
27using System.Linq;
28using System.Text;
29using System.Windows.Forms;
30using System.ServiceModel;
31using System.ServiceModel.Description;
32using HeuristicLab.PluginInfrastructure;
33using System.Net;
34using HeuristicLab.CEDMA.DB;
35using HeuristicLab.CEDMA.DB.Interfaces;
36using System.Data.Common;
37using System.Threading;
38using HeuristicLab.Grid;
39using HeuristicLab.Data;
40using HeuristicLab.Core;
41
42namespace HeuristicLab.CEDMA.Server {
43  public partial class ServerForm : Form {
44    private ServiceHost host;
45    private Database database;
46    private static readonly string dbFile = AppDomain.CurrentDomain.BaseDirectory + "/test.db3";
47    private static readonly string connectionString = "Data Source=\""+dbFile+"\";Pooling=False";
48    public ServerForm() {
49      InitializeComponent();
50      // windows XP returns the external ip on index 0 while windows vista returns the external ip on index 2
51      if (System.Environment.OSVersion.Version.Major >= 6) {
52        addressTextBox.Text = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[2] + ":8002/CEDMA/World";
53      } else {
54        addressTextBox.Text = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[0] + ":8002/CEDMA/World";
55      }
56    }
57
58    private void InitRunScheduler() {
59      JobManager jobManager = new JobManager(gridAddress.Text);
60      jobManager.Reset();
61      RunScheduler scheduler = new RunScheduler(database, jobManager, addressTextBox.Text);
62      Thread runSchedulerThread = new Thread(scheduler.Run);
63      runSchedulerThread.Start();
64    }
65
66    private void InitDatabase() {
67      DbProviderFactory fact;
68      fact = DbProviderFactories.GetFactory("System.Data.SQLite");
69      if(!System.IO.File.Exists(dbFile)) {
70        database = new Database(connectionString);
71        database.CreateNew();
72        InitDefaultOntology();
73      } else {
74        database = new Database(connectionString);
75        if(database.GetOntologyItems().Count==0) InitDefaultOntology();
76      }
77    }
78
79    private void InitDefaultOntology() {
80      // init default ontology
81      StringData cedmaOntology = new StringData("CedmaOntology");
82      StringData definesEntity = new StringData("definesEntity");
83      StringData classGpFunctionTree = new StringData("class:GpFunctionTree");
84      StringData classDataset = new StringData("class:Dataset");
85      StringData instanceOf = new StringData("instanceOf");
86      StringData hasModel = new StringData("hasModel");
87      StringData modelOf = new StringData("modelOf");
88      StringData targetVariable = new StringData("targetVariable");
89      StringData trainingMse = new StringData("trainingMSE");
90      StringData validationMse = new StringData("validationMSE");
91
92      LinkItems(cedmaOntology, definesEntity, cedmaOntology);
93      LinkItems(cedmaOntology, definesEntity, definesEntity);
94      LinkItems(cedmaOntology, definesEntity, classGpFunctionTree);
95      LinkItems(cedmaOntology, definesEntity, classDataset);
96      LinkItems(cedmaOntology, definesEntity, instanceOf);
97      LinkItems(cedmaOntology, definesEntity, hasModel);
98      LinkItems(cedmaOntology, definesEntity, modelOf);
99      LinkItems(cedmaOntology, definesEntity, targetVariable);
100      LinkItems(cedmaOntology, definesEntity, trainingMse);
101      LinkItems(cedmaOntology, definesEntity, validationMse);
102    }
103
104    private void LinkItems(StringData subj, StringData pred, StringData prop) {
105      ItemEntry subjEntry = new ItemEntry();
106      ItemEntry predEntry = new ItemEntry();
107      ItemEntry propEntry = new ItemEntry();
108      subjEntry.Guid = subj.Guid;
109      subjEntry.RawData = PersistenceManager.SaveToGZip(subj);
110      predEntry.Guid = pred.Guid;
111      predEntry.RawData = PersistenceManager.SaveToGZip(pred);
112      propEntry.Guid = prop.Guid;
113      propEntry.RawData = PersistenceManager.SaveToGZip(prop);
114
115      database.LinkItems(subjEntry, predEntry, propEntry);
116    }
117
118    private void Start() {
119      InitDatabase();
120      InitRunScheduler();
121
122      host = new ServiceHost(database, new Uri(addressTextBox.Text));
123      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
124      throttlingBehavior.MaxConcurrentSessions = 20;
125      host.Description.Behaviors.Add(throttlingBehavior);
126      try {
127        NetTcpBinding binding = new NetTcpBinding();
128        binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
129        binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
130        binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
131        binding.Security.Mode = SecurityMode.None;
132
133        host.AddServiceEndpoint(typeof(IDatabase), binding, addressTextBox.Text);
134        host.Open();
135      } catch (CommunicationException ex) {
136        MessageBox.Show("An exception occurred: " + ex.Message);
137        host.Abort();
138      }
139    }
140
141    private void startButton_Click(object sender, EventArgs e) {
142      Start();
143      startButton.Enabled = false;
144    }
145  }
146}
Note: See TracBrowser for help on using the repository browser.