internal static IExpressionResponse GetIExpressionResponse(Expression expIn)
        {
            ExpressionResponse expOut = new ExpressionResponse();

            expOut.Description = expIn.Description;
            expOut.Name = expIn.Name;
            expOut.Rating = expIn.Rating;
            expOut.Triggered = expIn.Triggered;
            
            expOut.ExpressionDetailCollection = new Collection<IExpressionDetail>();
            if ( expIn.ExpressionDetails != null)
            {
                foreach (CustomProperty prop in expIn.ExpressionDetails)
                {
                    expOut.ExpressionDetailCollection.Add(new ExpressionDetail(prop.Name,prop.Value));
                }
            }

            if ( expIn.Properties != null)
            {
                foreach (CustomProperty property in expIn.Properties)
                {
                    expOut.Properties[property.Name] = property.Value;
                }
            }

            return expOut;
        }
		private object ConditionLinePassedHandler(IBRERuleContext aBrc, Hashtable aMap, object aStep)
		{
			if (m_CurrentFileInfo.PolicySetCollection == null || m_CurrentFileInfo.PolicySetCollection.Count == 0)
				throw new PolicyEngineException("Unable to audit expression information as no policy collection exists");

			ExpressionResponse expressionInfo = new ExpressionResponse();

			expressionInfo.Name = GetName(aMap);

			if (aMap.ContainsKey("Rating"))
				expressionInfo.Rating = aMap["Rating"] as string;

			expressionInfo.Triggered = false;

			if (aMap.Contains("Description"))
				expressionInfo.Description = aMap["Description"] as string;

			expressionInfo.ExpressionDetailCollection = new Collection<IExpressionDetail>();

			AddExpressionInfo(expressionInfo);

			return null;
		}
		private object ConditionLineFiredHandler(IBRERuleContext aBrc, Hashtable aMap, object aStep)
		{
			if (m_CurrentFileInfo.PolicySetCollection == null || m_CurrentFileInfo.PolicySetCollection.Count == 0)
				throw new PolicyEngineException("Unable to audit expression information as no rule collection exists");

			ExpressionResponse expressionInfo = new ExpressionResponse();

			expressionInfo.Name = GetName(aMap);

			if (aMap.ContainsKey("Rating"))
				expressionInfo.Rating = aMap["Rating"] as string;
			expressionInfo.Triggered = true;

			if (aMap.Contains("Description"))
				expressionInfo.Description = aMap["Description"] as string;

			OnPolicyProgressEvent(new PolicyProgressEventArgs(m_CurrentFileInfo.File, EventType.condition, expressionInfo.Name));

			expressionInfo.ExpressionDetailCollection = new Collection<IExpressionDetail>();

			foreach (DictionaryEntry de in aMap)
			{
				if ((string.Compare(de.Key as string, "Type", true, CultureInfo.InvariantCulture) == 0) ||
					(string.Compare(de.Key as string, "Name", true, CultureInfo.InvariantCulture) == 0) ||
					(string.Compare(de.Key as string, "Description", true, CultureInfo.InvariantCulture) == 0) ||
					(string.Compare(de.Key as string, "Rating", true, CultureInfo.InvariantCulture) == 0))
					continue;

				if (string.Compare(de.Key as string, "Properties", true, CultureInfo.InvariantCulture) == 0)
				{
					DictionaryEntry[] props = de.Value as DictionaryEntry[];
					foreach (DictionaryEntry dictprop in props)
					{
						if (dictprop.Key == null || dictprop.Value == null)
							continue;

						string name = dictprop.Key as string;
						string value = dictprop.Value as string;

						expressionInfo.ExpressionDetailCollection.Add(new ExpressionDetail(name, value));
					}
					continue;
				}
				expressionInfo.ExpressionDetailCollection.Add(new ExpressionDetail(de.Key as string, de.Value as string));
			}
			AddExpressionInfo(expressionInfo);

			return null;
		}