public override MessageCollection Verify()
{
try
{
var retval = new MessageCollection();
retval.AddRange(base.Verify());
var tableCollection = (TableCollection)this.Object;
#region Check for zero tables
if (tableCollection.Count == 0)
{
retval.Add(MessageTypeConstants.Error, ValidationHelper.ErrorTextNoTables, this);
}
#endregion
#region Check for duplicate names
var nameList = new Hashtable();
foreach (Table table in tableCollection)
{
if (table.Generated)
{
var name = table.Name.ToLower();
if (nameList.ContainsKey(name))
retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextDuplicateName, table.Name), table.Controller);
else
nameList.Add(name, string.Empty);
}
}
#endregion
#region Check for duplication relationship names
var duplicateList = new Dictionary<string, RelationshipChecker>();
foreach (Table table in tableCollection)
{
foreach (Reference reference in table.Relationships)
{
var relation = (Relation)reference.Object;
var childTable = (Table)relation.ChildTableRef.Object;
if (childTable != null)
{
var key = string.Empty;
if (StringHelper.Match(table.Name, childTable.Name, true))
{
if (string.Compare(table.Name, childTable.Name, false) < 0)
key = childTable.Name + "|" + relation.RoleName + "|" + table.Name;
else
key = table.Name + "|" + relation.RoleName + "|" + childTable.Name;
}
else
{
if (string.Compare(table.Name, childTable.Name, false) < 0)
key = table.Name + "|" + relation.RoleName + "|" + childTable.Name;
else
key = childTable.Name + "|" + relation.RoleName + "|" + table.Name;
}
if (duplicateList.ContainsKey(key))
{
if (StringHelper.Match(table.Name, childTable.Name, true))
duplicateList[key].TableList.Add(table);
else duplicateList[key].TableList.Add(childTable);
}
else
{
var rc = new RelationshipChecker(relation);
if (string.Compare(table.Name, childTable.Name, true) < 0)
rc.TableList.Add(childTable);
else rc.TableList.Add(table);
duplicateList.Add(key, rc);
}
}
}
}
foreach (var key in duplicateList.Keys)
{
if (duplicateList[key].TableList.Count > 1)
{
var t1 = ((Table)duplicateList[key].Relationship.ChildTableRef.Object).Name;
var t2 = ((Table)duplicateList[key].Relationship.ParentTableRef.Object).Name;
retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextConflictingRelationships, "'" + t1 + "' and '" + t2 + "'"), duplicateList[key].TableList[0].Controller);
}
}
#endregion
#region Check for duplicate codefacades
if (retval.Count == 0)
{
nameList = new Hashtable();
foreach (Table table in tableCollection)
{
if (table.Generated)
{
var name = table.PascalName.ToLower();
if (nameList.ContainsKey(name))
retval.Add(MessageTypeConstants.Error, string.Format(ValidationHelper.ErrorTextDuplicateCodeFacade, table.Name), table.Controller);
else
nameList.Add(name, string.Empty);
}
}
}
#endregion
return retval;
}
catch (Exception ex)
{
throw;
}
finally
{
Application.DoEvents();
}
}