Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012, Emanuel Rabina (http://www.ultraq.net.nz/)
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *     http://www.apache.org/licenses/LICENSE-2.0
   * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package nz.net.ultraq.thymeleaf.decorator;
 
 
 import static nz.net.ultraq.thymeleaf.LayoutDialect.LAYOUT_PREFIX;
 import static nz.net.ultraq.thymeleaf.decorator.DecoratorUtilities.HTML_ELEMENT_HTML;
 
 
 import java.util.Map;

Specifies the name of the decorator template to apply to a content template.

The mechanism for resolving decorator templates is the same as that used by Thymeleaf to resolve th:fragment and th:substituteby pages.

Author(s):
Emanuel Rabina
 
 public class DecoratorProcessor extends AbstractContentProcessor {
 
 	private static final Logger logger = LoggerFactory.getLogger(DecoratorProcessor.class);
 
 	public static final String PROCESSOR_NAME_DECORATOR = "decorator";
Constructor, sets this processor to work on the 'decorator' attribute.
 
 	public DecoratorProcessor() {
 
 	}

Locates the decorator page specified by the layout attribute and applies it to the current page being processed.

Parameters:
arguments
element
attributeName
Returns:
Result of the processing.
 
 	protected ProcessorResult processAttribute(Arguments argumentsElement elementString attributeName) {
 
 		// Ensure the decorator attribute is in the root element of the document
 		if (!(element.getParent() instanceof Document)) {
 			.error("layout:decorator attribute must appear in the root element of your content page");
 			throw new IllegalArgumentException("layout:decorator attribute must appear in the root element of your content page");
 		}
 		Document document = (Document)element.getParent();
 
 		// Locate the decorator page
 		FragmentAndTarget fragmentandtarget = StandardFragmentProcessor.computeStandardFragmentSpec(
 				arguments.getConfiguration(), argumentselement.getAttributeValue(attributeName),
 				nullnullfalse);
 		Template decoratortemplate = arguments.getTemplateRepository().getTemplate(new TemplateProcessingParameters(
 				arguments.getConfiguration(), fragmentandtarget.getTemplateName(), arguments.getContext()));
 		element.removeAttribute(attributeName);
 
 		Document decoratordocument = decoratortemplate.getDocument();
 		Element decoratorrootelement = decoratordocument.getFirstElementChild();
 
 		// Gather all fragment parts from this page and scope to the HTML element.
 		// These will be used to decorate the document as Thymeleaf encounters the
 		// fragment placeholders.
 		Map<String,Objectfragments = findFragments(document.getElementChildren());
 		if (!fragments.isEmpty()) {
 			decoratorrootelement.setAllNodeLocalVariables(fragments);
 		}
 
 		// Decide which kind of decorator to apply, given the decorator page root element
 		Decorator decorator = decoratorrootelement != null &&
				decoratorrootelement.getOriginalName().equals() ?
		// Perform decoration
		decorator.decorate(decoratorrootelementelement);
	}
New to GrepCode? Check out our FAQ X