1
2
3
4
5
6
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
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 }