1   package com.tirsen.angkor.widget;
2   
3   import com.tirsen.angkor.Controller;
4   import com.tirsen.angkor.Debug;
5   import com.tirsen.angkor.RenderContext;
6   import com.tirsen.angkor.ViewLink;
7   import com.tirsen.angkor.Component;
8   import com.tirsen.angkor.event.AbstractAction;
9   import com.tirsen.angkor.event.Action;
10  import com.tirsen.angkor.event.ActionEvent;
11  import com.tirsen.angkor.event.ActionListener;
12  import com.tirsen.angkor.event.ActionSource;
13  import com.tirsen.angkor.event.ActionSourceHelper;
14  import org.apache.log4j.Category;
15  
16  import java.io.IOException;
17  
18  /***
19   * This has essentially been refactored into something almost exactly similar to {@link Link}.
20   * TODO refactor this into Link and remove this class and all its uses.
21   *
22   * <!-- $Id: MenuItem.java,v 1.6 2002/10/13 19:59:23 tirsen Exp $ -->
23   * <!-- $Author: tirsen $ -->
24   *
25   * @author Jon Tirsén (tirsen@users.sourceforge.net)
26   * @version $Revision: 1.6 $
27   */
28  public class MenuItem extends Component implements ActionSource
29  {
30      private static final Category logger = Category.getInstance(Debug.LOGGER_NAME);
31  
32      private String text;
33      private ActionSourceHelper actionSourceHelper = new ActionSourceHelper(this);
34  
35      public MenuItem(Action action)
36      {
37          setAction(action);
38      }
39  
40      /***
41       * The specified text or if specified text is <code>null</code> the name of the action.
42       */
43      public String getText()
44      {
45          String ret = text;
46          if (ret == null && getAction() != null) ret = (String) getAction().getValue(Action.NAME);
47          return ret;
48      }
49  
50      public void setText(String text)
51      {
52          this.text = text;
53      }
54  
55      public boolean isParsing()
56      {
57          return true;
58      }
59  
60      public void parse(RenderContext context)
61      {
62          super.parse(context);
63          if ("clicked".equals(context.getRequestParameter(getId())))
64          {
65              click(context);
66          }
67      }
68  
69      public static class GotoAction extends AbstractAction
70      {
71          private ViewLink link;
72          private String linkName;
73          private Controller target;
74  
75          public GotoAction(String linkName, Controller target)
76          {
77              super(target.getDisplayName());
78              this.linkName = linkName;
79              this.target = target;
80          }
81  
82          public GotoAction(ViewLink link, Controller target)
83          {
84              super(target.getDisplayName());
85              this.link = link;
86              this.target = target;
87          }
88  
89          public void actionPerformed(ActionEvent evt)
90          {
91              logger.debug("going to " + target);
92              if (linkName != null) target.getApplication().relink(linkName, target);
93              if (link != null) link.relink(target);
94          }
95  
96          public boolean isViewShown()
97          {
98              boolean result = false;
99              if (target == null)
100                 result = false;
101             else if (linkName != null)
102                 result = (target == target.getApplication().getComponent(linkName));
103             else if (link != null) result = target == link.getTarget();
104             return result;
105         }
106 
107         public boolean isEnabled()
108         {
109             return super.isEnabled() && !isViewShown();
110         }
111     }
112 
113     public void click(RenderContext context)
114     {
115         logger.info("" + this + " was clicked.");
116         actionSourceHelper.signalActionEvent(context);
117     }
118 
119     public void render(RenderContext context) throws IOException
120     {
121         if (isVisible())
122         {
123             if (!isEnabled())
124             {
125                 // render as disabled
126                 context.startTag("SPAN id=\"" + uniqueId(context) + "\"");
127                 context.println(getText());
128                 context.endTag("SPAN");
129             }
130             else
131             {
132                 String url = context.requestURL(uniqueId(context) + "=clicked");
133                 context.startTag("A id=\"" + uniqueId(context) + "\" href=\"" + url + "\"");
134                 context.println(getText());
135                 context.endTag("A");
136                 context.registerParsingComponent(this);
137             }
138             context.println(" ");
139         }
140     }
141 
142     public boolean isEnabled()
143     {
144         return getAction().isEnabled();
145     }
146 
147     public Action getAction()
148     {
149         return actionSourceHelper.getAction();
150     }
151 
152     public void setAction(Action action)
153     {
154         actionSourceHelper.setAction(action);
155     }
156 
157     public void addActionListener(ActionListener listener)
158     {
159         actionSourceHelper.addActionListener(listener);
160     }
161 
162     public void removeActionListener(ActionListener listener)
163     {
164         actionSourceHelper.removeActionListener(listener);
165     }
166 
167     public void signalActionEvent()
168     {
169         actionSourceHelper.signalActionEvent();
170     }
171 }
This page was automatically generated by Maven