MultiTemplateContent.java
package fr.sii.ogham.core.message.content;
import fr.sii.ogham.core.resource.path.ResourcePath;
import fr.sii.ogham.core.resource.path.UnresolvedPath;
import fr.sii.ogham.core.template.context.BeanContext;
import fr.sii.ogham.core.template.context.Context;
import fr.sii.ogham.core.template.context.NullContext;
/**
* <p>
* A shortcut for using several templates with same context.
* </p>
* <p>
* You have to put all templates to include at once at the same place. Each file
* must be named identically. Only the extension must be different.
* </p>
* <p>
* Then you only need to indicate the path to the templates without any
* extension and provide the context.
* </p>
* <p>
* You can also specify all the extensions/variants to append to the template
* path. By default, the extensions/variants will be {@link EmailVariant#HTML}
* and {@link EmailVariant#TEXT}
* </p>
*
* @author Aurélien Baudet
*
*/
public class MultiTemplateContent extends MultiContent {
/**
* Initialize with the template path (without extension/variant) and the
* context. You may also specify the extensions to use.
*
* @param templatePath
* the path to the template (without extension/variant)
* @param context
* the context to share
* @param variants
* the variants to specify
*/
public MultiTemplateContent(String templatePath, Context context, Variant... variants) {
this(new UnresolvedPath(templatePath), context, variants);
}
/**
* Initialize with the template path (without extension/variant) and the
* context. It uses the default variants ({@link EmailVariant#HTML} and
* {@link EmailVariant#TEXT}).
*
* @param templatePath
* the path to the template (without extension/variant)
* @param context
* the context to share
*/
public MultiTemplateContent(String templatePath, Context context) {
this(new UnresolvedPath(templatePath), context);
}
/**
* Initialize with the template path (without extension/variant) and the
* context as simple bean. You may also specify the extensions/variants to
* use.
*
* @param templatePath
* the path to the template (without extension/variant)
* @param bean
* the context to share as a simple POJO object
* @param extensions
* the extensions to specify
*/
public MultiTemplateContent(String templatePath, Object bean, Variant... extensions) {
this(new UnresolvedPath(templatePath), bean, extensions);
}
/**
* Initialize with the template path (without extension/variant) and the
* context as simple bean. It uses the default variants (
* {@link EmailVariant#HTML} and {@link EmailVariant#TEXT}).
*
* @param templatePath
* the path to the template (without extension/variant)
* @param bean
* the context to share as a simple POJO object
*/
public MultiTemplateContent(String templatePath, Object bean) {
this(new UnresolvedPath(templatePath), bean);
}
/**
* Initialize with the template path (without extension/variant) and the
* context. You may also specify the extensions to use.
*
* @param templatePath
* the path to the template (without extension/variant)
* @param context
* the context to share
* @param variants
* the variants to specify
*/
public MultiTemplateContent(ResourcePath templatePath, Context context, Variant... variants) {
super(createTemplates(templatePath, context, variants));
}
/**
* Initialize with the template path (without extension/variant) and the
* context. It uses the default variants ({@link EmailVariant#HTML} and
* {@link EmailVariant#TEXT}).
*
* @param templatePath
* the path to the template (without extension/variant)
* @param context
* the context to share
*/
public MultiTemplateContent(ResourcePath templatePath, Context context) {
this(templatePath, context, EmailVariant.TEXT, EmailVariant.HTML);
}
/**
* Initialize with the template path (without extension/variant) and the
* context as simple bean. You may also specify the extensions/variants to
* use.
*
* @param templatePath
* the path to the template (without extension/variant)
* @param bean
* the context to share as a simple POJO object
* @param extensions
* the extensions to specify
*/
public MultiTemplateContent(ResourcePath templatePath, Object bean, Variant... extensions) {
this(templatePath, bean != null ? new BeanContext(bean) : new NullContext(), extensions);
}
/**
* Initialize with the template path (without extension/variant) and the
* context as simple bean. It uses the default variants (
* {@link EmailVariant#HTML} and {@link EmailVariant#TEXT}).
*
* @param templatePath
* the path to the template (without extension/variant)
* @param bean
* the context to share as a simple POJO object
*/
public MultiTemplateContent(ResourcePath templatePath, Object bean) {
this(templatePath, bean != null ? new BeanContext(bean) : new NullContext());
}
private static TemplateContent[] createTemplates(ResourcePath templatePath, Context context, Variant[] variants) {
TemplateContent[] contents = new TemplateContent[variants.length];
for (int i = 0; i < variants.length; i++) {
contents[i] = new TemplateVariantContent(templatePath, variants[i], context);
}
return contents;
}
}