/*********************************************************************/ /// <summary> /// Konstruktor /// </summary> /// <param name="vertexToIdentify">Knoten der Identifiziert werden /// soll</param> public IdentificationWindow(CTreeVertex vertexToIdentify, bool bInteractiveView) { // Sichergehen das nur ein Identifikationsfenster geöffnet ist checkSingleIndentificationWindow(); InitializeComponent(); mVertexToIdentify = vertexToIdentify; mTableEntryList = mBusinessLogic.getFilterdTableData(mVertexToIdentify); filteredDataGrid.DataContext = this; // die Spalten der Tabelle hinzufügen, abhängig von den Verwendeten Typen List <CAttributeType> attrTypeList = mBusinessLogic.getAttributeTypes(); foreach (CAttributeType type in attrTypeList) { if (type.Used == true) { DataGridTextColumn column = new CTableColumn(type); filteredDataGrid.Columns.Add(column); } } highlightSelectedAttributeColumn(); // Nur für die Interaktive Ansicht soll der Button eingeblendet werden showButtonBar(bInteractiveView); }
/*********************************************************************/ /// <summary> /// Konstruktor, Initialisierung der Komponenten /// </summary> public MainWindow() { InitializeComponent(); mBusinessLogic = CBusinessLogic.getInstance(); mBusinessLogic.init(); mBusinessLogic.registerWindow(this); mTableEntryList = mBusinessLogic.getAllTableData(); graph.DataContext = this; mGraph = mBusinessLogic.getGraph(); GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters layoutParameter = new GraphSharp.Algorithms.Layout.Simple.Tree.SimpleTreeLayoutParameters(); layoutParameter.LayerGap = 50; layoutParameter.VertexGap = 50; layoutParameter.Direction = LayoutDirection.TopToBottom; LayoutAlgorithmType = "LinLog"; graph.LayoutParameters = layoutParameter; DataContext = this; setTreeViewsEnabled(false); setViewVisibility(E_VIEW.E_TABLE_VIEW); }
/*********************************************************************/ /// <summary> /// Ließt alle Einträge der Tabelle aus und gibt diese zurück /// !!Zurzeit TestDATA!!! /// </summary> /// <returns>Liste mit allen Tabelleneinträgen</returns> public CTableEntryList getAllEntries() { CTableEntryList entryList = new CTableEntryList(); #region Engin Test /*// Fake Daten um die GUI provisorisch zu testen // * // BEGIN // * //Attributetypen erstellen * //CAttributeType attribute1 = new CAttributeType("erstesAttribute", E_DATATYPE.E_STRING, false); * //CAttributeType attribute2 = new CAttributeType("2tes Attribute", E_DATATYPE.E_FLOAT, true); * * CAttributeType attribute1 = new CAttributeType(CTableConstants.ATTR_X + "1"); * CAttributeType attribute2 = new CAttributeType(CTableConstants.ATTR_X + "2"); * attribute1.setUsed("erstesAttribute", E_DATATYPE.E_STRING, false); * attribute2.setUsed("2tes Attribute", E_DATATYPE.E_FLOAT, true); * * //AttributeValues erstellen * * CAttributeValue value1 = new CAttributeValue(attribute1, "index", "value"); * CAttributeValue value2 = new CAttributeValue(attribute2, "index2", "1.2"); * * //Entry erstellen * * CTableEntry entry1 = new CTableEntry("1"); * entry1.addValue(value1); * entry1.addValue(value2); * * CTableEntry entry2 = new CTableEntry("2"); * entry2.addValue(value1); * entry2.addValue(value2); * * * //EntryList erstellen * * entryList.Add(entry1); * entryList.Add(entry2); * * return entryList; * //**ENDE**/ #endregion string sSQLCommand = "SELECT * FROM " + CTableConstants.TABLE_ATTRIBUTES; SQLiteDataReader reader; if (mConnection.sqlRequestStatement(sSQLCommand, out reader) == true) { CTableEntry tableEntry; while (getNextTableEntry(reader, out tableEntry) == true) { entryList.Add(tableEntry); } closeReader(reader); } return(entryList); }
public void SizeTest() { CTableEntryList list = new CTableEntryList(); for (int i = 1; i <= 10; i++) { list.addEntry(new CTableEntry(i.ToString())); Assert.IsTrue(list.Size == i); } }
public void addEntryTest() { CTableEntryList list = new CTableEntryList(); for (int i = 0; i < 10; i++) { CTableEntry entry = new CTableEntry(i.ToString()); list.addEntry(entry); } Assert.IsTrue(list.Size == 10); }
/*********************************************************************/ /// <summary> /// gibt ein Liste mit Datensätzen zurück die von dem übergebenen /// Knoten repräsentiert werden. /// </summary> /// <param name="vertexToIdentify">Knoten der Identifiziert werden /// soll</param> /// <returns>Liste mit Datensätzen des Knotens</returns> public CTableEntryList getFilteredTableData(CTreeVertex vertexToIdentify) { if (vertexToIdentify == null) { return(null); } // sollte der Knoten kein Parent-Knoten haben (Root-Knoten) geben // wir alle Einträge zurück if (vertexToIdentify.ParentVertex == null) { return(getAllEntries()); } string sSqlCommand = "SELECT * FROM " + CTableConstants.TABLE_ATTRIBUTES + " WHERE "; // Den SQL-Befehl um die Filter erweitert. Dabei wird vom zu übergebenen Knoten while (vertexToIdentify.ParentVertex != null) { CTreeVertex parent = vertexToIdentify.ParentVertex; CTreeEdge parentEdge = vertexToIdentify.ParentEdge; sSqlCommand += parent.AttributeType.InternalName; sSqlCommand += "="; sSqlCommand += "'" + parentEdge.EdgeValue + "'"; // den Nächsten Knotne auswählen vertexToIdentify = parent; if (vertexToIdentify.ParentVertex != null) { sSqlCommand += " AND "; } } SQLiteDataReader reader; CTableEntryList entryList = new CTableEntryList(); if (mConnection.sqlRequestStatement(sSqlCommand, out reader) == true) { CTableEntry tableEntry; while (getNextTableEntry(reader, out tableEntry) == true) { entryList.Add(tableEntry); } closeReader(reader); } return(entryList); }
/*********************************************************************/ /// <summary> /// Wird aufgerufen wenn eine MenuItem geklickt wird. /// </summary> /// <param name="sender">Welcher Button geklickt wurde</param> /// <param name="e">"irgendwelche Parameter" (Arne)</param> private void MenuItem_Click(object sender, RoutedEventArgs e) { // Programm Beenden Button if (sender == exitApplication) { Application.Current.Shutdown(); } // Datei Öffnen Button else if (sender == openFile) { OpenFileDialog openDlg = new OpenFileDialog(); openDlg.Filter = "CSV-Dateiein (*.csv)|*.csv"; openDlg.Title = "Bitte wählen Sie eine CSV-Datei aus."; if (openDlg.ShowDialog() == true) { this.Cursor = Cursors.Wait; datagrid1.Columns.Clear(); List<CAttributeType> addedColumns = mBusinessLogic.openCSVFile(openDlg.FileName); foreach (CAttributeType columnData in addedColumns) { addDatagridColumn(columnData); } mTableEntryList = mBusinessLogic.getAllTableData(); this.datagrid1.ItemsSource = mTableEntryList; // http://social.msdn.microsoft.com/Forums/en/wpf/thread/1b694f75-7621-4c88-8055-6c31c601c87f // wir haben eine neue Tabelle, also ist noch kein Zielattribut gesetzt // und man soll nicht auf die Baumansichten wechseln setTreeViewsEnabled(false); viewToggleButton_Checked(viewTableBtn, null); this.Cursor = Cursors.Arrow; } } // Datei Speichern Button else if (sender == saveFile) { SaveFileDialog saveDlg = new SaveFileDialog(); saveDlg.Filter = "CSV-Dateiein (*.csv)|*.csv"; saveDlg.Title = "Bitte wählen Sie eine CSV-Datei unter der sie die Tabelle speichern möchten."; if (saveDlg.ShowDialog() == true) { mBusinessLogic.saveCSVFile(saveDlg.FileName); } } }
/*********************************************************************/ /// <summary> /// Schreibt den Inhalt der Datenbank in die übergebene CSV-Datei /// </summary> /// <param name="csvFile">Stream zum Schreiben in die CSV-Datei</param> private void writeDatabaseData(StreamWriter csvFile) { CTableEntryList entryList = mDBAccess.getAllEntries(); if (entryList.Count > 0) { // zuerst die Namen der Spalten einfügen. Dazu vom einem Element string sLine = getAttributeNameLine(entryList); csvFile.WriteLine(sLine); foreach (CTableEntry entry in entryList) { csvFile.WriteLine(getCSVLineFromEntry(entry)); } } }
public void testWriteFile() { IDBDataReader dbAccess = new CDBDataReader(); dbAccess.clearDatabase(); dbAccess.addColumn("Col1"); dbAccess.addColumn("Col2"); CTableEntry entry = dbAccess.insertEntry(); entry[0].TableValue = "entry1"; entry[1].TableValue = "0.01"; entry = dbAccess.insertEntry(); entry[0].TableValue = "entry2"; entry[1].TableValue = "0.02"; entry = dbAccess.insertEntry(); entry[0].TableValue = "entry3"; entry[1].TableValue = "0.03"; CCSVWriter csvWriter = new CCSVWriter(dbAccess); string exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string csvFile = exePath + TEST_CSV_FILE_PATH; File.Delete(csvFile); csvWriter.saveDatabaseToCSV(csvFile); // zum prüfen braucen wir den Reader CCSVReader csvReader = new CCSVReader(dbAccess); csvReader.insertFileDataToDatabase(csvFile); CTableEntryList entrys = dbAccess.getAllEntries(); Assert.IsTrue(entrys.Count == 3); Assert.IsTrue(entrys[0][0].TableValue == "entry1"); Assert.IsTrue(entrys[0][1].TableValue == "0.01"); Assert.IsTrue(entrys[1][0].TableValue == "entry2"); Assert.IsTrue(entrys[1][1].TableValue == "0.02"); Assert.IsTrue(entrys[2][0].TableValue == "entry3"); Assert.IsTrue(entrys[2][1].TableValue == "0.03"); }
private void updateVertexClassCount(CTreeVertex vertex, Logic.CTableLogic tableLogic) { CTableEntryList entryList = tableLogic.getFilteredTableData(vertex); CAttributeType targetAttribute = getTargetAttribute(tableLogic); int[] counts = new int[2]; counts[CTreeVertex.YES_INDEX] = 0; counts[CTreeVertex.NO_INDEX] = 0; if (targetAttribute != null) { bool bFirst = true; int targetAttributeIndex = 0; foreach (CTableEntry entry in entryList) { if (bFirst == true) { for (int i = 0; i < entry.Size; i++) { if (entry[i].AttributeType.InternalName == targetAttribute.InternalName) { targetAttributeIndex = i; } } bFirst = false; } // TODO Bei Zielattr nicht nur Binär Verzweigen if (entry[targetAttributeIndex].TableValue == "j") { counts[CTreeVertex.YES_INDEX]++; } else if (entry[targetAttributeIndex].TableValue == "n") { counts[CTreeVertex.NO_INDEX]++; } } } vertex.CountObjectsPerClass = counts; }
public void ItemTestIndex() { CTableEntryList list = new CTableEntryList(); CAttributeType attrType = new CAttributeType(0); attrType.setUsed("asd", E_DATATYPE.E_STRING, false); for (int i = 0; i < 10; i++) { CTableEntry entry = new CTableEntry(i.ToString()); entry.addValue(new CAttributeValue(attrType, i.ToString(), i.ToString(), null)); list.addEntry(entry); } CTableEntry singleEntry; singleEntry = list[5]; Assert.IsTrue(singleEntry.Size == 1); Assert.IsTrue(singleEntry[0].EntryIndex == "5"); Assert.IsTrue(singleEntry[0].StringValue == "5"); }
public void testReadFile() { string exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string csvFile = exePath + TEST_CSV_FILE_PATH; IDBDataReader dbAccess = new CDBDataReader(); CCSVReader csvReader = new CCSVReader(dbAccess); csvReader.insertFileDataToDatabase(csvFile); CTableEntryList entrys = dbAccess.getAllEntries(); Assert.IsTrue(entrys.Count == 8); Assert.IsTrue(entrys[0][0].TableValue == "1"); Assert.IsTrue(entrys[0][1].TableValue == "2"); Assert.IsTrue(entrys[0][3].TableValue == "4"); Assert.IsTrue(entrys[4][0].TableValue == "5"); Assert.IsTrue(entrys[7][0].TableValue == "8"); Assert.IsTrue(entrys[7][3].TableValue == "11"); }
/*********************************************************************/ /// <summary> /// Baut die Zeile mit den Attributnamen zusammen, damit diese in die /// CSV-Datei eingefügt werden kann. /// </summary> /// <param name="entryList">Liste mit allen Einträgen</param> /// <returns>fertige Zeile zum einfügen in die CSV-Datei</returns> private string getAttributeNameLine(CTableEntryList entryList) { string sLine = ""; CTableEntry firstEntry = entryList[0]; bool bSkipSeperator = true; foreach (CAttributeValue value in firstEntry) { // wir tragen nur Attribute ein die benutzt werden if (value.AttributeType.Used == true) { if (bSkipSeperator == false) { sLine += CCSVReader.CSV_SEPERATOR; } bSkipSeperator = false; // den Namen eintragen sLine += value.AttributeType.Name; } } return(sLine); }
public void CTableEntryListConstructorTest() { CTableEntryList target = new CTableEntryList(); Assert.IsTrue(target.Size == 0); }