/// <summary> /// Creates a new Policy using the XmlReader instance specified. /// </summary> /// <param name="reader">The XmlReader instance positioned at the Policy node.</param> /// <param name="schemaVersion">The version of the schema that was used to validate.</param> public PolicyElementReadWrite(XmlReader reader, XacmlVersion schemaVersion) : base(XacmlSchema.Policy, schemaVersion) { if (reader.LocalName == PolicySchema2.PolicyElement.Policy && ValidateSchema(reader, schemaVersion)) { // Read the policy id _id = reader.GetAttribute(PolicySchema2.PolicyElement.PolicyId); // Read the policy combining algorithm _ruleCombiningAlgorithm = reader.GetAttribute(PolicySchema2.PolicyElement.RuleCombiningAlgorithmId); while (reader.Read()) { switch (reader.LocalName) { case PolicySchema2.PolicyElement.Description: _description = reader.ReadElementString(); break; case PolicySchema2.PolicyElement.PolicyDefaults: // Read all the policy defaults. if (reader.Read() && reader.Read()) { if (reader.LocalName == PolicyDefaultsElement.XPathVersion && ValidateSchema(reader, schemaVersion)) { _xpathVersion = reader.ReadElementString(); if (_xpathVersion != null && _xpathVersion.Length != 0 && _xpathVersion != Namespaces.XPath10) { throw new Exception(Resource.ResourceManager[Resource.MessageKey.exc_unsupported_xpath_version, _xpathVersion]); } } reader.Read(); } break; case PolicySchema2.TargetElement.Target: _target = new TargetElementReadWrite(reader, schemaVersion); break; case PolicySchema2.RuleElement.Rule: _rules.Add(new RuleElementReadWrite(reader, schemaVersion)); break; case PolicySchema2.PolicyElement.Obligations: // Read all the obligations while (reader.Read()) { switch (reader.LocalName) { case PolicySchema1.ObligationElement.Obligation: _obligations.Add(new ObligationElementReadWrite(reader, schemaVersion)); break; } if (reader.LocalName == ObligationsElement.Obligations && reader.NodeType == XmlNodeType.EndElement) { reader.Read(); break; } } break; case PolicySchema2.PolicyElement.CombinerParameters: // Read all the combiner parameters while (reader.Read()) { switch (reader.LocalName) { case PolicySchema2.CombinerParameterElement.CombinerParameter: _combinerParameters.Add(new CombinerParameterElement(reader, schemaVersion)); break; } if (reader.LocalName == PolicySchema2.PolicyElement.CombinerParameters && reader.NodeType == XmlNodeType.EndElement) { reader.Read(); break; } } break; case PolicySchema2.PolicyElement.RuleCombinerParameters: // Read all the rule parameters while (reader.Read()) { switch (reader.LocalName) { case PolicySchema2.RuleCombinerParameterElement.RuleCombinerParameter: _ruleCombinerParameters.Add(new RuleCombinerParameterElement(reader, schemaVersion)); break; } if (reader.LocalName == PolicySchema2.PolicyElement.RuleCombinerParameters && reader.NodeType == XmlNodeType.EndElement) { reader.Read(); break; } } break; case PolicySchema2.PolicyElement.VariableDefinition: VariableDefinitionElement variable = new VariableDefinitionElement(reader, schemaVersion); _variableDefinitions.Add(variable.Id, variable); break; } if (reader.LocalName == PolicySchema1.PolicyElement.Policy && reader.NodeType == XmlNodeType.EndElement) { break; } } } else { throw new Exception(Resource.ResourceManager[Resource.MessageKey.exc_invalid_node_name, reader.LocalName]); } }
/// <summary> /// Default constructor. /// </summary> /// <param name="variableDefinition">The variable definition in the policy document.</param> public VariableDefinition( pol.VariableDefinitionElement variableDefinition ) { _variableDefinition = variableDefinition; }
/// <summary> /// Default constructor. /// </summary> /// <param name="variableDefinition">The variable definition in the policy document.</param> public VariableDefinition(pol.VariableDefinitionElement variableDefinition) { _variableDefinition = variableDefinition; }
/// <summary> /// Creates a new Policy using the XmlReader instance specified. /// </summary> /// <param name="reader">The XmlReader instance positioned at the Policy node.</param> /// <param name="schemaVersion">The version of the schema that was used to validate.</param> public PolicyElementReadWrite(XmlReader reader, XacmlVersion schemaVersion) : base(XacmlSchema.Policy, schemaVersion) { if (reader.LocalName == PolicySchema2.PolicyElement.Policy && ValidateSchema(reader, schemaVersion)) { // Read the policy id _id = reader.GetAttribute(PolicySchema2.PolicyElement.PolicyId); // Read the policy combining algorithm _ruleCombiningAlgorithm = reader.GetAttribute(PolicySchema2.PolicyElement.RuleCombiningAlgorithmId); while (reader.Read()) { switch (reader.LocalName) { case PolicySchema2.PolicyElement.Description: _description = reader.ReadElementString(); break; case PolicySchema2.PolicyElement.PolicyDefaults: // Read all the policy defaults. if (reader.Read() && reader.Read()) { if (reader.LocalName == PolicyDefaultsElement.XPathVersion && ValidateSchema(reader, schemaVersion)) { _xpathVersion = reader.ReadElementString(); if (_xpathVersion != null && _xpathVersion.Length != 0 && _xpathVersion != Namespaces.XPath10) { throw new Exception(Resource.ResourceManager[Resource.MessageKey.exc_unsupported_xpath_version, _xpathVersion]); } } reader.Read(); } break; case PolicySchema2.TargetElement.Target: _target = new TargetElementReadWrite(reader, schemaVersion); break; case PolicySchema2.RuleElement.Rule: _rules.Add(new RuleElementReadWrite(reader, schemaVersion)); break; case PolicySchema2.PolicyElement.Obligations: // Read all the obligations while (reader.Read()) { switch (reader.LocalName) { case PolicySchema1.ObligationElement.Obligation: _obligations.Add(new ObligationElementReadWrite(reader, schemaVersion)); break; } if (reader.LocalName == ObligationsElement.Obligations && reader.NodeType == XmlNodeType.EndElement) { reader.Read(); break; } } break; case PolicySchema2.PolicyElement.CombinerParameters: // Read all the combiner parameters while (reader.Read()) { switch (reader.LocalName) { case PolicySchema2.CombinerParameterElement.CombinerParameter: _combinerParameters.Add(new CombinerParameterElement(reader, schemaVersion)); break; } if (reader.LocalName == PolicySchema2.PolicyElement.CombinerParameters && reader.NodeType == XmlNodeType.EndElement) { reader.Read(); break; } } break; case PolicySchema2.PolicyElement.RuleCombinerParameters: // Read all the rule parameters while (reader.Read()) { switch (reader.LocalName) { case PolicySchema2.RuleCombinerParameterElement.RuleCombinerParameter: _ruleCombinerParameters.Add(new RuleCombinerParameterElement(reader, schemaVersion)); break; } if (reader.LocalName == PolicySchema2.PolicyElement.RuleCombinerParameters && reader.NodeType == XmlNodeType.EndElement) { reader.Read(); break; } } break; case PolicySchema2.PolicyElement.VariableDefinition: VariableDefinitionElement variable = new VariableDefinitionElement(reader, schemaVersion); _variableDefinitions.Add(variable.Id, variable); break; } if (reader.LocalName == PolicySchema1.PolicyElement.Policy && reader.NodeType == XmlNodeType.EndElement) { break; } } } else { throw new Exception(Resource.ResourceManager[Resource.MessageKey.exc_invalid_node_name, reader.LocalName]); } }