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.ApplicationRuntimeException;
14 import org.apache.tapestry.IComponent;
15 import org.apache.tapestry.IForm;
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.form.AbstractFormComponent;
21 import org.apache.tapestry.html.Body;
22 import org.asyrinx.brownie.tapestry.script.ScriptUtils;
23 import org.asyrinx.brownie.tapestry.util.ComponentUtils;
24
25 /***
26 * @author akima
27 */
28 public class FormEditingControl extends AbstractFormComponent {
29
30 /***
31 * @see org.apache.tapestry.AbstractComponent#renderComponent(org.apache.tapestry.IMarkupWriter,
32 * org.apache.tapestry.IRequestCycle)
33 */
34 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
35 this.form = getForm(cycle);
36 final IPage page = getPage();
37 if (page instanceof BaseEditPage) {
38 final BaseEditPage editPage = (BaseEditPage) page;
39 if (!editPage.isEditing()) {
40 final Body body = getBodyComponent(page);
41 final IScript loadedScript = loadScript(this);
42 addScript(cycle, loadedScript, body);
43 }
44 }
45 }
46
47 protected Body getBodyComponent(IPage page) {
48 final IComponent component = ComponentUtils.searchBottomByClass(page,
49 Body.class);
50 if (component instanceof Body)
51 return (Body) component;
52 else
53 throw new ApplicationRuntimeException("must-have-Body-component",
54 this, null, null);
55 }
56
57 public static final String SYM_TARGET_FORM_NAME = "targetFormName";
58
59 /***
60 * @see org.asyrinx.brownie.tapestry.components.link.AbstractScriptLinkRenderer#addScript(org.apache.tapestry.IRequestCycle,
61 * org.apache.tapestry.IScript, org.apache.tapestry.html.Body)
62 */
63 protected void addScript(IRequestCycle cycle, IScript targetScript,
64 Body body) {
65 final Map symbols = new HashMap();
66 symbols.put(SYM_TARGET_FORM_NAME, form.getName());
67 targetScript.execute(cycle, body, symbols);
68 }
69
70 private static final String SCRIPT_NAME = "FormEditingControl.script";
71
72 private IScript script = null;
73
74 /***
75 * @return
76 */
77 protected IScript loadScript(IComponent component) {
78 if (script == null)
79 script = ScriptUtils.loadScript(component, SCRIPT_NAME);
80 return script;
81 }
82
83 private String name = null;
84
85 /***
86 * @see org.apache.tapestry.form.IFormComponent#getName()
87 */
88 public String getName() {
89 return name;
90 }
91
92 /***
93 * @see org.apache.tapestry.form.IFormComponent#setName(java.lang.String)
94 */
95 public void setName(String name) {
96 this.name = name;
97 }
98
99 /***
100 * @see org.apache.tapestry.form.AbstractFormComponent#isDisabled()
101 */
102 public boolean isDisabled() {
103 return false;
104 }
105
106 private IForm form = null;
107
108 /***
109 * @see org.apache.tapestry.form.IFormComponent#getForm()
110 */
111 public IForm getForm() {
112 return form;
113 }
114
115 /***
116 * @see org.apache.tapestry.form.AbstractFormComponent#setForm(org.apache.tapestry.IForm)
117 */
118 public void setForm(IForm form) {
119 this.form = form;
120 }
121
122 }