예제 #1
0
        public async Task <IActionResult> NewExperiment(NewExperiment n)
        {
            var userId  = GetUserId();
            var project = await _db.Projects.FindAsync(n.ProjectId);

            if (project == null || project.OwnerId != userId)
            {
                return(NotFound());
            }

            var experiment = new Experiment
            {
                Name          = n.Name,
                Project       = project,
                ProjectId     = n.ProjectId,
                ConfigName    = n.ConfigName,
                ConfigContent = n.ConfigContent,
                Driver        = n.Driver,
                Command       = n.Command,
                GitHash       = n.GitHash,
                Comment       = n.Comment,
                Owner         = await _userManager.GetUserAsync(User),
                OwnerId       = userId
            };

            await _db.Experiments.AddAsync(experiment);

            await _db.SaveChangesAsync();

            await StartExperiment(n.ProjectId, experiment.Id);

            return(new JsonResult(experiment));
        }
예제 #2
0
        /// <summary>
        /// The <see cref="Control.Click"/> event handler
        /// for the <see cref="ToolStripMenuItem"/> <see cref="mnuFileNewExperiment"/>
        /// Creates new experiment through creating new database and
        /// asks for stimulus path and screen size.
        /// </summary>
        /// <param name="sender">Source of the event</param>
        /// <param name="e">An empty <see cref="EventArgs"/></param>
        private void mnuFileNewExperiment_Click(object sender, EventArgs e)
        {
            if (Document.ActiveDocument == null)
            {
                // Show new experiment storage dialog.
                NewExperiment objfrmNewExperimentDlg = new NewExperiment();
                if (objfrmNewExperimentDlg.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                this.Cursor = Cursors.WaitCursor;

                string newExperimentFolder = Path.Combine(
                    objfrmNewExperimentDlg.ParentFolder,
                    objfrmNewExperimentDlg.ExperimentName);

                string newExperimentName     = objfrmNewExperimentDlg.ExperimentName;
                string newExperimentFilename = Path.Combine(newExperimentFolder, newExperimentName + ".oga");

                Document.ActiveDocument = new Document();
                ExperimentSettings newSettings = new ExperimentSettings();

                // Show new experiment properties dialog.
                ExperimentSettingsDialog popUpDlg = new ExperimentSettingsDialog();
                if (popUpDlg.ShowDialog() == DialogResult.OK)
                {
                    newSettings = popUpDlg.ExperimentSettings;
                    newSettings.DocumentPath = newExperimentFolder;
                    newSettings.Name         = newExperimentName;
                    newSettings.UpdateVersion();
                }
                else
                {
                    return;
                }

                // Show loading splash screen
                this.bgwLoad.RunWorkerAsync();
                Application.DoEvents();

                Directory.CreateDirectory(newExperimentFolder);
                Directory.CreateDirectory(newSettings.ThumbsPath);
                Directory.CreateDirectory(newSettings.DatabasePath);
                Directory.CreateDirectory(newSettings.SlideResourcesPath);

                Document.ActiveDocument.ExperimentSettings = newSettings;

                string sqliteSource = Application.StartupPath + "\\DataSet\\OgamaDatabaseTemplate.db";
                if (File.Exists(sqliteSource))
                {
                    string sqliteDBDestination = newSettings.DatabaseSQLiteFile;

                    bool overwrite = false;
                    bool skip      = false;
                    if (File.Exists(sqliteDBDestination))
                    {
                        // Hide loading splash screen
                        this.bgwLoad.CancelAsync();

                        if (MessageBox.Show(
                                "Overwrite existing Database File " + Environment.NewLine + sqliteDBDestination,
                                Application.ProductName,
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            overwrite = true;
                        }
                        else
                        {
                            skip = true;
                        }

                        // Show loading splash screen again
                        this.bgwLoad.RunWorkerAsync();
                        Application.DoEvents();
                    }

                    try
                    {
                        if (!skip)
                        {
                            File.Copy(sqliteSource, sqliteDBDestination, overwrite);
                        }
                    }
                    catch (ArgumentException ex)
                    {
                        ExceptionMethods.ProcessErrorMessage(ex.Message);
                    }
                    catch (IOException ex)
                    {
                        ExceptionMethods.ProcessErrorMessage(ex.Message);
                    }
                    catch (NotSupportedException ex)
                    {
                        ExceptionMethods.ProcessErrorMessage(ex.Message);
                    }
                    catch (UnauthorizedAccessException ex)
                    {
                        ExceptionMethods.ProcessErrorMessage(ex.Message);
                    }
                    catch (Exception ex)
                    {
                        ExceptionMethods.HandleException(ex);
                    }

                    if (!Document.ActiveDocument.SaveDocument(newExperimentFilename, this.bgwLoad))
                    {
                        ExceptionMethods.ProcessErrorMessage("Couldn't create document");
                        this.ChangeMenuItems(false);
                        if (Document.ActiveDocument != null)
                        {
                            this.CleanUpDocument();
                        }
                    }
                    else
                    {
                        if (!Document.ActiveDocument.LoadSQLData(this.bgwLoad))
                        {
                            ExceptionMethods.ProcessErrorMessage("Couldn't create document, because database loading failed.");
                            this.ChangeMenuItems(false);
                            if (Document.ActiveDocument != null)
                            {
                                this.CleanUpDocument();
                            }
                        }
                        else
                        {
                            this.contextPanel.Init();
                            RecentFilesList.List.Add(newExperimentFilename);
                        }

                        // Hide loading splash screen
                        this.bgwLoad.CancelAsync();

                        if (Document.ActiveDocument != null)
                        {
                            this.ShowTaskChooseDialog();
                            this.ChangeMenuItems(true);
                        }
                    }
                }
                else
                {
                    // DataBaseSourceFile does not exist in the expected directory
                    string message = "Could not find DataBaseTemplate File:" + Environment.NewLine;
                    message += sqliteSource;
                    message += Environment.NewLine + "Please make sure the File OgamaDatabaseTemplate.db (supplied with the application installation) is in the directory listed before and try again.";

                    ExceptionMethods.ProcessErrorMessage(message);
                }

                // Hide loading splash screen
                this.bgwLoad.CancelAsync();
            }
            else
            {
                // mDocument.ActiveDocument!=null
                string message = "Couldn't create new experiment, because there is one already open." +
                                 Environment.NewLine + "Please close it using File -> Close Experiment.";
                ExceptionMethods.ProcessErrorMessage(message);
            }

            this.Cursor = Cursors.Default;
        }