/// <summary>
    /// CONSTRUCTOR
    /// </summary>
    /// <param name="filePath"></param>
    public ProvisionUserInstructions(string filePath)
    {
        //==================================================================================
        //Load values from the TARGET SITE config file
        //==================================================================================
        var xmlConfigTargetSite = new System.Xml.XmlDocument();

        xmlConfigTargetSite.Load(filePath);

        //-------------------------------------------------------------------------------
        //Get instructions about the intended site membership provisioning
        //-------------------------------------------------------------------------------
        var xnodeSiteMembership = xmlConfigTargetSite.SelectSingleNode("//SiteProvisioning/SiteMembership");

        this.ActionForUnexpectedSamlUsers = ParseUnexpectedUserAction(
            xnodeSiteMembership.Attributes[ProvisionUserInstructions.XmlAttribute_authSamlUnexpectedUsers].Value);

        this.ActionForUnexpectedDefaultAuthUsers = ParseUnexpectedUserAction(
            xnodeSiteMembership.Attributes[ProvisionUserInstructions.XmlAttribute_authDefaultUnexpectedUsers].Value);

        this.ActionForMissingSamlUsers = ParseMissingUserAction(
            xnodeSiteMembership.Attributes[ProvisionUserInstructions.XmlAttribute_authSamlMissingUsers].Value);

        this.ActionForMissingDefaultAuthUsers = ParseMissingUserAction(
            xnodeSiteMembership.Attributes[ProvisionUserInstructions.XmlAttribute_authDefaultMissingUsers].Value);

        this.ActionForExistingSamlUsers = ParseExistingUserAction(
            xnodeSiteMembership.Attributes[ProvisionUserInstructions.XmlAttribute_authSamlExistingUsers].Value);

        this.ActionForExistingDefaultAuthUsers = ParseExistingUserAction(
            xnodeSiteMembership.Attributes[ProvisionUserInstructions.XmlAttribute_authDefaultExistingUsers].Value);

        //-------------------------------------------------------------------------------
        //Get the users
        //-------------------------------------------------------------------------------
        this.UsersToProvision = ParseUsers(xmlConfigTargetSite, "//SiteProvisioning/SiteMembership/User").AsReadOnly();

        //-------------------------------------------------------------------------------
        //Groups' memberships
        //-------------------------------------------------------------------------------
        var xnodeGroups = xmlConfigTargetSite.SelectSingleNode("//SiteProvisioning/GroupsMemberships");

        this.ActionForMissingGroupMembers = ParseMissingGroupMemberAction(
            xnodeGroups.Attributes[ProvisionUserInstructions.XmlAttribute_MissingGroupMembers].Value);

        this.ActionForUnexpectedGroupMembers = ParseUnexpectedGroupMemberAction(
            xnodeGroups.Attributes[ProvisionUserInstructions.XmlAttribute_UnexpectedGroupMembers].Value);

        //Load each group's membership information
        var provisionGroups = new List <ProvisioningGroup>();
        var xnodesGroups    = xmlConfigTargetSite.SelectNodes("//SiteProvisioning/GroupsMemberships/GroupMembership");

        foreach (XmlNode xmlThisGroup in xnodesGroups)
        {
            var thisGroup = new ProvisioningGroup(xmlThisGroup);
            provisionGroups.Add(thisGroup);
        }
        this.GroupsToProvision = provisionGroups.AsReadOnly();
    }
    /// <summary>
    /// XML Serialization value
    /// </summary>
    /// <param name="action"></param>
    /// <returns></returns>
    internal static string XmlAttributeText(ExistingUserAction action)
    {
        switch (action)
        {
        case ExistingUserAction.Modify:
            return(AttributeValue_Modify);

        case ExistingUserAction.Report:
            return(AttributeValue_Report);

        default:
            IwsDiagnostics.Assert(false, "814-248: Internal error, missing value");
            throw new Exception("814-248: Internal error, missing value");
        }
    }