예제 #1
0
        /// <summary>
        /// Creates a Result using an XmlReader instance provided.
        /// </summary>
        /// <param name="reader">The XmlReader positioned at the Result node.</param>
        /// <param name="schemaVersion">The version of the schema that was used to validate.</param>
        public ResultElement(XmlReader reader, XacmlVersion schemaVersion)
            : base(XacmlSchema.Context, schemaVersion)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            if (reader.LocalName == ContextSchema.ResultElement.Result)
            {
                while (reader.Read())
                {
                    switch (reader.LocalName)
                    {
                    case ContextSchema.ResultElement.Decision:
                        // The parsing should be safe because the document was validated using a Xsd Shcema
                        _decision = (rtm.Decision)Enum.Parse(typeof(rtm.Decision), reader.ReadElementString(), false);
                        break;

                    case ContextSchema.StatusElement.Status:
                        _status = new StatusElement(reader, schemaVersion);
                        break;

                    case ObligationsElement.Obligations:
                        while (reader.Read())
                        {
                            switch (reader.LocalName)
                            {
                            case ObligationElement.Obligation:
                                _obligations.Add(new pol.ObligationElement(reader, schemaVersion));
                                break;
                            }
                            // Trick to support multiple nodes of the same name.
                            if (reader.LocalName == ObligationsElement.Obligations &&
                                reader.NodeType == XmlNodeType.EndElement)
                            {
                                reader.Read();
                                break;
                            }
                        }

                        break;
                    }
                    if (reader.LocalName == ContextSchema.ResultElement.Result &&
                        reader.NodeType == XmlNodeType.EndElement)
                    {
                        break;
                    }
                }
            }
            else
            {
                throw new Exception(Resource.ResourceManager[Resource.MessageKey.exc_invalid_node_name, reader.LocalName]);
            }
        }
예제 #2
0
        /// <summary>
        /// Creates a new Result using the provided information.
        /// </summary>
        /// <param name="resourceId">The resource id for this result.</param>
        /// <param name="decision">The decission of the evaluation.</param>
        /// <param name="status">The status with information about the execution.</param>
        /// <param name="obligations">The list of obligations</param>
        /// <param name="schemaVersion">The version of the schema that was used to validate.</param>
        public ResultElement(string resourceId, rtm.Decision decision, StatusElement status, pol.ObligationCollection obligations, XacmlVersion schemaVersion)
            : base(XacmlSchema.Context, schemaVersion)
        {
            _resourceId = resourceId;
            _decision   = decision;

            // If the status is null, create an empty status
            if (status == null)
            {
                _status = new StatusElement(null, null, null, schemaVersion);
            }
            else
            {
                _status = status;
            }

            // If the obligations are null, leave the empty ObligationCollection.
            if (obligations != null)
            {
                _obligations = obligations;
            }
        }
예제 #3
0
		/// <summary>
		/// Creates a new Result using the provided information.
		/// </summary>
		/// <param name="resourceId">The resource id for this result.</param>
		/// <param name="decision">The decission of the evaluation.</param>
		/// <param name="status">The status with information about the execution.</param>
		/// <param name="obligations">The list of obligations</param>
		/// <param name="schemaVersion">The version of the schema that was used to validate.</param>
		public ResultElement( string resourceId, rtm.Decision decision, StatusElement status, pol.ObligationCollection obligations, XacmlVersion schemaVersion )
			: base( XacmlSchema.Context, schemaVersion )
		{
			_resourceId = resourceId;
			_decision = decision;

			// If the status is null, create an empty status
			if( status == null )
			{
				_status = new StatusElement( null, null, null, schemaVersion );
			}
			else
			{
				_status = status;
			}

			// If the obligations are null, leave the empty ObligationCollection.
			if( obligations != null )
			{
				_obligations = obligations;
			}
		}
예제 #4
0
		/// <summary>
		/// Creates a Result using an XmlReader instance provided.
		/// </summary>
		/// <param name="reader">The XmlReader positioned at the Result node.</param>
		/// <param name="schemaVersion">The version of the schema that was used to validate.</param>
		public ResultElement( XmlReader reader, XacmlVersion schemaVersion )
			: base( XacmlSchema.Context, schemaVersion )
		{
            if (reader == null) throw new ArgumentNullException("reader");
			if( reader.LocalName == ContextSchema.ResultElement.Result )
			{
				while( reader.Read() )
				{
					switch( reader.LocalName )
					{
						case ContextSchema.ResultElement.Decision:
							// The parsing should be safe because the document was validated using a Xsd Shcema
							_decision = (rtm.Decision)Enum.Parse( typeof(rtm.Decision), reader.ReadElementString(), false );
							break;
						case ContextSchema.StatusElement.Status:
							_status = new StatusElement( reader, schemaVersion );
							break;
						case ObligationsElement.Obligations:
							while( reader.Read() )
							{
								switch( reader.LocalName )
								{
									case ObligationElement.Obligation:
										_obligations.Add( new pol.ObligationElement( reader, schemaVersion ) );
										break;
								}
								// Trick to support multiple nodes of the same name.
								if( reader.LocalName == ObligationsElement.Obligations && 
									reader.NodeType == XmlNodeType.EndElement )
								{
									reader.Read();
									break;
								}		
							}
							
							break;
					}
					if( reader.LocalName == ContextSchema.ResultElement.Result && 
						reader.NodeType == XmlNodeType.EndElement )
					{
						break;
					}
				}
			}
			else
			{
				throw new Exception( Resource.ResourceManager[ Resource.MessageKey.exc_invalid_node_name, reader.LocalName ] );
			}
		}