private void VerifySyntaxes(AttributeContext attrContext, IObjectOnServer serverObject)
        {
            switch (attrContext.syntax.Name.ToString())
            {
            //Verifying the attributes for IntegerSyntax.
            case "IntegerSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.9" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "2")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    integer = true;
                }
                break;

            //Verifying the attributes for BooleanSyntax.
            case "BooleanSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.8" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "1")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    boolean = true;
                }
                break;

            //Verifying the attributes for EnumerationSyntax.
            case "EnumerationSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.9" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "10")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    enumeration = true;
                }
                break;

            //Verifying the attributes for LargeIntegerSyntax.
            case "LargeIntegerSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.16" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "65")
                {
                    DataSchemaSite.Log.Add(LogEntryKind.Warning,
                                           "Syntax for '{0}' is not as expected", serverObject.Name);
                    largeInt = true;
                }
                break;

            //Verifying the attributes for ObjectAccessPointSyntax.
            case "ObjectAccessPointSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.14" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "1.3.12.2.1011.28.0.702")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    accessPoint = true;
                }
                break;

            //Verifying the attributes for ObjectDNStringSyntax.
            case "ObjectDNStringSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.14" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "1.2.840.113556.1.1.1.12")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    DNString = true;
                }
                break;

            //Verifying the attributes for ObjectORNameSyntax.
            case "ObjectORNameSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.7" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "2.6.6.1.2.5.11.29")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    ORName = true;
                }
                break;

            //Verifying the attributes for ObjectDNBinarySyntax.
            case "ObjectDNBinarySyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.7" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "1.2.840.113556.1.1.1.11")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    DNBinary = true;
                }
                break;

            //Verifying the attributes for ObjectDSDNSyntax.
            case "ObjectDSDNSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.1" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "1.3.12.2.1011.28.0.714")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    DSDN = true;
                }
                break;

            //Verifying the attributes for ObjectPresentationAddressSyntax.
            case "ObjectPresentationAddressSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.13" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "1.3.12.2.1011.28.0.732")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    preAddr = true;
                }
                break;

            //Verifying the attributes for ObjectReplicaLinkSyntax.
            case "ObjectReplicaLinkSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.10" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "127" ||
                    serverValueOMObjectClass.UnderlyingValues[0].ToString() != "1.2.840.113556.1.1.1.6")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    repLink = true;
                }
                break;

            //Verifying the attributes for StringCaseSyntax.
            case "StringCaseSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.3" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "27")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    strCase = true;
                }
                break;

            //Verifying the attributes for StringIA5Syntax.
            case "StringIA5Syntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.5" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "22")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    strIA5 = true;
                }
                break;

            //Verifying the attributes for StringNTSecDescSyntax.
            case "StringNTSecDescSyntax":
                if (
                    serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.15" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "66")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    NTSecDesc = true;
                }
                break;

            //Verifying the attributes for StringNumericSyntax.
            case "StringNumericSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.6" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "18")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    numeric = true;
                }
                break;

            //Verifying the attributes for StringObjectIdentifierSyntax.
            case "StringObjectIdentifierSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.2" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "6")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    objIdentifier = true;
                }
                break;

            //Verifying the attributes for StringOctetSyntax.
            case "StringOctetSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.10" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "4")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    octet = true;
                }
                break;

            //Verifying the attributes for StringPrintableSyntax.
            case "StringPrintableSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.5" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "19")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    printable = true;
                }
                break;

            //Verifying the attributes for StringSidSyntax.
            case "StringSidSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.17" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "4")
                {
                    DataSchemaSite.Log.Add(LogEntryKind.Warning, "Syntax for '{0}' is not as expected",
                                           serverObject.Name);
                    sid = true;
                }
                break;

            //Verifying the attributes for StringTeletexSyntax.
            case "StringTeletexSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.4" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "20")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    teletext = true;
                }
                break;

            //Verifying the attributes for StringUnicodeSyntax.
            case "StringUnicodeSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.12" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "64")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    unicode = true;
                }
                break;

            //Verifying the attributes for StringUTCTimeSyntax.
            case "StringUTCTimeSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.11" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "23")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    UTCTime = true;
                }
                break;

            //Verifying the attributes for StringGeneralizedTimeSyntax.
            case "StringGeneralizedTimeSyntax":
                if (serverValueAttrSyntax.UnderlyingValues[0].ToString() != "2.5.5.11" ||
                    serverValueOMSyntax.UnderlyingValues[0].ToString() != "24")
                {
                    DataSchemaSite.Log.Add(
                        LogEntryKind.Warning,
                        "Syntax for '{0}' is not as expected",
                        serverObject.Name);
                    genTime = true;
                }
                break;

            //Verifying the attribute extendedCharsAllowed.
            default:
                if (
                    attrContext.syntax.Name.ToString() != "StringIA5Syntax" &&
                    attrContext.syntax.Name.ToString() != "StringNumericSyntax" &&
                    attrContext.syntax.Name.ToString() != "StringTeletexSyntax" &&
                    attrContext.syntax.Name.ToString() != "StringPrintableSyntax")
                {
                    if (attributeObject.attributes.Keys.Contains("extendedcharsallowed"))
                    {
                        extCharsAllow = true;
                    }
                }
                break;
            }
        }
        /// <summary>
        /// CompareObjects method is used to compare the objects from server and the model.
        /// </summary>
        /// <param name="modelObject">Model Object</param>
        /// <param name="serverObject">Server Object</param>
        /// <param name="hasErrors">Error tracking variable</param>
        /// <returns>Void</returns>
        void CompareObjects(ModelObject modelObject, IObjectOnServer serverObject, ref bool hasErrors)
        {
            foreach (string attr in modelObject.attributes.Keys)
            {
                //SDs for DomainDNS and SamDomain differ because of an ACE that is added during DCPromo using the expanded binary SID instead of its string representation of “RO” to maintain compatibility with downlevel OS’s.
                //Because of this, the SDs represented in the TD will be logically consistent with the SD in the server but will never be 100% identical.
                if ((attr == "defaultsecuritydescriptor") &&
                    ((serverObject.Name == "domainDNS") ||
                     (serverObject.Name == "msSPP-ActivationObject") ||
                     (serverObject.Name == "msSPP-ActivationObjectsContainer") ||
                     (serverObject.Name == "samDomain")))
                {
                    continue;
                }

                //skip possibleinferiors temporarily since the calculation of possibleinferiors seems wrong
                if (attr == "possibleinferiors")
                {
                    continue;
                }

                Value value = modelObject[attr];
                if (!serverObject.Properties.ContainsKey(attr))
                {
                    DataSchemaSite.Log.Add(LogEntryKind.Warning, "attribute '{0}' must be in server object '{1}'", attr, serverObject.Name);
                    hasErrors = true;
                    //TDI 67172 is identified as a product bug and will be fixed in Blue+1
                    if (!adAdapter.TDI67172Fixed)
                    {
                        if ((serverObject.Name == "msDS-GeoCoordinatesAltitude") ||
                            (serverObject.Name == "msDS-GeoCoordinatesLatitude") ||
                            (serverObject.Name == "msDS-GeoCoordinatesLongitude"))
                        {
                            hasErrors = false;
                        }
                    }
                    continue;
                }
                AttributeContext context;
                if (!dcModel.TryGetAttributeContext(attr, out context))
                {
                    // Inconsistency should be already reported
                    continue;
                }

                //Remove the line break in the value of defaultsecuritydescriptor and defaultobjectcategory
                if ((attr == "defaultsecuritydescriptor") ||
                    (attr == "defaultobjectcategory"))
                {
                    value = new Value(context.syntax, value.UnderlyingValues[0].ToString().Replace("\r", String.Empty));
                }
                Value serverValue = new Value(context.syntax, serverObject.Properties[attr]);
                if (!context.Equals(value, serverValue))
                {
                    if (modelObject[StandardNames.attributeID] != null)
                    {
                        DataSchemaSite.Log.Add(
                            LogEntryKind.Warning,
                            "In Attribute {4} attribute '{0}' (syntax {3}) has different value '{1}' on server than in model '{2}'",
                            attr,
                            context.Unparse(serverValue),
                            context.Unparse(value),
                            context.syntax.Name,
                            modelObject[StandardNames.cn]);
                    }
                    else
                    {
                        DataSchemaSite.Log.Add(
                            LogEntryKind.Warning,
                            "In Class {4} attribute '{0}' (syntax {3}) has different value '{1}' on server than in model '{2}'",
                            attr,
                            context.Unparse(serverValue),
                            context.Unparse(value),
                            context.syntax.Name,
                            modelObject[StandardNames.cn]);
                    }
                    hasErrors = true;
                }
            }
        }