package org.jboss.seam.pdf.ui; import javax.faces.context.*; import com.lowagie.text.*; public class UISection extends ITextComponent { public static final String COMPONENT_TYPE = "org.jboss.seam.pdf.ui.UISection"; Section section; Integer numberDepth; String sectionTitle; boolean newPage = false; public void setNumberDepth(Integer numberDepth) { this.numberDepth = numberDepth; } public void setSectionTitle(String sectionTitle) { this.sectionTitle = sectionTitle; } public boolean getNewPage() { return (Boolean) valueBinding("newPage", newPage); } public void setNewPage(boolean newPage) { this.newPage = newPage; } public Section getSection() { return section; } @Override public Object getITextObject() { return null; // don't add to parent - already added. } @Override public void removeITextObject() { section = null; } @Override public void handleAdd(Object o) { section.add(o); } @Override public void createITextObject(FacesContext context) { UISection uiParent = (UISection) findITextParent(getParent(), UISection.class); Section sectionParent = uiParent.getSection(); if (sectionParent == null) { throw new RuntimeException("section must have a parent chapter/section"); } numberDepth = (Integer) valueBinding(context, "numberDepth", numberDepth); if (numberDepth == null) { numberDepth = countSectionParents(this, 0); } section = sectionParent.addSection(new Paragraph(""), numberDepth); sectionTitle = (String) valueBinding(context, "sectionTitle", sectionTitle); if (sectionTitle != null) { section.setBookmarkTitle(sectionTitle); } section.setTriggerNewPage(getNewPage()); } private int countSectionParents(UISection component, int level) { if (component == null) { return level; } return countSectionParents((UISection) findITextParent(component.getParent(), UISection.class), level + 1); } public void setTitle(Paragraph title) { section.setTitle(title); } }