/// <summary> /// Post-parse validations /// </summary> /// <param name="vd"></param> public void Validate() { //TODO: walk through collection to make sure that cross relations are correct. foreach (DatabaseElement database in databases) { foreach (SqlEntityElement sqlentity in database.SqlEntities) { if (sqlentity.GetPrimaryKeyColumns().Count == 0 && (sqlentity.GenerateDeleteStoredProcScript || sqlentity.GenerateUpdateStoredProcScript || sqlentity.GenerateInsertStoredProcScript)) { this.AddValidationMessage(ParserValidationMessage.NewWarning("SqlEntity " + sqlentity.Name + " does not have any primary key columns defined.")); } if (!sqlentity.HasUpdatableColumns() && sqlentity.GenerateUpdateStoredProcScript) { this.AddValidationMessage(ParserValidationMessage.NewWarning("SqlEntity " + sqlentity.Name + " does not have any editable columns and does not have generateupdatestoredprocscript=\"false\" specified.")); } } } // make sure that all columns are represented in entities foreach (EntityElement entity in entities) { if (entity.SqlEntity.Name.Length > 0) { foreach (ColumnElement column in entity.SqlEntity.Columns) { if (entity.FindFieldByColumnName(column.Name) == null) { this.AddValidationMessage(ParserValidationMessage.NewWarning("could not find field representing column " + column.Name + " in entity " + entity.Name + ".")); } } } } }
/// <summary> /// validates xml file against embedded schema file /// </summary> /// <param name="filename"></param> private void ValidateSchema(String filename) { try { ResourceManager rm = new ResourceManager(); ValidationEventHandler veh = new ValidationEventHandler(SchemaValidationEventHandler); XmlSchema xsd = XmlSchema.Read(rm.ConfigSchema, veh); XmlTextReader xml = XIncludeReader.GetXmlTextReader(filename); XmlValidatingReader vr = new XmlValidatingReader(xml); vr.Schemas.Add(xsd); vr.ValidationType = ValidationType.Schema; // and validation errors events go to... vr.ValidationEventHandler += veh; // wait until the read is over, its occuring in a different thread - kinda like // when your walking to get a cup of coffee and your mind is in Hawaii while (vr.Read()) { ; } vr.Close(); } catch (UnauthorizedAccessException ex) { //dont have access permission IsValid = false; WriteToLog(ParserValidationMessage.NewError(ex.Message).ToString()); } catch (Exception ex) { //and other things that could go wrong IsValid = false; WriteToLog(ParserValidationMessage.NewError(ex.Message).ToString()); } }
// protected AbstractParser(ParserElement parser, ConfigurationElement options, XmlDocument doc) { // this.parser = parser; // this.options = options; // sqltypes = SqlTypeElement.ParseFromXml(doc, this); // types = TypeElement.ParseFromXml(options, doc, this); // } public void AddValidationMessage(ParserValidationMessage message) { if (message.Severity.Equals(ParserValidationSeverity.ERROR)) { isValid = false; } errors.Add(message); }
/// <summary> /// Event handler for parser validation events /// </summary> /// <param name="args"></param> protected void ParserValidationEventHandler(ParserValidationMessage message) { if (message.Severity.Equals(ParserValidationSeverity.ERROR)) { IsValid = false; } errors.Add(message); }
/// <summary> /// handle XML validation errors /// </summary> /// <param name="sender"></param> /// <param name="args"></param> internal void SchemaValidationEventHandler(object sender, ValidationEventArgs args) { if (args.Severity.Equals(XmlSeverityType.Error)) { IsValid = false; WriteToLog(ParserValidationMessage.NewError(args.Message).ToString()); } else { WriteToLog(ParserValidationMessage.NewWarning(args.Message).ToString()); } }