using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using SemWeb; using HeuristicLab.Core; using HeuristicLab.DataAnalysis; namespace CedmaExporter { public partial class CedmaExporterForm : Form { private BackgroundWorker worker; public CedmaExporterForm() { InitializeComponent(); } private void exportButton_Click(object sender, EventArgs e) { var dialog = new OpenFileDialog(); DialogResult result; result = dialog.ShowDialog(); if (result == DialogResult.OK) { string fileName = dialog.FileName; exportButton.Enabled = false; cancelButton.Enabled = true; worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; worker.DoWork += CreateWorkerDelegate(worker, fileName); worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); worker.RunWorkerAsync(); } } private DoWorkEventHandler CreateWorkerDelegate(BackgroundWorker worker, string fileName) { return (sender, args) => { string inputFileName = fileName; string outputFileName = fileName.Replace(".db3", "") + ".txt"; string rdfConnectionString = "sqlite:rdf:Data Source=\"" + inputFileName + "\""; using (StreamWriter writer = File.CreateText(outputFileName)) { using (Store store = Store.Create(rdfConnectionString)) { var dsEntities = store.SelectSubjects(Ontology.InstanceOf, Ontology.TypeDataSet); HeuristicLab.CEDMA.Core.Problem prob = (HeuristicLab.CEDMA.Core.Problem)PersistenceManager.RestoreFromGZip(Convert.FromBase64String(((Literal)store.SelectObjects(dsEntities[0], Ontology.SerializedData)[0]).Value)); Dataset ds = prob.Dataset; CedmaExporter.WriteColumnHeaders(writer); List inputVariables = CedmaExporter.WriteVariableImpactHeaders(store, writer); writer.WriteLine(); var subjects = store.SelectSubjects(new Entity(Ontology.InstanceOf.Uri), new Entity(Ontology.TypeModel.Uri)); int i = 0; var exporter = new ModelExporter(ds, Path.GetDirectoryName(outputFileName), false); foreach (var model in subjects) { CedmaExporter.WriteModel(model, ++i, store, writer, inputVariables, exporter); worker.ReportProgress((i * 100) / subjects.Count()); if (worker.CancellationPending) return; } } } }; } void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { exportButton.Enabled = true; cancelButton.Enabled = false; progressBar.Value = 0; } void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar.Value = e.ProgressPercentage; } private void cancelButton_Click(object sender, EventArgs e) { worker.CancelAsync(); } } }