public override IPolicyExpression Parse(Stream stream) { IList <TokenTypeAssociation> tokens = ParseToTokens(stream); ResetLevel(); IPolicyExpression retExpression = BuildExpression(tokens.GetEnumerator()); if (GetLevel() != 0) { throw new PolicyGrammarException("Group not closed."); } if (retExpression.GetExpressionType() != PolicyExpressionType.OPERATION) { throw new PolicyGrammarException("Expression must evaluate to an operation"); } return(retExpression); }
protected StackMachineEntry <OperationPolicyExpression> Compile(IList <IOpCode> entries, X509Certificate2 cert, IPolicyExpression expression) { switch (expression.GetExpressionType()) { //case PolicyExpressionType.LITERAL: // return new StackMachineEntry(((LiteralPolicyExpression < ? >) // expression). // GetPolicyValue()) // ; //case PolicyExpressionType.REFERENCE: //{ // object refExpression = GetRefExpressionType(expression); // //IReferencePolicyExpression<X509Certificate2, object> refExpression = null; // EvaluateReferenceExpression(cert, refExpression); // return new ReferenceMachineEntry<IReferencePolicyExpression<X509Certificate2,T>>(expression); //} case PolicyExpressionType.OPERATION: { OperationPolicyExpression opExpression = (OperationPolicyExpression)expression; foreach (IPolicyExpression policyExpression in opExpression.GetOperands()) { if (policyExpression is IReferencePolicyExpression <X509Certificate2, String> ) { var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, String>; EvaluateReferenceExpression(cert, refExpression); entries.Add(Compile(refExpression)); } else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Int32> ) { var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Int32>; EvaluateReferenceExpression(cert, refExpression); entries.Add(Compile(refExpression)); } else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Int64> ) { var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Int64>; EvaluateReferenceExpression(cert, refExpression); entries.Add(Compile(refExpression)); } else if (policyExpression is IReferencePolicyExpression <X509Certificate2, IList <String> > ) { var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, IList <String> >; EvaluateReferenceExpression(cert, refExpression); entries.Add(Compile(refExpression)); } else if (policyExpression is IReferencePolicyExpression <X509Certificate2, Boolean> ) { var refExpression = policyExpression as IReferencePolicyExpression <X509Certificate2, Boolean>; EvaluateReferenceExpression(cert, refExpression); entries.Add(Compile(refExpression)); } else if (policyExpression is ILiteralPolicyExpression <String> ) { entries.Add(Compile(policyExpression as ILiteralPolicyExpression <String>)); } else { entries.Add(Compile(entries, cert, policyExpression)); } } return(new StackMachineEntry <OperationPolicyExpression>(opExpression.GetPolicyOperator())); } default: return(null); } }