Exemple #1
0
        /// <summary>
        /// Creates references for operation contract.
        /// </summary>
        /// <param name="node">The node.</param>
        private void Process_OperationContractReferences(dynamic node)
        {
            OperationContract operationContract = context.GetObject(node);

            // This
            Reference thisReference = new Reference();
            thisReference.Name = "this";
            thisReference.Object = operationContract.Contract;
            operationContract.References.Add(thisReference);

            // Result
            if (operationContract.Operation.ReturnType != PseudoType.Async && operationContract.Operation.ReturnType != PseudoType.Void)
            {
                Reference resultReference = new Reference();
                resultReference.Name = "result";
                resultReference.Object = operationContract.Operation.ReturnType;
                resultReference.AddMetaInfo(new SourceLocationInfo(node.Operation.ReturnType, context));
                context.AddObject(node.Operation.ReturnType, resultReference);
                operationContract.References.Add(resultReference);
            }

            // Parameters
            if (node.Operation.Parameters != null)
            {
                int index = 0;
                foreach (dynamic parameter in node.Operation.Parameters)
                {
                    Reference parameterReference = new Reference();
                    parameterReference.Name = parameter.Name;
                    parameterReference.Object = operationContract.Operation.Parameters[index];
                    parameterReference.AddMetaInfo(new SourceLocationInfo(parameter, context));
                    context.AddObject(parameter, parameterReference);

                    try
                    {
                        NameContext.Current.CheckName(parameterReference.Name, typeof(Reference));
                        operationContract.References.Add(parameterReference);
                    }
                    catch (NameCollisionException exception)
                    {
                        Error_NameExists(parameterReference, exception);
                    }

                    index++;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Creates references for operation authorization.
        /// </summary>
        /// <param name="node">The node.</param>
        private void Process_OperationAuthorizationReferences(dynamic node)
        {
            OperationAuthorization operationAuthorization = context.GetObject(node);

            // This
            Reference thisReference = new Reference();
            thisReference.Name = "this";
            thisReference.Object = operationAuthorization.Authorization;
            operationAuthorization.References.Add(thisReference);

            // Parameters
            if (node.Operation.Parameters != null)
            {
                int index = 0;
                foreach (dynamic parameter in node.Operation.Parameters)
                {
                    Reference parameterReference = new Reference();
                    parameterReference.Name = parameter.Name;
                    parameterReference.Object = operationAuthorization.Operation.Parameters[index];
                    parameterReference.AddMetaInfo(new SourceLocationInfo(parameter, context));
                    context.AddObject(parameter, parameterReference);

                    try
                    {
                        NameContext.Current.CheckName(parameterReference.Name, typeof(Reference));
                        operationAuthorization.References.Add(parameterReference);
                    }
                    catch (NameCollisionException exception)
                    {
                        Error_NameExists(parameterReference, exception);
                    }

                    index++;
                }
            }

            // Claims
            if (node.OperationAuthorizationClaims != null)
            {
                foreach (dynamic claim in node.OperationAuthorizationClaims)
                {
                    Reference claimReference = new Reference();
                    claimReference.Name = claim.Name;
                    claimReference.AddMetaInfo(new SourceLocationInfo(claim, context));
                    context.AddObject(claim, claimReference);

                    try
                    {
                        List<string> identifiers = this.Process_IdentifierList(claim.Type);
                        SoaObject scope = NameContext.Current.ResolveFirstName(identifiers[0], typeof(Namespace), typeof(ClaimsetType));
                        for (int i = 1; i < identifiers.Count; i++)
                        {
                            scope = NameContext.ResolveName(scope, identifiers[i], typeof(Namespace), typeof(ClaimsetType), typeof(ClaimField));
                        }
                        claimReference.Object = scope;
                    }
                    catch (NameNotFoundException ex)
                    {
                        Error_NameNotFound(new SourceLocationInfo(claim, context), ex);
                    }
                    catch (NameCollisionException ex)
                    {
                        Error_NameCollision(new SourceLocationInfo(claim, context), ex);
                    }

                    try
                    {
                        NameContext.Current.CheckName(claimReference.Name, typeof(Reference));
                        operationAuthorization.References.Add(claimReference);
                    }
                    catch (NameCollisionException exception)
                    {
                        Error_NameExists(claimReference, exception);
                    }
                }
            }
        }