/// <summary> /// Returns if the given CSPBrushParam is equal to this one. /// </summary> /// <param name="param"></param> /// <returns></returns> public bool equals(CSPBrushParam param) { if (!this.name.Equals(param.name)) { return(false); } if (!this.typeName.Contains("BLOB")) { if (!this.typeName.Equals(param.typeName)) { return(false); } return(this.value.Equals(param.value)); } byte[] bytes = (byte[])this.value; byte[] bytesParam = (byte[])param.value; int len = bytes.GetLength(0); int lenParam = bytesParam.GetLength(0); if (len != lenParam) { return(false); } for (int i = 0; i < len; i++) { if (bytes[i] != bytesParam[i]) { return(false); } } return(true); }
private void appendImages(CSPBrushParam param) { if (param.Name.ToLower().Contains("effector")) { List <Bitmap> images = param.getEffectorImages(" "); if (images != null && images.Count > 0) { // Insert RTF string processImagesUsingRtf(images); } } }
public int Compare(CSPBrushParam x, CSPBrushParam y) { return(((CSPBrushParam)x).name.CompareTo(((CSPBrushParam)y).name)); }
/// <summary> /// Process a database. /// </summary> /// <param name="fileType">Determines if databse 1 or database 2</param> /// <param name="print">Whether to write to textBoxInfo.</param> private void processDatabase(FileType fileType, bool print) { int nDatabase = 1; TextBox textBoxDatabase = null; TextBox textBoxBrush = null; RadioButton radioButtonVariant = null; List <CSPBrushParam> paramsList = null; CSPBrushParam param = null; string info = null; switch (fileType) { case FileType.Database1: nDatabase = 1; textBoxDatabase = textBoxDatabase1; textBoxBrush = textBoxBrush1; radioButtonVariant = radioButtonVariant1; break; case FileType.Database2: nDatabase = 2; textBoxDatabase = textBoxDatabase2; textBoxBrush = textBoxBrush2; radioButtonVariant = radioButtonVariant2; break; default: Utils.Utils.errMsg("Invalid fileType (" + fileType + ") for processDatabase"); return; } textBoxInfo.Clear(); paramsList = new List <CSPBrushParam>(); info = ""; String name = ""; string nodeName = null; int nodeVariantId = 0, nodeInitVariantId = 0; int nCols = 0; int nNull = 0; name = textBoxDatabase.Text; if (name == null || name.Length == 0) { registerOutput(fileType, info, paramsList); Utils.Utils.errMsg("Database " + nDatabase + " is not defined"); return; } if (!File.Exists(name)) { registerOutput(fileType, info, paramsList); Utils.Utils.errMsg(name + " does not exist"); return; } // Get the selected brush name string brushName = textBoxBrush.Text; if (brushName == null | brushName.Length == 0) { registerOutput(fileType, info, paramsList); Utils.Utils.errMsg("Brush not specified"); return; } SQLiteConnection conn = null; SQLiteDataReader dataReader; DateTime modTime = File.GetLastWriteTime(name); info += name + NL; info += "Brush: " + brushName + NL; info += "Using: " + (radioButtonVariant.Checked ? "NodeVariantID" : "NodeInitVariantID") + NL; info += "Modified: " + modTime + NL; // Find the node try { string openName = DatabaseUtils.getSqliteOpenName(name); using (conn = new SQLiteConnection("Data Source=" + openName + ";Version=3;Read Only=True;")) { conn.Open(); SQLiteCommand command; command = conn.CreateCommand(); // Need to replace single quotes by double // Don't want NodeVariantID or NodeInitVariantID = 0 command.CommandText = "SELECT NodeName, NodeVariantId, " + "NodeInitVariantId FROM Node WHERE NodeName='" + brushName.Replace("'", "''") + "'" + " AND NodeVariantID != 0 AND NodeInitVariantID != 0"; List <NodeInfo> items = new List <NodeInfo>(); using (dataReader = command.ExecuteReader()) { if (!dataReader.HasRows) { Utils.Utils.errMsg("No matching rows looking for " + brushName); registerOutput(fileType, info, paramsList); return; } while (dataReader.Read()) { nodeName = dataReader.GetString(0); nodeVariantId = dataReader.GetInt32(1); nodeInitVariantId = dataReader.GetInt32(2); items.Add(new NodeInfo(nodeName, nodeVariantId, nodeInitVariantId)); } } if (items.Count == 0) { Utils.Utils.errMsg("Did not find any matches for " + brushName); registerOutput(fileType, info, paramsList); return; } if (items.Count == 1) { nodeName = items[0].NodeName; nodeVariantId = items[0].NodeVariantId; nodeInitVariantId = items[0].NodeInitVariantId; } else { // Found more than one matching item, prompt for which one List <string> itemsList = new List <string>(); foreach (NodeInfo nodeInfo in items) { itemsList.Add(nodeInfo.Info()); } MultiChoiceListDialog dlg = new MultiChoiceListDialog(itemsList); switch (fileType) { case FileType.Database1: dlg.Text = "Brush 1 Ambiguity"; break; case FileType.Database2: dlg.Text = "Brush 2 Ambiguity"; break; default: dlg.Text = "Brush Ambiguity"; break; } // Note that the ListBox has be set to have SelectionMode=One, // not MultiExtended if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { List <string> selectedList = dlg.SelectedList; if (selectedList == null || selectedList.Count == 0) { Utils.Utils.errMsg("No items selected"); registerOutput(fileType, info, paramsList); return; } // There should be only one entry string item = selectedList[0]; nodeName = null; foreach (NodeInfo nodeInfo in items) { if (item.Equals(nodeInfo.Info())) { nodeName = nodeInfo.NodeName; nodeVariantId = nodeInfo.NodeVariantId; nodeInitVariantId = nodeInfo.NodeInitVariantId; } } } else { info += "Cancelled" + NL; registerOutput(fileType, info, paramsList); return; } } // These should not happen if (nodeName == null) { Utils.Utils.errMsg("Failed to determine which brush"); registerOutput(fileType, info, paramsList); } if (!nodeName.Equals(brushName)) { Utils.Utils.errMsg("Looking for " + brushName + ", found " + nodeName); registerOutput(fileType, info, paramsList); return; } if (nodeVariantId == 0) { Utils.Utils.errMsg(brushName + " is not a brush (No NodeVariantId)"); registerOutput(fileType, info, paramsList); return; } } } catch (Exception ex) { Utils.Utils.excMsg("Error finding " + brushName, ex); registerOutput(fileType, info, paramsList); return; } // Find the variant conn = null; try { string openName = DatabaseUtils.getSqliteOpenName(name); using (conn = new SQLiteConnection("Data Source=" + openName + ";Version=3;Read Only=True;")) { conn.Open(); SQLiteCommand command; command = conn.CreateCommand(); int variantId = (radioButtonVariant.Checked) ? nodeVariantId : nodeInitVariantId; command.CommandText = "SELECT * FROM Variant WHERE VariantID=" + variantId; using (dataReader = command.ExecuteReader()) { if (!dataReader.HasRows) { Utils.Utils.errMsg("No matching rows looking for VariantID = " + variantId); registerOutput(fileType, info, paramsList); return; } dataReader.Read(); nCols = dataReader.FieldCount; if (print) { appendInfo(info + NL); } for (int i = 0; i < nCols; i++) { if (dataReader.IsDBNull(i)) { nNull++; continue; } param = new CSPBrushParam(dataReader.GetName(i), dataReader.GetDataTypeName(i), dataReader.GetValue(i)); param.Value = dataReader.GetValue(i); // appendInfo(param.info()); //} paramsList.Add(param); } } } } catch (Exception ex) { Utils.Utils.excMsg("Error finding VariantID=" + nodeVariantId, ex); registerOutput(fileType, info, paramsList); return; } info += "Columns: " + nCols + " Null: " + nNull + " Non-Null: " + (nCols - nNull) + NL; registerOutput(fileType, info, paramsList); }
/// <summary> /// Compares the two files and displays the output. /// </summary> private void compare() { // Process 1 processDatabase(FileType.Database1, false); if (params1.Count == 0) { Utils.Utils.errMsg("Did not get params for Brush 1"); return; } // Process 2 processDatabase(FileType.Database2, false); if (params2.Count == 0) { Utils.Utils.errMsg("Did not get params for Brush 2"); return; } // Write heading to textBoxInfo textBoxInfo.Text = "1: "; printHeading(FileType.Database1); appendInfo("2: "); printHeading(FileType.Database2); // Look for items in 2 that are in 1 bool found; CSPBrushParam foundParam = null; foreach (CSPBrushParam param1 in params1) { found = false; // Look for the same name foreach (CSPBrushParam param2 in params2) { if (param1.Name.Equals(param2.Name)) { found = true; foundParam = param2; break; } } if (!found) { appendInfo(param1.Name + NL); appendInfo(" 1: " + param1.getValueAsString(" ")); appendImages(param1); appendInfo(" 2: Not found in 2" + NL); continue; } if (found && !param1.equals(foundParam)) { appendInfo(param1.Name + NL); appendInfo(" 1: " + param1.getValueAsString(" ")); appendImages(param1); appendInfo(" 2: " + foundParam.getValueAsString(" ")); appendImages(foundParam); } } // Look for items in 2 that are not in 1 foreach (CSPBrushParam param2 in params2) { found = false; // Look for the same name foreach (CSPBrushParam param1 in params1) { if (param1.Name.Equals(param2.Name)) { found = true; break; } } if (!found) { appendInfo(param2.Name + NL); appendInfo(" 1: Not found in 1" + NL); appendInfo(" 2: " + param2.getValueAsString(" ")); appendImages(param2); continue; } } }