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.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 }