#region License Information /* HeuristicLab * Copyright (C) 2002-2013 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 HeuristicLab.Analysis; namespace HeuristicLab.DataPreprocessing { public class HistogramLogic : IHistogramLogic { private ITransactionalPreprocessingData preprocessingData; private DataTable dataTable; public HistogramLogic(ITransactionalPreprocessingData preprocessingData) { this.preprocessingData = preprocessingData; dataTable = new DataTable("Histogram"); FillDataTable(); preprocessingData.Changed += PreprocessingData_Changed; } private void FillDataTable() { IEnumerable variableNames = preprocessingData.VariableNames; foreach (string variableName in variableNames) { IList values = preprocessingData.GetValues(variableName); DataRow row = new DataRow(variableName, "", values); row.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram; dataTable.Rows.Add(row); } } public IEnumerable GetVariableNames() { List doubleVariableNames = new List(); //only return variable names from type double foreach (string variableName in preprocessingData.VariableNames) { if (preprocessingData.IsType(preprocessingData.GetColumnIndex(variableName))) doubleVariableNames.Add(variableName); } return doubleVariableNames; } public DataTable GetDataTable() { return dataTable; } public void RemoveVariable(string name) { dataTable.Rows.Remove(name); } public void AddVariable(string name) { IList values = preprocessingData.GetValues(name); DataRow row = new DataRow(name, "", values); row.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram; dataTable.Rows.Add(row); } public bool VariableIsDisplayed(string name) { foreach (var item in dataTable.Rows) { if (item.Name == name) return true; } return false; } //TODO: refactor: possible code duplication with LineChartLogic void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) { switch (e.Type) { case DataPreprocessingChangedEventType.DeleteColumn: dataTable.Rows.Remove(preprocessingData.GetVariableName(e.Column)); break; case DataPreprocessingChangedEventType.AddColumn: dataTable.Rows.Add(new DataRow(preprocessingData.GetVariableName(e.Column), String.Empty, preprocessingData.GetValues(e.Column))); break; case DataPreprocessingChangedEventType.ChangeColumn: case DataPreprocessingChangedEventType.ChangeItem: dataTable.Rows.Remove(preprocessingData.GetVariableName(e.Column)); dataTable.Rows.Add(new DataRow(preprocessingData.GetVariableName(e.Column), String.Empty, preprocessingData.GetValues(e.Column))); break; case DataPreprocessingChangedEventType.DeleteRow: case DataPreprocessingChangedEventType.AddRow: dataTable.Rows.Clear(); FillDataTable(); break; } } } }