View Javadoc

1   /*
2    * EditorModelComponent.java
3    * Created on 4 Март 2006 г., 15:02
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  }