1
2
3
4
5
6 package org.weda.tapestry.component;
7
8 import java.util.HashMap;
9 import java.util.Map;
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.apache.tapestry.BaseComponent;
13 import org.apache.tapestry.IBinding;
14 import org.apache.tapestry.IRequestCycle;
15 import org.apache.tapestry.annotations.InjectObject;
16 import org.apache.tapestry.annotations.Parameter;
17 import org.apache.tapestry.binding.BindingFactory;
18 import org.apache.tapestry.binding.LiteralBindingFactory;
19 import org.weda.action.StateableObject;
20 import org.weda.model.EditorModel;
21
22 /**
23 *
24 * @author Mikhail Titov
25 */
26 public abstract class EditorGroupComponent
27 extends BaseComponent
28 implements StateableObject
29 {
30 private final static Log log =
31 LogFactory.getLog(EditorGroupComponent.class);
32
33 private final static String MODEL_NAME_STATE_NAME = "modelName";
34 private EditorGroup editorGroup;
35
36 private IBinding modelNameBinding;
37
38 @Parameter()
39 public abstract String getStyle();
40 @Parameter(required=true)
41 public abstract String getModelName();
42 public abstract void setModelName(String modelName);
43
44 @InjectObject("service:tapestry.bindings.LiteralBindingFactory")
45 public abstract BindingFactory getBindingFactory();
46
47 public EditorModel getModel() {
48 return editorGroup.getModel(getModelName());
49 }
50
51 public EditorGroup getEditorGroup() {
52 return editorGroup;
53 }
54
55 protected void prepareForRender(IRequestCycle cycle) {
56 super.prepareForRender(cycle);
57 modelNameBinding = null;
58 editorGroup =
59 (EditorGroup)cycle.getAttribute(
60 EditorGroup.EDITOR_GROUP_ATTRIBUTE_NAME);
61 editorGroup.addEditorGroupComponent(this);
62 }
63
64 public void restoreState(Map state) {
65 if (log.isDebugEnabled())
66 log.debug("Restoring state");
67 if (state!=null){
68 modelNameBinding = getBinding("modelName");
69 IBinding binding =
70 getBindingFactory().createBinding(
71 this, ""
72 , (String)state.get(MODEL_NAME_STATE_NAME), null);
73 setBinding("modelName", binding);
74 }
75 }
76
77 public Map getState() {
78 Map state = new HashMap();
79 state.put(MODEL_NAME_STATE_NAME, getModelName());
80 return state;
81 }
82
83 public void resetState(Map state) {
84 if (state!=null)
85 setBinding("modelName", modelNameBinding);
86 }
87
88 }