private void render(Object obj, StringBuilder result) { render(obj, result, false); }
private Template extractLoopBody(String tagName) { String closingTag = "{{/" + tagName + "}}"; int endOfBody = template.indexOf(closingTag, index); Template body = new Template(template.substring(index, endOfBody)); index = endOfBody + closingTag.length(); return body; }
private void render(Object obj, StringBuilder result, boolean last) { index = 0; while(scanNextTag()) { copyPrefixTo(result); index += 2; if (isLoopTag()) { index++; String tagName = readTagName(); Template body = extractLoopBody(tagName); List<?> values = (List<?>) readTagValue(tagName, obj, last); int lastIndex = values.size() - 1; for (int i = 0; i < values.size(); i++) { body.render(values.get(i), result, i == lastIndex); } } else { String tagName = readTagName(); result.append(readTagValue(tagName, obj, false)); } } copySuffixTo(result); }
private Object readTagValue(String tagName, Object obj, boolean last) { Object value = readBuiltinTag(tagName, obj, last); if (value != null) return value; return readField(tagName, obj); }
@SuppressWarnings("unchecked") private MpscChannelProducer<E> newProducer(final Class<E> type, final Object... args) { return mapper.newFlyweight(MpscChannelProducer.class, "ChannelProducerTemplate.java", Template.fromFile(Channel.class, "ChannelProducerTemplate.java"), args); }
public static Template fromFile(final Class<?> resourceRoot, final String fileName) { InputStream templateStream = resourceRoot.getResourceAsStream(fileName); if(templateStream == null) { throw new IllegalArgumentException("Template file of the name: \'"+fileName+"\' was not found."); } return fromStream(templateStream); }
@SuppressWarnings("unchecked") private SpscChannelConsumer<E> newConsumer(Object... args) { return mapper.newFlyweight(SpscChannelConsumer.class, "ChannelConsumerTemplate.java", Template.fromFile(Channel.class, "ChannelConsumerTemplate.java"), args); }
@SuppressWarnings("unchecked") private SpscChannelProducer<E> newProducer(final Class<E> type, final Object... args) { return mapper.newFlyweight(SpscChannelProducer.class, "ChannelProducerTemplate.java", Template.fromFile(Channel.class, "ChannelProducerTemplate.java"), args); }
public String render(Object o) { StringBuilder result = new StringBuilder(template.length()); render(o, result); return result.toString(); }
private static Template fromStream(InputStream templateStream) { if(templateStream == null) { throw new IllegalArgumentException("Null template stream"); } BufferedReader reader = new BufferedReader(new InputStreamReader(templateStream)); try { try { StringBuilder buffer = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { buffer.append(line); buffer.append('\n'); } return new Template(buffer.toString()); } finally { reader.close(); } } catch (IOException e) { throw new IllegalArgumentException(e); } }
@SuppressWarnings("unchecked") private MpscChannelConsumer<E> newConsumer(Object... args) { return mapper.newFlyweight(MpscChannelConsumer.class, "ChannelConsumerTemplate.java", Template.fromFile(Channel.class, "ChannelConsumerTemplate.java"), args); }
public <I> I newFlyweight(Class<I> implementationParent, String templateFileName, Template template, Object... args) { Class<?>[] constructorParameterTypes = getTypes(args); ClassViewModel model = new ClassViewModel(implementationParent, constructorParameterTypes, structInterface, inspector); String source = template.render(model); debugLogSource(source); CompilationResult result = compiler.compile(model.className(), source); checkCompileFailures(templateFileName, result); return instantiateImplementation(constructorParameterTypes, model.className(), result, args); }
public <I> I newFlyweight(Class<I> implementationParent, String templateFileName, Object... args) { Template template = Template.fromFile(implementationParent, templateFileName); return newFlyweight(implementationParent, templateFileName, template, args); }