Validate.notNull(processingContext, "Processing Context cannot be null");
Validate.notEmpty(standardFragmentSpec, "Fragment Spec cannot be null");
// Target element and attribute names can be null
final FragmentSelection fragmentSelection =
FragmentSelectionUtils.parseFragmentSelection(configuration, processingContext, standardFragmentSpec);
final IStandardExpression templateNameExpression = fragmentSelection.getTemplateName();
final String templateName;
if (templateNameExpression != null) {
final Object templateNameObject = templateNameExpression.execute(configuration, processingContext);
if (templateNameObject == null) {
throw new TemplateProcessingException(
"Evaluation of template name from spec \"" + standardFragmentSpec + "\" " +
"returned null.");
}
final String evaluatedTemplateName = templateNameObject.toString();
if (TEMPLATE_NAME_CURRENT_TEMPLATE.equals(evaluatedTemplateName)) {
// Template name is "this" and therefore we are including a fragment from the same template.
templateName = null;
} else {
templateName = templateNameObject.toString();
}
} else {
// If template name expression is null, we will execute the fragment on the "current" template
templateName = null;
}
// Resolve fragment parameters, if specified (null if not)
final Map<String,Object> fragmentParameters =
resolveFragmentParameters(configuration,processingContext,fragmentSelection.getParameters());
if (fragmentSelection.hasFragmentSelector()) {
final Object fragmentSelectorObject =
fragmentSelection.getFragmentSelector().execute(configuration, processingContext);
if (fragmentSelectorObject == null) {
throw new TemplateProcessingException(
"Evaluation of fragment selector from spec \"" + standardFragmentSpec + "\" " +
"returned null.");
}