rendered paste bodypackage com.loomis.jsf.component.wiki;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.component.html.HtmlOutputLink;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.render.Renderer;
import org.apache.myfaces.custom.div.Div;
import org.apache.myfaces.custom.inputAjax.HtmlCommandButtonAjax;
public class WikiRenderer extends Renderer {
@SuppressWarnings("unchecked")
@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
WikiComponent wikiComponent = (WikiComponent) component;
component.getChildren().add(generateDisplayDiv(context, component));
if (wikiComponent.isWikiEnabled()) {
component.getChildren().add(generateEditDiv(context, component));
}
}
@SuppressWarnings("unchecked")
public Div generateEditDiv(FacesContext context, UIComponent component) {
Div editDiv = new Div();
UIForm form = new UIForm();
HtmlPanelGrid panelGrid = new HtmlPanelGrid();
HtmlCommandButtonAjax button = new HtmlCommandButtonAjax();
HtmlOutputLink cancelLink = new HtmlOutputLink();
cancelLink.setId(getCancelLinkId(context, component));
button.setId(getSubmitButtonId(context, component));
panelGrid.setColumns(3);
panelGrid.getChildren().add(component);
panelGrid.getChildren().add(button);
panelGrid.getChildren().add(cancelLink);
form.getChildren().add(panelGrid);
editDiv.getChildren().add(form);
return editDiv;
}
public Div generateDisplayDiv(FacesContext context, UIComponent component) {
Div displayDiv = ((WikiComponent) component).getDisplayDiv();
displayDiv.setId(getDisplayDivId(context, component));
return displayDiv;
}
@Override
public boolean getRendersChildren() {
return true;
}
@Override
public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
for (Object childObj : component.getChildren()) {
UIComponent child = (UIComponent)childObj;
if (!child.isRendered()) {
continue;
}
if (child instanceof WikiComponent) {
Renderer renderer = ((WikiComponent)child).getOriginalRenderer();
renderer.encodeBegin(context, child);
if (renderer.getRendersChildren()) {
renderer.encodeChildren(context, child);
}
renderer.encodeEnd(context, child);
} else if (getPannelGridId(context, component).equals(component.getId())) {
encodeChildren(context, child); // You found the pannel! Recurse!
} else {
child.encodeBegin(context);
if (child.getRendersChildren()) {
child.encodeChildren(context);
}
child.encodeEnd(context);
}
}
}
public static String generateId(String prefix, FacesContext context, UIComponent component) {
return prefix + component.getId().replaceAll(":", "_");
}
public static String getDisplayDivId(FacesContext context, UIComponent component) {
return generateId("displayDivFor_", context, component);
}
public static String getEditDivId(FacesContext context, UIComponent component) {
return generateId("editDivFor_", context, component);
}
public static String getManagerName(FacesContext context, UIComponent component) {
return generateId("managerFor_", context, component);
}
public static String getPannelGridId(FacesContext context, UIComponent component) {
return generateId("pannelGridFor_", context, component);
}
public static String getCancelLinkId(FacesContext context, UIComponent component) {
return generateId("cancelLinkFor_", context, component);
}
public static String getSubmitButtonId(FacesContext context, UIComponent component) {
return generateId("submitButtonFor_", context, component);
}
}