1 package org.weda.tapestry.component;
2
3 import org.apache.tapestry.IMarkupWriter;
4 import org.apache.tapestry.IRequestCycle;
5 import org.apache.tapestry.IScript;
6 import org.apache.tapestry.PageRenderSupport;
7 import org.apache.tapestry.TapestryUtils;
8 import org.apache.tapestry.annotations.ComponentClass;
9 import org.apache.tapestry.annotations.InjectScript;
10 import org.apache.tapestry.annotations.Parameter;
11 import org.apache.tapestry.form.AbstractFormComponent;
12 import static org.weda.Constants.*;
13
14 /**Компонент отображающий действие в качестве кнопки.
15 *
16 * @author tim
17 */
18 @ComponentClass(allowBody=false,allowInformalParameters=false)
19 public abstract class Action extends AbstractAction {
20 @Parameter(required=true)
21 public abstract boolean isRenderAsLink();
22 @InjectScript("Action.script")
23 public abstract IScript getScript();
24
25 public String getOnClickHandler(){
26 AbstractFormComponent comp = (AbstractFormComponent)
27 (isRenderAsLink() ? getComponent("link") : getComponent("button"));
28 return String.format(
29 "setFormTarget('%s','%s')"
30 , comp.getForm().getName()
31 , getActionState().getTargetFrame());
32 }
33
34 public String getActionParameterClass(){
35 return ACTION_PARAMETER_CLASS;
36 }
37
38 public String getEditorClass(){
39 return getActionState().isEnabled()
40 ? EDITOR_CLASS : EDITOR_DISABLED_CLASS;
41 }
42
43 public String getActionLinkClass(){
44 return getActionState().isEnabled()? ACTION_LINK_CLASS : "";
45 }
46
47 public String getActionLinkTextClass(){
48 return getActionState().isEnabled()? "" : ACTION_LINK_DISABLED_CLASS;
49 }
50
51 public String getActionButtonClass(){
52 return getActionState().isEnabled()?
53 ACTION_BUTTON_CLASS : ACTION_BUTTON_DISABLED_CLASS;
54 }
55
56 public String getAccessKey(){
57 String accessKey =
58 getActionState().getActionDescriptor().getAccessKey();
59 return accessKey==null? "": accessKey;
60 }
61
62 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
63 PageRenderSupport pageRenderSupport =
64 TapestryUtils.getPageRenderSupport(cycle, this);
65 getScript().execute(cycle, pageRenderSupport, null);
66 super.renderComponent(writer, cycle);
67 }
68
69 }