All pastes #122995 Raw Edit

Stuff

public text v1 · immutable
·published 2006-08-09 01:52 UTC
rendered paste body
package 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);
	}
}