Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.DataImporter/HeuristicLab.DataImporter.Data/DataSetState.cs @ 6133

Last change on this file since 6133 was 6133, checked in by gkronber, 13 years ago

#1471: imported generic parts of DataImporter from private code base

File size: 2.9 KB
Line 
1using System;
2
3namespace HeuristicLab.DataImporter.Data {
4  [Flags]
5  public enum ColumnGroupState {
6    None = 0,
7    Active = 1,
8    ColumnSelected = 2 | Active,
9    DoubleColumnSelected = 4 | ColumnSelected,
10    DateTimeColumnSelected = 8 | ColumnSelected,
11    StringColumnSelected = 16 | ColumnSelected,
12    ProgrammableColumnSelected = 32 | ColumnSelected,
13    AnySelectedColumnContainsNull = 64 | ColumnSelected,
14    Sorted = 128 | Active,
15    AnySelectedColumnNotSorted = 256 | Sorted | ColumnSelected
16  }
17
18  public class DataSetState {
19    public DataSetState(int activeColumnGroups, ColumnGroupState state)
20      : this(activeColumnGroups, -1, state) {
21    }
22
23    public DataSetState(int activeColumnGroups, int selectedColumns, ColumnGroupState state) {
24      this.selectedColumns = selectedColumns;
25      this.activeColumnGroups = activeColumnGroups;
26      this.state = state;
27    }
28
29    private int activeColumnGroups;
30    public int ActiveColumnGroups {
31      get { return this.activeColumnGroups; }
32    }
33
34    private int minActiveColumnGroups = int.MaxValue;
35    public int MinActiveColumnGroups {
36      get { return minActiveColumnGroups; }
37      set { minActiveColumnGroups = value; }
38    }
39
40    //only meaningful if activeColumnGroups == 1
41    private int selectedColumns;
42    public int SelectedColumns {
43      get { return activeColumnGroups == 1 ? this.selectedColumns : -1; } //throw Exception instead of return -1
44      set { this.selectedColumns = value; }
45    }
46
47    private ColumnGroupState state;
48    public ColumnGroupState State {
49      get { return this.state; }
50    }
51
52    public void AddColumnGroupState(ColumnGroupState state) {
53      if (state == ColumnGroupState.None)
54        return;
55      activeColumnGroups++;
56      if (this.state == ColumnGroupState.None)
57        this.state = state;
58      else
59        this.state &= state;
60    }
61
62    public bool Enabled(DataSetState other) {
63      if (this.activeColumnGroups == 0)
64        return true;
65      else if (other.activeColumnGroups != this.activeColumnGroups)
66        if (other.activeColumnGroups >= minActiveColumnGroups) return true;
67        else return false;
68      else if (SelectedColumns != -1 && other.SelectedColumns != SelectedColumns)
69        return false;
70      return (this.state & other.state) == this.state;
71    }
72
73    public override bool Equals(object obj) {
74      if (obj == this)
75        return true;
76      else if(obj is DataSetState) {
77        DataSetState other = (DataSetState)obj;
78        return
79          other.activeColumnGroups == this.activeColumnGroups &&
80          other.state == this.state &&
81          this.selectedColumns == other.selectedColumns;
82      }
83      return false;
84    }
85
86    public override int GetHashCode() {
87      return this.activeColumnGroups.GetHashCode() ^ this.state.GetHashCode() ^ this.selectedColumns.GetHashCode();
88    }
89
90  }
91}
Note: See TracBrowser for help on using the repository browser.