private static void WriteAddOrRemovePropertyTypes(NodeType origSet, NodeType newSet, List <PropertySet> modifiedPropertySets, SchemaWriter writer)
{
if (origSet == null)
{
// New NodeType: add all property
foreach (PropertyType propType in newSet.PropertyTypes)
{
writer.AddPropertyTypeToPropertySet(propType, newSet, newSet.DeclaredPropertyTypes.Contains(propType));
}
return;
}
bool origSetChanged = false;
// Delete PropertyType if needed
foreach (PropertyType propType in GetTypesToDelete <PropertyType>(origSet.PropertyTypes, newSet.PropertyTypes))
{
writer.RemovePropertyTypeFromPropertySet(propType, newSet);
origSetChanged = true;
}
// Create or modify PropertyTypes
foreach (PropertyType propType in newSet.PropertyTypes)
{
if (NeedToCreate <PropertyType>(origSet.PropertyTypes, propType))
{
bool isDeclared = newSet.DeclaredPropertyTypes.Contains(propType);
writer.AddPropertyTypeToPropertySet(propType, newSet, isDeclared);
origSetChanged = true;
}
else
{
// Modify Property declaration if needed (by the modifications in DeclaredPropertyTypes)
bool newIsDeclared = newSet.DeclaredPropertyTypes.Contains(propType);
bool origIsDeclared = origSet.DeclaredPropertyTypes[propType.Name] != null;
if (newIsDeclared != origIsDeclared)
{
writer.UpdatePropertyTypeDeclarationState(propType, newSet, newIsDeclared);
}
}
}
if (origSetChanged && !modifiedPropertySets.Contains(origSet))
{
modifiedPropertySets.Add(origSet);
}
}