private void parse() { String name = fEditor.getEditorInput().getName(); Reader reader = new StringReader(fEditor.getDocument().get()); Template template = null; try { parseHtml(); if (fEditor.getEditorInput() instanceof IFileEditorInput) ((IFileEditorInput) fEditor.getEditorInput()) .getFile() .deleteMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); RuntimeInstance runtime = VelocityEditorEnvironment.getParser(); SimpleNode root = runtime.parse(reader, name); // Create tree model NodeVisitor visitor = new NodeVisitor(name); root.jjtAccept(visitor, null); template = visitor.getTemplate(); fError = ""; } catch (ParseException e) { if (!name.matches(".*?\\.jsp.*")) { if (e.getMessage() != null) { fError = e.getMessage(); Token token = e.currentToken; if (token != null) { fEditor.addProblemMarker(e.getMessage(), token.next.beginLine, IMarker.SEVERITY_ERROR); } } else { fError = ""; } } } catch (Exception e) { fError = ""; VelocityPlugin.log(e); } finally { try { reader.close(); } catch (IOException e) { VelocityPlugin.log(e); } } // Replace saved template with the new parsed one synchronized (this) { if (template != null) { fTemplate = template; // Save last successful parse tree fLastTemplate = template; } else { fTemplate = null; } } // Update outline view and display error message in status line Display.getDefault() .syncExec( new Runnable() { public void run() { fEditor.updateOutlinePage(); fEditor.displayErrorMessage(fError); } }); reconcile(); }
static { // Ensure that $undefinedvar will produce an exception rather than outputting $undefinedvar. velocityRuntimeInstance.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT, "true"); velocityRuntimeInstance.setProperty( RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, new NullLogChute()); velocityRuntimeInstance.setProperty( RuntimeConstants.RESOURCE_MANAGER_CACHE_CLASS, ResourceCacheImpl.class.getName()); // Setting ResourceCacheImpl is should not be necessary since that is the default value, but // ensures that Maven shading sees that Apache Commons classes referenced from ResourceCacheImpl // are indeed referenced and cannot be removed during minimization. // Disable any logging that Velocity might otherwise see fit to do. velocityRuntimeInstance.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, new NullLogChute()); // Velocity likes its "managers", LogManager and ResourceManager, which it loads through the // context class loader. If that loader can see another copy of Velocity then that will lead // to hard-to-diagnose exceptions during initialization. Thread currentThread = Thread.currentThread(); ClassLoader oldContextLoader = currentThread.getContextClassLoader(); try { currentThread.setContextClassLoader(TemplateVars.class.getClassLoader()); velocityRuntimeInstance.init(); } finally { currentThread.setContextClassLoader(oldContextLoader); } }
static SimpleNode parsedTemplateForResource(String templateStr, String resourceName) { try { return velocityRuntimeInstance.parse(templateStr, resourceName); } catch (ParseException e) { throw new AssertionError(e); } }
/** * Initialize Velocity engine instance, disables logging, sets bundle-relative resource loader. */ public static RuntimeInstance createInstance(String bundleID, String templatePrefix) { try { final ExtendedProperties p = new ExtendedProperties(); p.setProperty("resource.loader", "bundle"); p.setProperty( "bundle.resource.loader.instance", new BundleResourceLoader(bundleID, templatePrefix)); p.setProperty(RuntimeConstants.SET_NULL_ALLOWED, "true"); // Disable separate Velocity logging. p.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, NullLogChute.class.getName()); final RuntimeInstance velocity = new RuntimeInstance(); velocity.setConfiguration(p); return velocity; } catch (Exception e) { throw new RuntimeException("Velocity initialization failed.", e); } }
/** * Returns the result of substituting the variables defined by the fields of this class (a * concrete subclass of TemplateVars) into the template returned by {@link #parsedTemplate()}. */ String toText() { VelocityContext velocityContext = toVelocityContext(); StringWriter writer = new StringWriter(); SimpleNode parsedTemplate = parsedTemplate(); boolean rendered = velocityRuntimeInstance.render( velocityContext, writer, parsedTemplate.getTemplateName(), parsedTemplate); if (!rendered) { // I don't know when this happens. Usually you get an exception during rendering. throw new IllegalArgumentException("Template rendering failed"); } return writer.toString(); }
public VelocitySQLTemplateProcessor() { this.renderingUtils = new SQLTemplateRenderingUtils(); this.velocityRuntime = new RuntimeInstance(); // set null logger velocityRuntime.addProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, new NullLogChute()); velocityRuntime.addProperty( RuntimeConstants.RESOURCE_MANAGER_CLASS, SQLTemplateResourceManager.class.getName()); velocityRuntime.addProperty("userdirective", BindDirective.class.getName()); velocityRuntime.addProperty("userdirective", BindEqualDirective.class.getName()); velocityRuntime.addProperty("userdirective", BindNotEqualDirective.class.getName()); velocityRuntime.addProperty("userdirective", BindObjectEqualDirective.class.getName()); velocityRuntime.addProperty("userdirective", BindObjectNotEqualDirective.class.getName()); velocityRuntime.addProperty("userdirective", ResultDirective.class.getName()); velocityRuntime.addProperty("userdirective", ChainDirective.class.getName()); velocityRuntime.addProperty("userdirective", ChunkDirective.class.getName()); try { velocityRuntime.init(); } catch (Exception ex) { throw new CayenneRuntimeException("Error setting up Velocity RuntimeInstance.", ex); } }
static SimpleNode parsedTemplateForResource(String resourceName) { InputStream in = RetrofitTemplateVars.class.getResourceAsStream(resourceName); if (in == null) { throw new IllegalArgumentException("Could not find resource: " + resourceName); } try { Reader reader = new InputStreamReader(in, "UTF-8"); return velocityRuntimeInstance.parse(reader, resourceName); } catch (UnsupportedEncodingException e) { throw new AssertionError(e); } catch (ParseException e) { throw new AssertionError(e); } }
private SimpleNode parse(String template) { SimpleNode nodeTree = null; try { nodeTree = velocityRuntime.parse(new StringReader(template), template); } catch (ParseException pex) { throw new CayenneRuntimeException( "Error parsing template '" + template + "' : " + pex.getMessage()); } if (nodeTree == null) { throw new CayenneRuntimeException("Error parsing template " + template); } return nodeTree; }