#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 . */ #endregion using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using HeuristicLab.Core; using HeuristicLab.MainForm; using HeuristicLab.Persistence.Core; using HeuristicLab.Persistence.Default.Xml; using HeuristicLab.PluginInfrastructure; using ICSharpCode.SharpZipLib.Zip; namespace HeuristicLab.Problems.DataAnalysis.Views { [View("RegressionSolution View")] [Content(typeof(RegressionSolutionBase), false)] public partial class RegressionSolutionView : DataAnalysisSolutionView { public RegressionSolutionView() { InitializeComponent(); } public new RegressionSolutionBase Content { get { return (RegressionSolutionBase)base.Content; } set { base.Content = value; } } #region drag and drop protected override void itemsListView_DragEnter(object sender, DragEventArgs e) { validDragOperation = false; if (ReadOnly) return; var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat); if (dropData is RegressionProblemData) validDragOperation = true; else if (dropData is IValueParameter) { var param = (IValueParameter)dropData; if (param.Value is RegressionProblemData) validDragOperation = true; } } #endregion protected void importButton_Click(object sender, EventArgs e) { if (Locked || ReadOnly || Content == null) { MessageBox.Show("The Regression Solution is read-only or locked. Save the solution and open it again or use " + "the 'Simplify' button to get a copy of the current solution. Import will then be enabled."); return; } if (openFileDialog.ShowDialog(this) != DialogResult.OK) return; ImportProblemData(openFileDialog.FileName); } protected void ImportProblemData(string filename) { object hlFile = null; try { hlFile = XmlParser.Deserialize(filename); } catch (PersistenceException ex) { ErrorHandling.ShowErrorDialog(this, ex); return; } catch (ZipException ex) { ErrorHandling.ShowErrorDialog(this, ex); return; } IRegressionProblemData problemData = null; if (hlFile is IRegressionProblemData) { problemData = (IRegressionProblemData)hlFile; } else if (hlFile is IRegressionProblem) { problemData = ((IRegressionProblem)hlFile).ProblemData; } else if (hlFile is IRegressionSolution) { problemData = ((IRegressionSolution)hlFile).ProblemData; } if (problemData == null) { ErrorHandling.ShowErrorDialog(this, new NullReferenceException("The problem data is null." + Environment.NewLine + "The .hl-file is no RegressionProblemData or RegressionProblem.")); return; } if (CheckCompatibilityOfProblemData(Content.ProblemData, problemData)) Content.ProblemData = problemData; } protected virtual bool CheckCompatibilityOfProblemData(IRegressionProblemData iRegressionProblemData, IRegressionProblemData problemData) { StringBuilder message = new StringBuilder(); if (!problemData.TargetVariable.Equals(Content.ProblemData.TargetVariable)) message.AppendLine("The target variables are not matching. Old target variable: '" + Content.ProblemData.TargetVariable + "'. New targetvariable: '" + problemData.TargetVariable + "'"); List variables = problemData.InputVariables.Select(x => x.Value).ToList(); foreach (var item in Content.ProblemData.InputVariables.CheckedItems) { if (!variables.Contains(item.Value.Value)) message.AppendLine("Input variable '" + item.Value.Value + "' is not in the new problem data."); } if (message.Length != 0) { ErrorHandling.ShowErrorDialog(this, new InvalidOperationException(message.ToString())); return false; } return true; } } }