View Javadoc

1   /*
2    * Joey and its relative products are published under the terms
3    * of the Apache Software License.
4    */
5   /*
6    * Created on 2004/01/05
7    */
8   package org.asyrinx.joey.tapestry.components.stative;
9   
10  import java.util.HashMap;
11  import java.util.Map;
12  
13  import org.apache.tapestry.AbstractComponent;
14  import org.apache.tapestry.ApplicationRuntimeException;
15  import org.apache.tapestry.IComponent;
16  import org.apache.tapestry.IMarkupWriter;
17  import org.apache.tapestry.IPage;
18  import org.apache.tapestry.IRequestCycle;
19  import org.apache.tapestry.IScript;
20  import org.apache.tapestry.html.Body;
21  import org.asyrinx.brownie.tapestry.script.ScriptUtils;
22  import org.asyrinx.brownie.tapestry.util.ComponentUtils;
23  
24  /***
25   * @author akima
26   */
27  public class PageEditingControl extends AbstractComponent {
28  
29  	/***
30  	 * @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
31  	 *        org.apache.tapestry.IRequestCycle)
32  	 */
33  	protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
34  		//super.renderComponent(writer, cycle);
35  		final IPage page = getPage();
36  		if (page instanceof BaseEditPage) {
37  			final BaseEditPage editPage = (BaseEditPage) page;
38  			if (!editPage.isEditing()) {
39  				final Body body = getBodyComponent(page);
40  				final IScript loadedScript = loadScript(this);
41  				addScript(cycle, loadedScript, body);
42  			}
43  		}
44  	}
45  
46  	protected Body getBodyComponent(IPage page) {
47  		final IComponent component = ComponentUtils.searchBottomByClass(page,
48  				Body.class);
49  		if (component instanceof Body)
50  			return (Body) component;
51  		else
52  			throw new ApplicationRuntimeException("must-have-Body-component",
53  					this, null, null);
54  	}
55  
56  	/***
57  	 * @see org.asyrinx.brownie.tapestry.components.link.AbstractScriptLinkRenderer#addScript(org.apache.tapestry.IRequestCycle,
58  	 *        org.apache.tapestry.IScript, org.apache.tapestry.html.Body)
59  	 */
60  	protected void addScript(IRequestCycle cycle, IScript targetScript,
61  			Body body) {
62  		final Map symbols = new HashMap();
63  		targetScript.execute(cycle, body, symbols);
64  	}
65  
66  	private static final String SCRIPT_NAME = "PageEditingControl.script";
67  
68  	private IScript script = null;
69  
70  	/***
71  	 * @return
72  	 */
73  	protected IScript loadScript(IComponent component) {
74  		if (script == null)
75  			script = ScriptUtils.loadScript(component, SCRIPT_NAME);
76  		return script;
77  	}
78  
79  }