Example #1
0
        /// <summary>
        /// Invokes a currently registered Velocimacro with the parameters provided
        /// and places the rendered stream into the writer.
        /// Note : currently only accepts args to the VM if they are in the context.
        /// </summary>
        /// <param name="vmName">name of Velocimacro to call</param>
        /// <param name="logTag">string to be used for template name in case of error</param>
        /// <param name="parameters">args used to invoke Velocimacro. In context key format :
        /// eg  "foo","bar" (rather than "$foo","$bar")
        /// </param>
        /// <param name="context">Context object containing data/objects used for rendering.</param>
        /// <param name="writer"> Writer for output stream</param>
        /// <returns>true if Velocimacro exists and successfully invoked, false otherwise.</returns>
        public bool InvokeVelocimacro(String vmName, String logTag, String[] parameters, IContext context, TextWriter writer)
        {
            // check parameters
            if (vmName == null || parameters == null || context == null || writer == null || logTag == null)
            {
                runtimeInstance.Error("VelocityEngine.invokeVelocimacro() : invalid parameter");
                return(false);
            }

            // does the VM exist?
            if (!runtimeInstance.IsVelocimacro(vmName, logTag))
            {
                runtimeInstance.Error(string.Format("VelocityEngine.invokeVelocimacro() : VM '{0}' not registered.", vmName));
                return(false);
            }

            // now just create the VM call, and use evaluate
            StringBuilder construct = new StringBuilder("#");

            construct.Append(vmName);
            construct.Append("(");

            for (int i = 0; i < parameters.Length; i++)
            {
                construct.Append(" $");
                construct.Append(parameters[i]);
            }

            construct.Append(" )");

            try
            {
                bool retval = Evaluate(context, writer, logTag, construct.ToString());

                return(retval);
            }
            catch (Exception e)
            {
                runtimeInstance.Error(string.Format("VelocityEngine.invokeVelocimacro() : error {0}", e));
                throw;
            }
        }