package org.richfaces.cdk.templatecompiler.model; import java.util.List; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlMixed; import javax.xml.bind.annotation.XmlSeeAlso; import org.richfaces.cdk.CdkException; import com.google.common.collect.Lists; /** * <p class="changed_added_4_0"> * All classes that are used in template bodey should be presented in the {@link XmlSeeAlso} annotation * </p> * * @author asmirnov@exadel.com */ @XmlSeeAlso({ CdkCallElement.class, CdkBodyElement.class, CdkIfElement.class, CdkObjectElement.class, CdkChooseElement.class, CdkWhenElement.class, CdkOtherwiseElement.class, CdkForEachElement.class, CdkSwitchElement.class, CdkCaseElement.class, CdkDefaultElement.class, CdkScriptObjectElement.class, CdkScriptOptionElement.class, CompositeRenderFacet.class, CdkRenderFragmentElement.class }) public class ModelFragment implements LeafModelElement { private List<Object> children = Lists.newArrayList(); @XmlAnyElement(lax = true, value = ElementsHandler.class) @XmlMixed public List<Object> getChildren() { return this.children; } /** * <p class="changed_added_4_0"> * </p> * * @param body the body to set */ public void setChildren(List<Object> body) { this.children = body; } @Override public void visit(TemplateVisitor visitor) throws CdkException { beforeVisit(visitor); visitChildren(visitor); afterVisit(visitor); } public void visitChildren(TemplateVisitor visitor) { List<Object> childrenList = getChildren(); for (Object child : childrenList) { if (child instanceof String) { visitor.visitElement((String) child); } else if (child instanceof ModelElement) { ((ModelElement) child).visit(visitor); } else { throw new CdkException("Unknown type of element in renderer template " + child.getClass()); } } } public void afterVisit(TemplateVisitor visitor) throws CdkException { } public void beforeVisit(TemplateVisitor visitor) throws CdkException { } }