/// <summary> /// Invokes a currently registered Velocimacro with the parms provided /// and places the rendered stream into the writer. /// <br> /// 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="params[]">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 static bool InvokeVelocimacro(String vmName, String logTag, String[] params_Renamed, IContext context, TextWriter writer) { /* * check parms */ if (vmName == null || params_Renamed == null || context == null || writer == null || logTag == null) { RuntimeSingleton.error("Velocity.invokeVelocimacro() : invalid parameter"); return(false); } /* * does the VM exist? */ if (!RuntimeSingleton.isVelocimacro(vmName, logTag)) { RuntimeSingleton.error("Velocity.invokeVelocimacro() : VM '" + vmName + "' not registered."); 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 < params_Renamed.Length; i++) { construct.Append(" $"); construct.Append(params_Renamed[i]); } construct.Append(" )"); try { bool retval = Evaluate(context, writer, logTag, construct.ToString()); return(retval); } catch (Exception e) { RuntimeSingleton.error("Velocity.invokeVelocimacro() : error " + e); } return(false); }
/// <summary> /// Renders the input reader using the context into the output writer. /// To be used when a template is dynamically constructed, or want to /// use Velocity as a token replacer. /// </summary> /// <param name="context">context to use in rendering input string</param> /// <param name="out"> Writer in which to render the output</param> /// <param name="logTag"> string to be used as the template name for log messages in case of error</param> /// <param name="reader">Reader containing the VTL to be rendered</param> /// <returns>true if successful, false otherwise. If false, see Velocity runtime log</returns> public static bool Evaluate(IContext context, TextWriter writer, String logTag, TextReader reader) { SimpleNode nodeTree = null; try { nodeTree = RuntimeSingleton.parse(reader, logTag); } catch (ParseException pex) { throw new ParseErrorException(pex.Message); } /* * now we want to init and render */ if (nodeTree != null) { InternalContextAdapterImpl ica = new InternalContextAdapterImpl(context); ica.PushCurrentTemplateName(logTag); try { try { nodeTree.init(ica, RuntimeSingleton.RuntimeServices); } catch (Exception e) { RuntimeSingleton.error("Velocity.evaluate() : init exception for tag = " + logTag + " : " + e); } /* * now render, and let any exceptions fly */ nodeTree.render(ica, writer); } finally { ica.PopCurrentTemplateName(); } return(true); } return(false); }
/// <summary> /// merges a template and puts the rendered stream into the writer /// </summary> /// <param name="templateName">name of template to be used in merge /// </param> /// <param name="encoding">encoding used in template /// </param> /// <param name="context"> filled context to be used in merge /// </param> /// <param name="writer"> writer to write template into /// </param> /// <returns>true if successful, false otherwise. Errors /// logged to velocity log /// @since Velocity v1.1 /// </returns> public static bool MergeTemplate(String templateName, String encoding, IContext context, TextWriter writer) { Template template = RuntimeSingleton.getTemplate(templateName, encoding) ; if (template == null) { RuntimeSingleton.error("Velocity.parseTemplate() failed loading template '" + templateName + "'"); return(false); } else { template.Merge(context, writer); return(true); } }
/// <summary> /// Log an error message. /// </summary> /// <param name="Object">message to log</param> public static void Error(Object message) { RuntimeSingleton.error(message); }
public Test(System.String templateFile, System.String encoding) { System.IO.StreamWriter writer = null; TestProvider provider = new TestProvider(); ArrayList al = provider.Customers; System.Collections.Hashtable h = new System.Collections.Hashtable(); /* * put this in to test introspection $h.Bar or $h.get("Bar") etc */ SupportClass.PutElement(h, "Bar", "this is from a hashtable!"); SupportClass.PutElement(h, "Foo", "this is from a hashtable too!"); /* * adding simple vector with strings for testing late introspection stuff */ System.Collections.ArrayList v = new System.Collections.ArrayList(); System.String str = "mystr"; v.Add(new System.String("hello".ToCharArray())); v.Add(new System.String("hello2".ToCharArray())); v.Add(str); try { /* * this is another way to do properties when initializing Runtime. * make a Properties */ //UPGRADE_TODO: Format of property file may need to be changed. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1089"' System.Configuration.AppSettingsReader p = new System.Configuration.AppSettingsReader(); /* * now, if you want to, load it from a file (or whatever) */ try { System.IO.FileStream fis = new System.IO.FileStream(new System.IO.FileInfo("velocity.properties").FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read); if (fis != null) { //UPGRADE_ISSUE: Method 'java.util.Properties.load' was not converted. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1000_javautilPropertiesload_javaioInputStream"' p.load(fis); } } catch (System.Exception ex) { /* no worries. no file... */ } /* * iterate out the properties */ System.Collections.Specialized.NameValueCollection temp_namedvaluecollection; temp_namedvaluecollection = System.Configuration.ConfigurationSettings.AppSettings; //UPGRADE_TODO: method 'java.util.Enumeration.hasMoreElements' was converted to ' ' which has a different behavior. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1073_javautilEnumerationhasMoreElements"' for (System.Collections.IEnumerator e = temp_namedvaluecollection.GetEnumerator(); e.MoveNext();) { //UPGRADE_TODO: method 'java.util.Enumeration.nextElement' was converted to ' ' which has a different behavior. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1073_javautilEnumerationnextElement"' System.String el = (System.String)e.Current; //UPGRADE_WARNING: method 'java.util.Properties.getProperty' was converted to ' ' which may throw an exception. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1101"' Velocity.setProperty(el, (System.String)p.GetValue(el, System.Type.GetType("System.String"))); } /* * add some individual properties if you wish */ Velocity.setProperty(Velocity.RUNTIME_LOG_ERROR_STACKTRACE, "true"); Velocity.setProperty(Velocity.RUNTIME_LOG_WARN_STACKTRACE, "true"); Velocity.setProperty(Velocity.RUNTIME_LOG_INFO_STACKTRACE, "true"); /* * use an alternative logger. Set it up here and pass it in. */ // SimpleLogSystem sls = new SimpleLogSystem("velocity_simple.log"); // Velocity.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM, sls ); /* * and now call init */ Velocity.init(); /* * now, do what we want to do. First, get the Template */ if (templateFile == null) { templateFile = "examples/example.vm"; } Template template = null; try { template = RuntimeSingleton.getTemplate(templateFile, encoding) ; } catch (ResourceNotFoundException rnfe) { System.Console.Out.WriteLine("Test : RNFE : Cannot find template " + templateFile); } catch (ParseErrorException pee) { System.Console.Out.WriteLine("Test : Syntax error in template " + templateFile + ":" + pee); } /* * now, make a Context object and populate it. */ VelocityContext context = new VelocityContext(); context.put("provider", provider); context.put("name", "jason"); context.put("providers", provider.Customers2); context.put("list", al); context.put("hashtable", h); context.put("search", provider.Search); context.put("relatedSearches", provider.RelSearches); context.put("searchResults", provider.RelSearches); context.put("menu", provider.Menu); context.put("stringarray", provider.Array); context.put("vector", v); context.put("mystring", new System.String("".ToCharArray())); context.put("hashmap", new HashMap()); context.put("runtime", new FieldMethodizer("org.apache.velocity.runtime.RuntimeSingleton")); context.put("fmprov", new FieldMethodizer(provider)); context.put("Floog", "floogie woogie"); context.put("geirstring", str); context.put("mylong", 5); /* * we want to make sure we test all types of iterative objects * in #foreach() */ int[] intarr = new int[] { 10, 20, 30, 40, 50 }; System.Object[] oarr = new System.Object[] { "a", "b", "c", "d" }; context.put("collection", v); context.put("iterator", v.iterator()); context.put("map", h); context.put("obarr", oarr); context.put("intarr", intarr); System.String stest = " My name is $name -> $Floog"; System.IO.StringWriter w = new System.IO.StringWriter(); // Velocity.evaluate( context, w, "evaltest",stest ); // System.out.println("Eval = " + w ); w = new System.IO.StringWriter(); //Velocity.mergeTemplate( "mergethis.vm", context, w ); //System.out.println("Merge = " + w ); w = new System.IO.StringWriter(); //Velocity.invokeVelocimacro( "floog", "test", new String[2], context, w ); //System.out.println("Invoke = " + w ); /* * event cartridge stuff */ EventCartridge ec = new EventCartridge(); ec.addEventHandler(this); ec.attachToContext(context); /* * make a writer, and merge the template 'against' the context */ VelocityContext vc = new VelocityContext(context); if (template != null) { //UPGRADE_ISSUE: Constructor 'java.io.BufferedWriter.BufferedWriter' was not converted. 'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="jlca1000_javaioBufferedWriterBufferedWriter_javaioWriter"' writer = new BufferedWriter(new System.IO.StreamWriter(System.Console.Out)); template.merge(vc, writer); writer.Flush(); writer.Close(); } } catch (MethodInvocationException mie) { System.Console.Out.WriteLine("MIE : " + mie); } catch (System.Exception e) { RuntimeSingleton.error("Test- exception : " + e); SupportClass.WriteStackTrace(e, Console.Error); } }